Solidity - 特殊变量

特殊变量是全局可用的变量,提供有关区块链的信息。 以下是特殊变量列表 −

序号 特殊变量和描述
1

blockhash(uint blockNumber) returns (bytes32)

给定区块的哈希值 - 仅适用于 256 个最新区块(不包括当前区块)。

2

block.coinbase (address payable)

当前区块矿工地址。

3

block.difficulty (uint)

当前区块难度。

4

block.gaslimit (uint)

当前区块的 GasLimit。

5

block.number (uint)

当前区块号。

6

block.timestamp

当前区块时间戳,以 UNIX 纪元以来的秒数表示。

7

gasleft() returns (uint256)

Remaining gas.

8

msg.data (bytes calldata)

完整的呼叫数据。

9

msg.sender (address payable)

消息的发送者(当前通话)。

10

msg.sig (bytes4)

调用数据的前四个字节(即函数标识符)

11

msg.value (uint)

与消息一起发送的 wei 数量。

12

now (uint)

当前区块时间戳(block.timestamp 的别名)。

13

tx.gasprice (uint)

交易的 Gas 价格。

14

tx.origin (address payable)

交易的发送者(完整调用链)。

示例

尝试以下代码来查看 msg 的使用,msg 是 Solidity 中用于获取发件人地址的特殊变量。

pragma solidity ^0.5.0;

contract LedgerBalance {
   mapping(address => uint) public balances;

   function updateBalance(uint newBalance) public {
      balances[msg.sender] = newBalance;
   }
}
contract Updater {
   function updateBalance() public returns (uint) {
      LedgerBalance ledgerBalance = new LedgerBalance();
      ledgerBalance.updateBalance(10);
      return ledgerBalance.balances(address(this));
   }
}

使用 Solidity First 应用 章节中提供的步骤运行上述程序。

首先单击updateBalance按钮将值设置为10,然后查看日志,其中将显示解码输出为 −

输出

{
   "0": "uint256: 10"
}