msg.sender:合约的直接调用者。
由于是直接调用者,所以当处于 用户A->合约1->合约2 调用链下,
- 若在合约2内使用msg.sender,得到的会是合约1的地址。
- 如果想获取用户A,可以用tx.origin, tx.origin:交易的"始作俑者",整个调用链的起点。
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; } }