智能合约所有权

Smart contract ownership

我放弃了智能合约的所有权,现在它是一个空地址 (0x00..)。我有办法收回所有权吗?目前,如果我调用 transferOwnership - 它会返回调用者不是所有者的错误。

提前致谢。

Is there a way for me to reclaim ownership?

简单回答:否


除非...有一个函数专门从零地址收回所有权。实施起来意义不大。

// holds the previous owner before renouncing their ownership.
address previousOwner;

function reclaimOwnership() external {
    require(msg.sender == previousOwner);
    owner = msg.sender;
}

假设没有这样的函数:

  • 理论上,您可以通过从零地址调用 transferOwnership() 函数来收回所有权,为此您需要它的私钥。但要猜出它的私钥几乎是不可能的,而且从来没有任何人成功猜出零地址私钥的记录。
  • 或者,如果您的合约是使用 CREATE2 操作码部署的并且具有 selfdestroy 机制,您可以销毁它并将其重新部署到同一地址,这将有效地设置 owner对部署者的价值(取决于你的实现,但大多数合同在构造函数中设置 owner)。但是,如果您事先没有特别指望此选项,则在合同中包含此组合并不常见。