比较常用的全局变量是msg变量,表示调用上下文,常见的全局变量有以下几种:
-
msg.sender:合约的直接调用者。
由于是直接调用者,所以当处于 用户A->合约1->合约2 调用链下,若在合约2内使用msg.sender,得到的会是合约1的地址。如果想获取用户A,可以用tx.origin.
-
msg.calldata:包含完整的调用信息,包括函数标识、参数等。calldata的前4字节就是函数标识,与msg.sig相同。
-
msg.sig:msg.calldata的前4字节,用于标识函数。
pragma solidity ^0.4.25;
contract Sample{
//State variables
address private _admin;
uint private _state;
//Modifier
modifier onlyAdmin(){
require(msg.sender == _admin, "You are not admin");
_;
}
//Events
event SetState(uint value);
//Constructor
constructor() public{
_admin = msg.sender;
}
//Functions
function setState(uint value) public onlyAdmin{
_state = value;
emit SetState(value);
}
function getValue() public view returns (uint){
return _state;
}
}