## 以太坊单位
assert(1 wei == 1); assert(1 gwei == 1e9); assert(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个区块有效 -
blobhash(uint index) returns (bytes32): 与当前交易相关联的第index个blob。 此带版本的哈希值是由一个表示版本的单字节(当前为0x01)和紧随其后的KZG证明的SHA256哈希的最后31个字节组成。 ( EIP-4844 )。 -
block.blobbasefee(uint): 当前区块的blob基础费用( EIP-7516 和 EIP-4844) -
block.chainid(uint): 当前链的ID -
block.coinbase(address payable): 当前区块矿工的地址 -
block.difficulty(uint): 当前区块的难度值(EVM < Paris)。对于其他EVM版本,它是block.prevrandao的一个废弃的别名,将在下一个重大改变版本中被删除。 -
block.gaslimit(uint): 当前区块的燃料上限 -
block.number(uint): 当前区块的区块号 -
block.prevrandao(uint): 由信标链提供的随机数(EVM >= Paris)(见 EIP-4399 )。 -
block.timestamp(uint): 当前区块的时间戳,自Unix epoch以来的秒数 -
gasleft() returns (uint256): 剩余燃料 -
msg.data(bytes): 完整的调用数据 -
msg.sender(address): 消息发送方(当前调用) -
msg.sig(bytes4): 调用数据的前四个字节(即函数标识符)。 -
msg.value(uint): 随消息发送的 wei 的数量 -
tx.gasprice(uint): 交易的燃料价格 -
tx.origin(address): 交易发送方(完整调用链上的原始发送方)
ABI编码和解码函数
-
abi.decode(bytes memory encodedData, (...)) returns (...): ABI-解码给定的数据,而类型在括号中作为第二个参数给出。例如:(uint a, uint[2] memory b, bytes memory c) = abi.decode(data, (uint, uint[2], bytes)) -
abi.encode(...) returns (bytes memory): 对给定的参数进行ABI编码 -
abi.encodePacked(...) returns (bytes memory): 对给定参数执行 紧打包编码。 请注意,打包编码可能会有歧义! -
abi.encodeWithSelector(bytes4 selector, ...) returns (bytes memory): ABI-对给定参数进行编码,并以给定的函数选择器作为起始的4字节数据一起返回 -
abi.encodeWithSignature(string memory signature, ...) returns (bytes memory): 相当于abi.encodeWithSelector(bytes4(keccak256(bytes(signature))), ...) -
abi.encodeCall(function functionPointer, (...)) returns (bytes memory): 对函数指针的调用进行ABI编码,参数在元组中找到。执行全面的类型检查,确保类型与函数签名相符。结果相当于abi.encodeWithSelector(functionPointer.selector, (...))。
错误处理
assert(bool condition)
如果条件不满足,会导致异常,因此,状态变化会被恢复 - 用于内部错误。
require(bool condition)
如果条件不满足,则恢复状态更改 - 用于输入或外部组件的错误。
require(bool condition, string memory message)
如果条件不满足,则恢复状态更改 - 用于输入或外部组件的错误,可以同时提供一个错误消息。
revert()
终止运行并恢复状态更改。
revert(string memory reason)
终止运行并恢复状态更改,可以同时提供一个解释性的字符串。