AIP-99提案旨在禁用Aptos区块链上用户拥有的对象的安全销毁功能,以降低复杂性并避免意外后果。虽然新对象将无法被销毁,但先前已销毁的对象仍然可以被恢复。此举旨在简化与Soulbound对象相关的逻辑,并为开发者提供更清晰的开发环境,例如更容易实现资产的白名单功能。
安全销毁最初在 AIP-45 中描述,它允许用户 tombstone 他们的对象并移除 不可删除对象的直接链接,也称为 灵魂绑定 对象到账户。此 AIP 旨在禁用安全 对象销毁,因为它导致了额外的复杂性,有时还导致了意想不到的后果。尤其是,当销毁地址管理对象,而所有者是原始所有者时,这种行为变得 不太清晰。被销毁对象的所有者仍然可以取消销毁并恢复他们的tombstoned对象。
作为此 AIP 的结果,用户仍然可以取消销毁他们已销毁的对象,但将无法销毁任何新的 对象。这将减少复杂性和一些相关的有趣的极端情况。
如果我们延迟实施,可能会有更多已销毁的对象,由于围绕已销毁对象的细微行为,这会增加新协议的风险。
由于用户无法选择不接收未经请求的内容,因此这将删除之前的缓解措施。钱包或其他 平台将需要提出一种标准化的方式来隐藏不需要的项目。
此外,我们目前不会阻止取消销毁现有的已销毁对象。
这里的目的是移除销毁以防止混淆,以及围绕 灵魂绑定 对象更改所有者的复杂性。 围绕已销毁对象存在一些细微的行为,移除此功能可以防止这些行为。 最初,这主要是为了能够隐藏不需要的 灵魂绑定 NFT。但是,灵魂绑定 对象有更多的用例 (例如,主要的可替代资产存储),这会使围绕它们的功能复杂化。移除此 功能简化了构建者的情况,并且可以更容易地完成诸如可替代资产上的允许列表之类的事情。
如果我们不接受此提案,围绕 灵魂绑定 对象的一些功能将需要额外的复杂性,甚至可能无法绕过销毁。
这会影响以下各方:
burn
或 unburn
功能的智能合约开发者这不会影响以下各方:
没有其他替代解决方案。
所有对 aptos_framework::object::burn
的调用现在都将中止,错误代码为 EBURN_NOT_ALLOWED = 10
。此外,该
函数将被标记为 #[deprecated]
,并且所有输入都将以 _
为前缀,以标记为未使用。
module aptos_framework::object {
#[deprecated]
public entry fun burn<T: key>(_owner: &signer, _object: Object<T>) {
abort EBURN_NOT_ALLOWED
}
}
取消销毁将仍然保持不变,并允许用户在已销毁对象上调用。
以下新函数将添加到 aptos_framework::object
:
module aptos_framework::object {
#[test_only]
public fun burn_object<T: key>(owner: &signer, object: Object<T>) {}
}
这将包含 aptos_framework::object::burn
的先前实现,用于测试已销毁
对象。
完整的实现已在此处完成,带有 Move Prover 规范 https://github.com/aptos-labs/aptos-core/pull/14443
所有现有的 Move 单元测试,都带有新的 #[test_only]
函数,以确保 unburn
仍然正常工作,以及
之前的 AIP-45 捕获了拥有此 AIP 的主要风险,包括拥有不需要的 灵魂绑定
NFT。此外,如果任何智能合约围绕 burn
函数构建,它们可能会停止工作。
但是,考虑到 burn
本质上只是将对象移动到带有 Tombstone 的不同地址,因此应该
几乎没有与删除此功能相关的风险。
这仍然允许用户 unburn
已经销毁的对象,这意味着用户仍然可以访问他们之前
销毁的项目。
此 AIP 的结果应该比允许 burn
更安全。销毁将对象移动到由销毁
地址拥有的状态,这可能会导致一些围绕按所有者列入允许列表的不良副作用。通过确保对象始终
由原始所有者拥有,它应该可以缓解那里的任何问题。
未来是钱包应该提供自己的允许列入显示的资产,或者提供一个去中心化的 允许列入钱包中显示的资产的列表。
预计这应作为批准后的下一个版本的一部分发布。
burn
。
- 原文链接: github.com/aptos-foundat...
- 登链社区 AI 助手,为大家转译优秀英文文章,如有翻译不通的地方,还请包涵~
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!