安全销毁用户拥有的对象

AIP-45 提议了一种机制,允许 Aptos 用户将拥有的任何对象单方面转移到一个全局销毁地址,从而解决用户账户上出现不希望的内容的问题。这使得用户能够通过将不需要的数据的所有权转移到安全销毁地址,来管理与其账户关联的数据。此提案旨在缓解接收未经请求内容的问题,并已选择为一种安全手段,可以在不破坏其他应用程序的情况下删除与用户账户关联的内容。

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

摘要

作为对象的副产品,用户可能会获得与他们在 Aptos 上的账户地址相关联的不良且无法移动的内容。目前,Aptos 上的大多数应用程序通常会将与账户关联的所有 数字资产可替代资产 同时展示给账户持有人和那些查看账户的人。由于对象可以被渲染为不可删除的,也被称为 灵魂绑定,用户可能会成为不想要的空投的受害者。为了缓解这个问题,我们建议利用一种机制,允许用户单方面将任何拥有的对象转移到一个全局销毁地址。

目标

作为这个 AIP 的结果,用户将能够通过将不想要的数据的所有权转移到一个安全的销毁地址,从而管理与他们在 Aptos 上的账户相关联的数据,以此来移除不想要的数据与他们账户之间的直接链接。为了做到这一点,所有的对象都将能够被转移到销毁地址。

如果我们延迟实施这个,用户将需要等到他们的应用程序采用允许列表框架来渲染内容。

范围外

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

影响

这将影响以下各方:

  • 用户将被授权从他们的帐户中 销毁 基于对象的资产。
  • 智能合约开发者需要意识到,即使是 灵魂绑定 的对象也可以被移动到销毁地址。
  • 账户的主要可替代资产存储可能会意外地被转移走。
  • 钱包开发者可以启用访问一个特殊的功能来 销毁 基于对象的资产。
  • 索引器可能需要知道销毁地址,以避免将其作为索引,因为那里的数据量可能会比任何其他帐户大几个数量级。

请注意,由于这使得主要可替代资产存储的所有者可以更改,因此主要可替代资产可以访问一个特殊的 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` 字段更新为销毁地址。
This will verify that the `owner` is the actual owner of the object and then update the `ObjectCore::owner` field to the burn address.
`public(friend) entry unburn<T: key>(original_owner: address, object: Object<T>)`

// 这将验证当前所有者是否是销毁地址,然后将 `ObjectCore::owner` 字段更新为 `original_owner`。
This will verify that the current owner is the burn address and then update the `ObjectCore::owner` field to the `original_owner`.

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

参考实现

测试

彻底的 Move 单元测试,包括:

  • 销毁对象、可替代资产和数字资产。
  • 回收主要可替代资产存储。
  • TransferRef 的所有者回收资产。
  • 使用 DeleteRef 删除已销毁资产的能力。

风险和缺点

已经对接收不需要的资产的现状分享了很多看法。坦率地说,除了 movekevin,没有人想要一个 noob noob。

这允许 灵魂绑定 的资产有效地解耦。因此,用户可能会声明多个 灵魂绑定 的资产。当然,灵魂绑定 的资产可能需要由一个索引器来监控,该索引器会识别出用户可能已经收到了一件物品,即使它不再附加到他们的帐户上。

未来潜力

未来是一个完全在链上管理的去中心化允许列表。

时间线

建议的实施时间表

这将在 1.7 分支剪切之前可用,如果需要该功能,则可以包含在更早的升级中。

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

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

建议的部署时间表

最低限度的期望是,这应该作为 1.7 框架更新的一部分发布。

安全考虑

这引入了对系统的最小更改,并且不暗示任何已知的安全风险。

  • 原文链接: github.com/aptos-foundat...
  • 登链社区 AI 助手,为大家转译优秀英文文章,如有翻译不通的地方,还请包涵~
点赞 0
收藏 0
分享
本文参与登链社区写作激励计划 ,好文好收益,欢迎正在阅读的你也加入。

0 条评论

请先 登录 后评论
aptos-foundation
aptos-foundation
江湖只有他的大名,没有他的介绍。