文章目录
单位和全局可用变量(Units and Globally Available Variables)
特殊变量和函数
1. 区块和交易属性
在全局命名空间中始终存在一些特殊变量和函数,主要用于提供区块链相关信息或作为通用工具函数。
- blockhash(uint blockNumber) returns (bytes32):返回指定区块的哈希值,仅适用于最近 256 个区块;否则返回 0。
- blobhash(uint index) returns (bytes32):返回当前交易中第 index 个 blob 的版本化哈希值。版本化哈希由 1 个字节的版本号(目前为 0x01)和 KZG 承诺的 SHA256 哈希的后 31 个字节组成(EIP-4844)。如果不存在该索引的 blob,则返回 0。
- block.basefee (uint):当前区块的基础费用(EIP-3198 和 EIP-1559)。
- block.blobbasefee (uint):当前区块的 blob 基础费用(EIP-7516 和 EIP-4844)。
- block.chainid (uint):当前链的 Chain ID。
- block.coinbase (address payable):当前区块矿工的地址。
- block.difficulty (uint):当前区块的难度(仅适用于 Paris 之前的 EVM 版本)。在其他 EVM 版本中,它是 block.prevrandao 的废弃别名(EIP-4399)。
- block.gaslimit (uint):当前区块的 gas 限制。
- block.number (uint):当前区块的编号。
- block.prevrandao (uint):由信标链提供的随机数(适用于 EVM >= Paris)。
- block.timestamp (uint):当前区块的时间戳(自 Unix 纪元以来的秒数)。
- gasleft() returns (uint256):返回当前交易中剩余的 gas。
- msg.data (bytes calldata):完整的 calldata(调用数据)。
- msg.sender (address):消息(当前调用)的发送者地址。
- msg.sig (bytes4):calldata 的前 4 个字节(即函数标识符)。
- msg.value (uint):随消息发送的 Wei 数量。
- tx.gasprice (uint):交易的 gas 价格。
- tx.origin (address):交易的原始发送者地址(完整调用链中的最初发起者)。
注意
1.msg 变量的动态性
msg.sender、msg.value 等 msg 成员的值会在每次外部函数调用时发生变化,包括调用库函数时。
2.区块和交易属性的限制
当合约在链下执行(如本地测试或模拟环境)时,不要假设 block. 和 tx. 具有特定的值,这些值取