Solidity - 特殊变量



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

序号 特殊变量及描述
1

blockhash(uint blockNumber) returns (bytes32)

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

2

block.coinbase (address payable)

当前区块矿工的地址。

3

block.difficulty (uint)

当前区块难度。

4

block.gaslimit (uint)

当前区块 gas 限制。

5

block.number (uint)

当前区块编号。

6

block.timestamp

自 Unix 元年以来的当前区块时间戳(秒)。

7

gasleft() returns (uint256)

剩余 gas。

8

msg.data (bytes calldata)

完整的 calldata。

9

msg.sender (address payable)

消息发送者(当前调用)。

10

msg.sig (bytes4)

calldata 的前四个字节(即函数标识符)。

11

msg.value (uint)

随消息发送的 wei 数量。

12

now (uint)

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

13

tx.gasprice (uint)

交易的 gas 价格。

14

tx.origin (address payable)

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

示例

尝试以下代码,查看如何使用 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 第一个应用程序章节中提供的步骤运行上述程序。

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

输出

{
   "0": "uint256: 10"
}
广告