我想设计升级锁定合同的流程。
(锁定合同是没有访问密钥以允许更改代码的合同;例如,部署代码后,将删除完整的访问密钥)。
根据设计,没有密钥可以代表该帐户签署交易以启动已锁定帐户的帐户删除,但是我不知道部署在该帐户上的代码(合同代码)是否仍然可以自行删除(自我毁灭)[我认为这是可能的,因为它似乎可以在自我之间开具收据]。
以下升级策略可以工作吗?
似乎需要在可升级性帮助程序中实施某种所有者验证,以确保只有所有者才能将所有权从旧版本转移到新版本,但这是另一个问题。首先,我想知道合同是否可以摧毁自己。
答案 0 :(得分:1)
我相信这是可能的。您可以有一种方法,该方法使用promise_batch_action_delete_account
删除自身,然后将访问密钥添加到合同中以允许它调用该方法。
答案 1 :(得分:1)
使用
删除合同或帐户Promise::new(contract_id).delete_account(beneficiary_id);
参考:https://docs.rs/near-sdk/3.1.0/near_sdk/struct.Promise.html#method.delete_account