智能合约所有权
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
)。但是,如果您事先没有特别指望此选项,则在合同中包含此组合并不常见。
我放弃了智能合约的所有权,现在它是一个空地址 (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
)。但是,如果您事先没有特别指望此选项,则在合同中包含此组合并不常见。