Solidity 特殊变量/全局变量

特殊变量/全局变量,是全局可用的变量,提供关于区块链的信息。下面列出了常用的特殊变量:

名称 返回
blockhash(uint blockNumber) returns (bytes32) 给定区块的哈希值 – 只适用于256最近区块, 不包含当前区块。
block.coinbase (address payable) 当前区块矿工的地址
block.difficulty (uint) 当前区块的难度
block.gaslimit (uint) 当前区块的gaslimit
block.number (uint) 当前区块的number
block.timestamp (uint) 当前区块的时间戳,为unix纪元以来的秒
gasleft() returns (uint256) 剩余 gas
msg.data (bytes calldata) 完成 calldata
msg.sender (address payable) 消息发送者 (当前 caller)
msg.sig (bytes4) calldata的前四个字节 (function identifier)
msg.value (uint) 当前消息的wei值
now (uint) 当前块的时间戳
tx.gasprice (uint) 交易的gas价格
tx.origin (address payable) 交易的发送方

 

1. 示例

示例展示如何使用特殊变量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"
}

Solidity 智能合约中所有的状态变量和局部变量,都有默认值。这些变量在没有被赋值之前,它的值已默认值的形式存在。其中:bool 类型变量默认值为 false;int 类型变量默认值为 0;uint 类型变 ...