Solidity

當 msg.sender 是所有者?

  • January 11, 2021

我如何知道 msg.sender 是合約的所有者(部署的人)還是與合約互動的隨機地址?在這種情況下,例如:

   address payable owner  =  msg.sender;   

   modifier onlyOwner(){
       require(msg.sender == owner);
       _;
   }
   function close() public onlyOwner { 
   selfdestruct(owner);  
}
   

為什麼 msg.sender 不會在每次互動時重置?

Solidity 支持在合約創建時執行程式碼的建構子。所以你需要owner在建構子中實例化來擷取合約部署地址:

address payable owner;
constructor() public {
owner = msg.sender;
}

還有標準化的契約來管理所有權。可以在這裡找到實現範例:https ://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/access/Ownable.sol 。

引用自:https://ethereum.stackexchange.com/questions/92073