阅读(3492)
赞(13)
块和事务属性
2022-05-12 10:43:04 更新
- blockhash(uint blockNumber) returns (bytes32): 给定块的哈希值,当blocknumber它是 256 个最近的块之一时;否则返回零
- block.basefee( uint):当前区块的基本费用(EIP-3198和EIP-1559)
- block.chainid( uint): 当前链 id
- block.coinbase( ): 当前区块矿工地址address payable
- block.difficulty( uint): 当前区块难度
- block.gaslimit( uint): 当前区块gaslimit
- block.number( uint): 当前区块号
- block.timestamp( uint): 当前区块时间戳,自 unix 纪元以来的秒数
- gasleft() returns (uint256): 剩余气体
- msg.data( ): 完整的通话数据bytes calldata
- msg.sender( address): 消息的发送者(当前通话)
- msg.sig( bytes4):calldata 的前四个字节(即函数标识符)
- msg.value( uint): 随消息发送的 wei 数量
- tx.gasprice( uint): 交易的gas价格
- tx.origin( address): 交易的发送者(完整的调用链)
笔记
的所有成员的值msg,包括msg.sender和 msg.value可以为每个外部函数调用而改变。这包括对库函数的调用。
笔记
当合同在链外而不是在包含在块中的交易的上下文中进行评估时,您不应假设block.*并tx.*引用来自任何特定块或交易的值。这些值由执行合约的 EVM 实现提供,并且可以是任意的。
笔记
不要依赖block.timestamp或blockhash作为随机性的来源,除非你知道自己在做什么。
时间戳和区块哈希都会在一定程度上受到矿工的影响。例如,采矿社区中的不良行为者可以在选定的哈希上运行赌场支付功能,如果他们没有收到任何钱,只需重试不同的哈希。
当前区块的时间戳必须严格大于上一个区块的时间戳,但唯一的保证是它将位于规范链中两个连续区块的时间戳之间。
笔记
出于可扩展性的原因,区块哈希并非对所有区块都可用。您只能访问最近 256 个区块的哈希值,所有其他值将为零。
笔记
该函数blockhash以前称为block.blockhash,在 0.4.22 版本中已弃用,并在 0.5.0 版本中删除。
笔记
该函数gasleft以前称为msg.gas,在版本 0.4.21 中已弃用,并在版本 0.5.0 中删除。
笔记
在 0.7.0 版中,别名now(for block.timestamp) 被删除。
← 单位