智能合约-内置函数和变量解析

360 阅读3分钟

「这是我参与2022首次更文挑战的第13天,活动详情查看:2022首次更文挑战

前言

以太坊上的每一笔交易都需要手续费,我们称之为gas。单位是wei。同时还有很多的内置函数,本文大概列举一下。

Gas介绍

Gas是交易发起人需要为以太坊区块链上的每项操作支付的执行费的名称。 gas这个名称的灵感来源于这种费用可以作为加密燃料,驱动智能合约的运动。 gas可以从执行代码的矿工那里购买。

1 wei == 1;
1 gwei == 1e9;
1 ether == 1e18;

时间单位

时间单位,默认是秒。但是需要注意闰秒和闰年的影响,这里的统计的时间并不是完全和日历上的时间相同。

1 == 1 seconds`
1 minutes == 60 seconds
1 hours == 60 minutes
1 days == 24 hours
1 weeks == 7 days

区块和交易的属性

blockhash(uint blockNumber) returns (bytes32):指定区块的区块哈希,但是仅可用于最新的 256 个区块且不包括当前区块,否则返回0
.block.chainid (uint): 当前链 idblock.coinbase ( address ): 挖出当前区块的矿工地址
block.difficulty ( uint ): 当前区块难度block.gaslimit ( uint ): 当前区块 gas 限额
block.number ( uint ): 当前区块号
block.timestamp ( uint): 自 unix epoch 起始当前区块以秒计的时间戳
gasleft() returns (uint256) :剩余的 gasmsg.data ( bytes ): 完整的 
calldatamsg.sender ( address ): 消息发送者(当前调用)
msg.sig ( bytes4 ): calldata 的前 4 字节(也就是函数标识符)
msg.value ( uint ): 随消息发送的 wei 的数量,
tx.gasprice (uint): 交易的 gas 价格
tx.origin (address payable): 交易发起者(完全的调用链)

delete

删除其实并不是真正意义上的删除,对删除动态数组的时候,则为将数组长度变为0;对于静态数组是将每一个元素初始化;对于结构体就把每一个成员初始化。

数学和密码学函数

  • addmod(uint x,uint y,uint k) returns (uint)

这是计算(x*y)%k,乘法会在任意精度下执行,并且乘法的结果即使超过 2**256 也不会被截取。

  • mulmod(uint x,uint y,uint k) returns (uint)

这是计算(x*y)%k,乘法会在任意精度下执行,并且乘法的结果即使超过 2**256 也不会被截取。

  • keccak(byte memory) returns (bytes32)

计算 Keccak-256 哈希,这个还是用的比较多的。

合约相关的使用

合约里面使用this,表示当前合约的实例。

selfdestruct(address payable recipient)

 在交易成功结束后,销毁合约,并且把余额转到指定地址。接受的合约不会运行。

类型信息

type(X) 返回X的类型,目前只支持整型和合约类型。

  • type(C).name:
    获得合约名
  • type(C).creationCode:
    获得包含创建合约的字节码的memory byte[]数组。只能在内联汇编中使用。
  • type(C).runtimeCode
    获得合同的运行时字节码的内存字节数组,通常在构造函数的内联汇编中使用。
  • type(T).min T 的最小值。
  •  type(T).max T 的最大值。

总结

智能合约存在很多内置函数,我们平时合约里也可以根据实际情况去使用,也可极大的方便我们的开发。