区块交易的属性

本文介绍了Solidity中可用的各种全局变量及其用途,如block、msg和tx等,并强调了这些变量在智能合约开发中的重要性和潜在风险。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

参考:https://solidity.readthedocs.io/en/develop/units-and-global-variables.html#units-and-globally-available-variables

  • block.blockhash(uint blockNumber) returns (bytes32): 返回给定区块号的哈希值——仅适用于256个最新的块(不包括当前的块)——在版本0.4.22中被弃用,并被blockhash(uint blockNumber)取代。
  • block.coinbase (address):当前区块矿工的地址
  • block.difficulty (uint): 当前区块挖矿难度
  • block.gaslimit (uint): 当前区块的 gaslimit
  • block.number (uint): 当前区块的区块号。
  • block.timestamp (uint): 当前区块时间戳(自1970/1/1 00:00:00以来的秒数。)
  • gasleft() returns (uint256): 剩余的 gas
  • msg.data (bytes): 完整的调用数据(calldata)
  • msg.gas (uint):当前还剩的gas。在0.4.21版本后被gasleft()替代
  • msg.sender (address): 当前消息发起人的地址。
  • msg.sig (bytes4): 调用数据(calldata)的前四个字节(例如为:函数标识符)。
  • msg.value (uint): 消息所附带的以太币,单位为wei。
  • now (uint): 当前块的时间戳(block.timestamp的别名)
  • tx.gasprice (uint): 交易的gas的价格
  • tx.origin (address): sender of the transaction (full call chain)

注意:

(1) msg的所有成员的值,包括msg.sendermsg.value。值可以随着每次外部函数调用而改变。这包括对库函数的调用。

(2) 不要依赖block.timestamp, nowblockhash,将他们作为随机性的来源。
时间戳和区块哈希在某种程度上都可以受到挖掘程序的影响。挖矿社区中的不良行为者可以用一个选定的哈希运行赌场支付函数,如果他们没有收到任何钱,就重新尝试不同的哈希。

当前块的时间戳必须严格大于最后一个块的时间戳,但唯一的保证是它将位于规范链中两个连续块的时间戳之间的某个位置。

(3) 由于拓展性的原因,区块哈希不能用于所有块。您只能访问最近的256块的区块,所有其他值都为0。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值