Solidity
當 msg.sender 是所有者?
我如何知道 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 。