[TOC]

AIP-45 - 用户拥有对象的安全销毁

一、概述

作为对象的副产品,用户在 Aptos 上的账户地址可能会不小心关联到一些他们不想要的、“粘附”于账户的不可转移内容。目前,Aptos 的大多数应用都会把与某个账户相关联的所有数字资产可替代资产(Fungible Assets)展示给账户持有人及其他浏览该账户的人。由于有些对象被设定为不可删除的,也称为“灵魂绑定(soul bound)”,使得用户可能会接收到他们不想要的空投。为了解决这个问题,我们建议采用一种机制,允许用户自行将任何他们拥有的对象发送到一个公用的销毁地址。

1. 目标

通过这个 AIP,用户将有权管理与他们在 Aptos 上的账户关联的数据,通过将其所有权转移到安全销毁地址,将不需要的数据与他们的账户之间的直接关联解除。为了实现这一目标,所有对象都将具有转移到销毁地址的能力。

如果我们延迟执行此操作,用户将需要等到他们的应用程序采用白名单框架以渲染内容。

2. 不在范围内

这只是一种缓解措施,受害者无法选择不接收未经请求的内容,也无法自动删除此内容。销毁也不会导致销毁者收到退款,但这样做的成本预计将是可以忽略不计的,即转移数字资产的成本。

二、影响

这将影响以下各方:

  • 用户将有权从其账户中销毁基于对象的资产。
  • 智能合约开发人员需要注意,即使是“灵魂绑定”对象也可以移动到销毁地址。
  • 一个账户的主要可互换资产存储可能会被意外转移。
  • 钱包开发人员可以启用访问特殊功能以销毁基于对象的资产。
  • 索引器需要识别出销毁地址,以防错误地对其进行索引。因为销毁地址中的数据量可能要远远比其他任何账户高出好几个数量级。

请注意,这使得主要的可替代资产(fungible asset)的持有者有可能变更,因此主要可替代资产会有一个特殊的 unburn 功能。该功能使得资产在原始持有者执行 primary_fungible_store::transferprimary_fungible_store::withdraw 操作时,能够重新获得所有权。

三、替代方案

  1. 白名单
    • (+)白名单是长期解决方案,随着区块链的普及,欺诈和其他未经请求的内容的数量可能会增长,远远超过用户管理其账户的能力。此外,清理账户可能变得成本高昂。
    • (-)白名单需要大量的协调和管理,因此这是一个长期解决方案,可能需要大型生态系统的支持来建立。
  2. 删除用户拥有的对象
    • (+)这允许用户收回垃圾数据的退款,这可能超过执行删除操作的成本,从而减少区块链上不必要的存储负载。
    • (-) 一些数据结构可能无法删除,否则可能会破坏区块链上的应用程序,例如,如果删除了可互换资产元数据,则流动性池可能会完全崩溃。这可能导致有价值的资产在链上被永久锁定,而不利用治理提案。

之所以选择销毁地址的解决方案,是因为它提供了一种安全的方式来删除与用户账户关联的内容,而不会潜在地破坏其他应用程序。

请注意,现有的提案支持 unburn 功能,这允许 primary_fungible_store 找回被误转移的对象。或者,我们也可以在 primary_fungible_store 中实现一个专门的 unburn 调用,但这就意味着钱包或其他应用需要支持 unburn 功能。检查所有权的成本非常小,因为在资产被取出之前,所有权的验证总是必须的。

四、规范

销毁地址被定义为 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 或最大的有效的无符号 256 位数。一旦接受了这个 AIP,将为销毁地址预留一个特殊的 Aptos 名称。

以下新函数将添加到 aptos_framework::object

public entry fun burn<T: key>(owner: &signer, object: Object<T>)

这将验证 owner 是否是对象的实际所有者,然后将 ObjectCore::owner 字段更新为销毁地址。

public(friend) entry unburn<T: key>(original_owner: address, object: Object<T>)

这将验证当前所有者是否为销毁地址,然后将 ObjectCore::owner 字段更新为 original_owner

aptos_framework::primary_fungible_store 中,transferswithdraw 函数将在转移之前检查存储所有权,并在所有者为销毁地址时调用 object::unburn

五、参考实现

没有,不清楚是不是官方遗漏了

六、测试

包括全面的 Move 单元测试:

  • 对象、可互换资产和数字资产的销毁。
  • 主要可互换资产存储的回收。
  • 拥有 TransferRef 的所有者可以通过回收资产来回收资产。
  • 使用 DeleteRef 删除已销毁资产的能力。

七、风险和缺陷

对于当前收到不想要的资产的情况,已经表达了许多情绪。坦率地说,除了 movekevin,没有人想要 noob noob。

这样一来,灵魂绑定soul bound)资产就可以有效地进行解耦了。这意味着用户可以认领多个灵魂绑定资产。当然,灵魂绑定资产很可能需要通过一个索引器来监控,该索引器能够识别用户是否已经获得了该资产,即便资产不再和用户的账户绑定。

八、未来潜力

未来是完全在链上管理的去中心化允许名单。

九、时间表

1. 建议的实施时间表

在 1.7 版本分支创建之前,这项功能就已经可用,如果有此需求,也可以将其应用到早期版本的升级中。

2. 建议的开发者平台支持时间表

  • SDK 和 CLI 可能会更新以支持对象的销毁。
  • 索引器应确定是否监视涉及销毁地址的活动。

3. 建议的部署时间表

最起码的期待是,这应当作为 1.7 框架更新的一部分被发布。

十、安全考虑

这只引入了极小的系统变更,并且没有带来任何已知的安全风险。