block.blockhash(uint blockNumber) returns (bytes32): 返回给定区块号的哈希值——仅适用于256个最新的块(不包括当前的块)——在版本0.4.22中被弃用,并被blockhash(uint blockNumber)取代。block.coinbase(address):当前区块矿工的地址block.difficulty(uint): 当前区块挖矿难度block.gaslimit(uint): 当前区块的 gaslimitblock.number(uint): 当前区块的区块号。block.timestamp(uint): 当前区块时间戳(自1970/1/1 00:00:00以来的秒数。)gasleft() returns (uint256): 剩余的 gasmsg.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.sender和msg.value。值可以随着每次外部函数调用而改变。这包括对库函数的调用。
(2) 不要依赖block.timestamp, now 和 blockhash,将他们作为随机性的来源。
时间戳和区块哈希在某种程度上都可以受到挖掘程序的影响。挖矿社区中的不良行为者可以用一个选定的哈希运行赌场支付函数,如果他们没有收到任何钱,就重新尝试不同的哈希。
当前块的时间戳必须严格大于最后一个块的时间戳,但唯一的保证是它将位于规范链中两个连续块的时间戳之间的某个位置。
(3) 由于拓展性的原因,区块哈希不能用于所有块。您只能访问最近的256块的区块,所有其他值都为0。
本文介绍了Solidity中可用的各种全局变量及其用途,如block、msg和tx等,并强调了这些变量在智能合约开发中的重要性和潜在风险。

404

被折叠的 条评论
为什么被折叠?



