昨天被问了好几次 ERC-6551 跟 AA 的关系,聊起来才发现大家对它的理解有各种各样的偏差。我把今天讨论里用到的一些类比记录下来,希望能对大家的理解有点帮助。老规矩,这篇小作文不是严肃的技术文章,为了便于理解会使用并不精确的类比。
首先,ERC-6551 不是 Token 标准,它跟 ERC-721 等不是一个范畴的概念,而是更像 ERC-4337 —— 是的你没听错,它更像一个 AA 标准,只不过是应用层的标准。如果说最像的,应该是(私货预警 😛)ERC-7093 的社交恢复标准,都是在考虑 AA 应该怎么用。所以你可以说「UniPass v2 是 4337 / 6551 / 7093 兼容的 AA 账户」,但是并不存在「ERC-6551 兼容的 NFT」这种说法。
看到这里你可能一脸问号❓:不是说给每个 NFT 绑定一个账户吗,怎么就变成 AA 标准了?这就是叙事的力量了 —— 同样一件事情,描述的角度不同,受众的认知就会天差地别。
站在 NFT Holder 的角度:
我的地址 A 里有一个 NFT,它有个关联的地址 X,我可以用 A 控制 X 转账;当我把 NFT 转到地址 B 之后,A 失去了控制 X 的能力,同时 B 获得了这个能力,所以 账户 X 是跟这个 NFT 绑定的。
站在 AA 账户开发者的角度:
在 AA 账户里实现一种 NFT 关联的鉴权方式,如果发起转账请求的 Key 是一个以太坊地址,并且该地址拥有某个预先登记的 NFT,那么鉴权通过,可以解锁账户。
当然,也可以通过在生成地址时把 NFT 的唯一 ID 编码进去的方式来达成「先天绑定」的效果。如果你恰好是一个会写合约的小伙伴,其实可以很快地通过 Safe Module 来实现一个类似功能的 AA 账户。
实际上,如果你阅读过它的 Abstract,应该可以很轻松地发现这个结论:
This proposal defines a system which gives every ERC-721 token a smart contract account. These token bound accounts allow ERC-721 tokens to own assets and interact with applications, without requiring changes to existing ERC-721 smart contracts or infrastructure.
相信大家已经理解了 ERC-6551 描述的是一种 AA 账户而非 NFT,那么接下来我们就用 AA 科普的最佳道具 —— 智能门锁 来进行类比解释。
首先我们把私钥类比为指纹。它们分别对应 Crypto 世界和物理世界的「身份」概念,如果被第三方获得,其他人无法分辨是「自己」还是「别人」在做操作,所以一般我们不会共享私钥和指纹给第三方。
然后咱们拿最简单的 AA 账户举例:由单个密钥(EOA)控制的 AA 账户,比如一个单签的 Safe 账户。它的解锁逻辑就是验证密钥的签名,如果匹配就可以解锁账户;类比到智能门锁的话,就是用指纹开锁的逻辑。这种跟身份强绑定的逻辑在一些场景下其实是不合适的,比如澡堂储物柜,这时候就需要「钥匙卡」这种跟人无关的解锁凭证了,也就是「认卡不认人」。
最后,我们把「人
拿着钥匙卡
开储物柜
拿了 100 美金
」映射到「地址
拿着 NFT
解锁绑定地址
转了 100 USDT
」—— 恭喜你,ERC-6551 的基本原理你已经懂了!🎉
ERC-6551 就是把每个 ERC-721 的 NFT 当作钥匙卡,然后给它配了一个储物柜。
是不是有种「戛然而止」的感觉?因为用类比来讲的话确实不复杂。实际的 Spec 里还有一些类似 ERC-4337 里 Entry Point 的设定,以及关于「循环引用」(就是把钥匙卡锁柜里了)的处理方法,这些对大家理解基本原理帮助不大,所以就没有涉及了。
这个标准虽然思路比较简单,基本上就是换了个视角叙事,但换种角度也会让一些场景的设计更加自然,比如 NFT 游戏装备穿戴的逻辑可以变成「把装备 NFT 打给人物 NFT 的绑定地址」(感谢史迪仔提供的案例)。因此 ERC-6551 可以说是一种对 AA 的普及有很大助力的协议,希望类似的协议或者用例能够越来越多,让大家都感受到 AA 的魅力。
最后,如果你对 AA / EOA 这些概念还有些陌生,这里有一篇我之前写的名词解释可以参考。