3

我想设计升级锁定合约的流程。

(锁定的合约是没有允许更改代码的访问密钥的合约;例如,一旦部署代码,完整的访问密钥就会被删除)。

按照设计,没有可以代表账户签署交易的密钥来为被锁定的账户发起账户删除,但是我想知道部署在账户上的代码(合约代码)是否仍然可以删除自己(self-destroy) ) [我认为这是可能的,因为它似乎可以从自己到自己开具收据]。

以下升级策略会起作用吗?

  1. 初始阶段:
    • 创建一个帐户
    • 使用一些可升级帮助程序部署代码
    • 锁定帐户(删除完整的访问密钥)
  2. 升级:
    • 创建一个新账户
    • 将新代码部署到新帐户
    • 锁定新帐户
    • 调用迁移方法,该方法到达旧版本(通过跨合约调用)并请求转移所有权(提供所有数据并删除自身)

似乎需要在可升级性助手中实施某种所有者验证,以确保只有所有者才能将所有权从旧版本转移到新版本,但这是另一个问题;首先,我想知道合约是否可以自我毁灭。

4

2 回答 2

2

I believe it is possible. You can have a method that uses promise_batch_action_delete_account to delete self and then add an access key to the contract that allows it to call that method.

于 2020-04-06T22:47:57.377 回答
2

使用删除合约或账户

Promise::new(contract_id).delete_account(beneficiary_id);

参考:https ://docs.rs/near-sdk/3.1.0/near_sdk/struct.Promise.html#method.delete_account

源代码:https ://github.com/near/near-sdk-rs/blob/9d99077c6acfde68c06845f2a1eb2b5ed7983401/near-sdk/src/promise.rs#L309

于 2021-05-01T07:17:59.157 回答