块和事务属性

2022-05-12 17:02 更新
  • blockhash(uint blockNumber) returns (bytes32): 给定块的哈希值,当blocknumber它是 256 个最近的块之一时;否则返回零
  • block.basefee( uint):当前区块的基本费用(EIP-3198EIP-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) 被删除。


以上内容是否对您有帮助:
在线笔记
App下载
App下载

扫描二维码

下载编程狮App

公众号
微信公众号

编程狮公众号