合约可以在 NEAR 协议中删除自己吗?
Can a contract remove itself in NEAR Protocol?
我想设计升级锁仓合约的流程
(锁定合约是指没有允许更改代码的访问密钥的合约;例如,一旦部署代码,将删除完整访问密钥)。
根据设计,没有密钥可以代表账户签署交易以启动对锁定账户的账户删除,但我想知道部署在账户上的代码(合约代码)是否仍然可以删除本身(自我毁灭)[我认为这是可能的,因为它似乎可以从自己到自己发出收据]。
下面的升级策略行得通吗?
- 初始阶段:
- 创建帐户
- 使用一些可升级性助手部署代码
- 锁定帐户(删除完全访问密钥)
- 升级:
- 创建一个新帐户
- 将新代码部署到新帐户
- 锁定新帐户
- 调用迁移方法,到达旧版本(通过跨合约调用)并请求转移所有权(提供所有数据并删除自身)
似乎需要在可升级性助手中实施某种所有者验证,以确保只有所有者才能将所有权从旧版本转移到新版本,但这是另一个问题;首先,我想知道一个合约是否可以自毁。
我相信这是可能的。您可以有一个使用 promise_batch_action_delete_account
删除自身的方法,然后将访问密钥添加到允许它调用该方法的合约。
使用
删除合同或账户
Promise::new(contract_id).delete_account(beneficiary_id);
参考:https://docs.rs/near-sdk/3.1.0/near_sdk/struct.Promise.html#method.delete_account
我想设计升级锁仓合约的流程
(锁定合约是指没有允许更改代码的访问密钥的合约;例如,一旦部署代码,将删除完整访问密钥)。
根据设计,没有密钥可以代表账户签署交易以启动对锁定账户的账户删除,但我想知道部署在账户上的代码(合约代码)是否仍然可以删除本身(自我毁灭)[我认为这是可能的,因为它似乎可以从自己到自己发出收据]。
下面的升级策略行得通吗?
- 初始阶段:
- 创建帐户
- 使用一些可升级性助手部署代码
- 锁定帐户(删除完全访问密钥)
- 升级:
- 创建一个新帐户
- 将新代码部署到新帐户
- 锁定新帐户
- 调用迁移方法,到达旧版本(通过跨合约调用)并请求转移所有权(提供所有数据并删除自身)
似乎需要在可升级性助手中实施某种所有者验证,以确保只有所有者才能将所有权从旧版本转移到新版本,但这是另一个问题;首先,我想知道一个合约是否可以自毁。
我相信这是可能的。您可以有一个使用 promise_batch_action_delete_account
删除自身的方法,然后将访问密钥添加到允许它调用该方法的合约。
使用
删除合同或账户Promise::new(contract_id).delete_account(beneficiary_id);
参考:https://docs.rs/near-sdk/3.1.0/near_sdk/struct.Promise.html#method.delete_account