Solidity 04

38 阅读2分钟

## 以太坊单位 

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.basefee (uint): 当前区块的基本费用 ( EIP-3198EIP-1559

  • block.blobbasefee (uint): 当前区块的blob基础费用( EIP-7516EIP-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)

终止运行并恢复状态更改,可以同时提供一个解释性的字符串。