ERC 6551 解析workshop

Hacker Dōjo Workshop:

资助金额:100 USDT

Bounty链接:Hacker Dōjō|课题研究:ERC6551解析 | Bounties | DoraHacks

创作者:@whisky_eth,2022年万向黑客松冠军、独立投研开发者

本项目由Hacker Dōjo资助,文章转载请联系

WeChat: @HackerDojo0

一、ERC6551说了什么

ERC-6551: Non-fungible Token Bound Accounts(NFT绑定账户)
测试网:https://tokenbound.org/

受 Soul Bound Tokens (SBTs) 的启发,ERC-6551 的想法正好相反,我们称之为代币绑定账户 Token Bound Accounts (TBAs) 。不是绑定 NFT 到钱包,而是将账户绑定到 NFT 。还处于 Draft 阶段的 ERC6551,即使如此依然抵挡不住市场的热情。在加拿大滑铁卢刚结束的 ETHGlobal Waterloo 黑客松中,11个项目有 4 个就和 ERC6551 相关。

一番赏

存钱罐🫙项目

NFT NPC游戏

ERC-6551 定义了一个为每个 ERC-721 代币创建智能合约帐户的系统。这些代币绑定账户允许 ERC-721 代币拥有资产并与应用程序交互,而无需更改现有的 ERC-721 智能合约或基础设施。该提案赋予每个 ERC-721 代币以太坊账户的全部功能,同时保持与之前部署的 ERC-721 代币合约的向后兼容性。它通过无需许可的注册表为每个 ERC-721 代币部署唯一的、确定性寻址的智能合约帐户来实现这一点。

ERC-6551 显着增强了 ERC-721 NFT 的功能,它的优点如下:

  • 每个代币绑定账户都由一个 ERC-721 代币拥有,允许代币与区块链交互、记录交易历史并拥有链上资产。每个代币绑定账户的控制权都委托给 ERC-721 代币的所有者,允许所有者代表其代币发起链上操作。
  • 代币绑定账户与几乎所有支持以太坊账户的现有基础设施兼容,从链上协议到链外索引器。代币绑定账户可以拥有任何类型的链上资产,并且可以扩展以支持未来创建的新资产类型。

其实可互操作性、可组合性NFT并不是新鲜的故事,早已出现 ERC998 与 ERC3664 可实现对 NFT 的嵌套和拆解,并且有 Flow 和 RMRK 这种专门从底层原生支持的链,但为什么 ERC6551 会掀起这么大的热度?我认为主要原因是它的无需许可向前兼容的特性。因为在此之前的协议是对 ERC721 代码进行对应的修改,意味着只有使用该协议所发行的 NFT 才具备可组合性,从而导致已经发出的存量 NFT 是用不了的,巨大的存量市场无法挖掘,还要去 BD 说服新的项目方来用,这就直接使得推广难度极其大。

二、ERC6551和账户抽象

ERC-6551 不是 Token 标准,它跟 ERC-721 等不是一个范畴的概念,而是更像 ERC-4337(AA 标准),只不过是应用层的标准,都是在考虑 AA 应该怎么用。

  • 站在 NFT Holder 的角度: 我的地址 A 里有一个 NFT,它有个关联的地址 X,我可以用 A 控制 X 转账;当我把 NFT 转到地址 B 之后,A 失去了控制 X 的能力,同时 B 获得了这个能力,所以 账户 X 是跟这个 NFT 绑定的
  • 站在 AA 账户开发者的角度: 在 AA 账户里实现一种 NFT 关联的鉴权方式,如果发起转账请求的 Key 是一个以太坊地址,并且该地址拥有某个预先登记的 NFT,那么鉴权通过,可以解锁账户。

1、从NFT视角理解

ERC6551 实现可组合性的方式并不是对 ERC721 代码直接进行修改,而是通过“外挂”的方式去为对应 NFT 挂上去一个账户,即使是已经存在的 NFT 也可以使用 ERC6551 进行改造,那它具体是怎么实现的呢?

NFT 持有人 User Account 拥有 2 个 NFT ,分别为 A 合约地址的 #123 和 B 合约地址的 #456#123 拥有 A 和 B 两个账户(ERC6551 允许一个NFT拥有多个账户),#456 则拥有C这个账户。这三个账户均由 Register 完成创建,但是如果给每个账户都创建完成全部的合约逻辑则会导致Gas费消耗巨大,并且大部分合约代码都是相同的只是处理的参数不一样而已,于是通过 ERC1167 最小代理合约,只需要创建一个用于执行逻辑的“大合约”并代理指向其传入对应的参数执行即可。

2、从 AA 视角理解

如果我们把 ERC-6551 描述的是一种 AA 账户而非 NFT,那么接下来我们就用 AA 科普的最佳道具 —— 智能门锁 来进行类比解释。

首先我们把**「私钥」类比为指纹**。它们分别对应 Crypto 世界和物理世界的「身份」概念,如果被第三方获得,其他人无法分辨是「自己」还是「别人」在做操作,所以一般我们不会共享私钥和指纹给第三方。由单个密钥(EOA)控制的 AA 账户,比如一个单签的 Safe 账户。它的解锁逻辑就是验证密钥的签名,如果匹配就可以解锁账户;类比到智能门锁的话,就是用指纹开锁的逻辑。

这种跟身份强绑定的逻辑在一些场景下其实是不合适的,比如澡堂储物柜,这时候就需要「钥匙卡」这种跟人无关的解锁凭证了,也就是「认卡不认人」。

最后,我们把「拿着钥匙卡储物柜拿了 100 美金」映射到「地址拿着 NFT 解锁绑定地址转了 100 USDT」—— 恭喜你,ERC-6551 的基本原理你已经懂了!:tada:

ERC-6551 就是把每个 ERC-721 的 NFT 当作钥匙卡,然后给它配了一个储物柜。

ERC6551 标准虽然思路比较简单,基本上就是换了个视角叙事,但换种角度也会让一些场景的设计更加自然,比如 NFT 游戏装备穿戴的逻辑可以变成「把装备 NFT 打给人物 NFT 的绑定地址」。因此 ERC-6551 可以说是一种对 AA 的普及有很大助力的协议,希望类似的协议或者用例能够越来越多,让大家都感受到 AA 的魅力。

3、协议是如何运作的

核心是注册(Registry)与调用流程。

The system outlined in this proposal has two main components:
1、A permissionless registry for deploying token bound accounts(TBA)

2、A standard interface for token bound account implementations

3.1 注册和调用

  • createAccount - 借助 implementation 地址为 ERC-721 token 部署一个 TBA 地址(合约地址)
  • account - 一个只读函数,给定 ERC-721 代币的 implementation 地址用于计算 TBA 地址。

注册中心应将每个令牌绑定帐户部署为 ERC-1167 最小代理,并将不可变的常量数据附加到字节码。

每个令牌绑定帐户的部署字节码应具有以下结构:

ERC-1167 Header               (10 bytes)
<implementation (address)>    (20 bytes)
ERC-1167 Footer               (15 bytes)
<salt (uint256)>              (32 bytes)
<chainId (uint256)>           (32 bytes)
<tokenContract (address)>     (32 bytes)
<tokenId (uint256)>           (32 bytes)

3.2 Proxy 部署

ERC-1167 最小代理得到现有基础设施的良好支持,并且是一种常见的智能合约模式。 该提案使用自定义 ERC-1167 代理实现来部署每个代币绑定帐户,该代理实现将 salt, implementation address, chain id, token contract address, and token ID 作为附加到合约字节码的 ABI 编码常量数据进行存储。这允许 Token 绑定帐户实现轻松查询此数据,同时确保其保持不变。 采取这种方法是为了最大限度地提高与现有基础设施的兼容性,同时也为智能合约开发人员在创建自定义令牌绑定帐户实现时提供充分的灵活性。

3.3 EIP-155 兼容

该提案使用 EIP-155 链 ID 来识别 ERC-721 代币及其合约地址和代币 ID。 ERC-721 代币标识符在单个以太坊链上是全局唯一的,但在多个以太坊链上可能不是唯一的。 使用链 ID 来唯一标识 ERC-721 代币,允许希望实施此提案的智能合约作者有选择地支持多链代币绑定账户。

3.4 循环调用

最简单的循环调用例子就是将 ERC6551 的 NFT 转移到了 TBA 里,目前这个情况还没办法避免。

三、应用场景展望

自去年 NFT Summer 后,NFT 静态小图片的故事已经非常乏力了,从各大 PFP 蓝筹的巨大跌幅也可以看出市场的失望。更具有互动性的 NFT 可能会是下一个引领市场的方向,游戏、音乐、甚至 AR/VR 等均有很大的想象空间,并且因为 NFT 具有了自己的账户,从而可以与 Dapp 进行交互,交互数据则会积累在 NFT 自己身上,而非以前持有 NFT 的账户身上,从而使得 NFT 在链上具有“法人”身份。

NFT ERC-6551的新趋势出现在 ETHglobal 获奖项目中,并且有多个 NFT 项目采用这一新标准。根据 Dune Analytics 的数据,ERC-6551 账户数量超过 4,000 个,交易量为 736 笔,账户创建高峰出现在 7 月 19 日。

1、特征和适用场景

  1. 智能合约账户
    该提案描述了符合 ERC-4337 标准的智能合约账户的实现,该账户将允许 NFT 拥有资产并通过账户抽象使用无 Gas 交易等功能。
  2. NFT Marketplace
    在市场中买卖 NFT 将会变得更加复杂。买家需要保证他们将收到 NFT 和 TBA 中商定的资产。

  1. 可组合性

    ERC6551 典型的应用场景就是 NFT 的可组合性,比如可以将 NFT 的配饰拆解组合,如下图所示,左边的男人为NFT,右上角0x3b…c431为该NFT所拥有的账户,下方的表和现金为其所拥有的NFT,这就实现了一套完整的可组合性NFT套件。

    目前 Opensea 等平台已支持 ERC6551 ,如果某个 NFT 具有账户且持有资产,将会在 Opensea 中显示出来,可见 ERC6551 已经快速得到主流认可。

NFT 的交互数据可以使得 NFT 之间具有差异性和成长性,某种程度 NFT 在区块链的世界中具有了生命力,比如一款 Web3 的宠物小精灵游戏,你持有的皮卡丘 NFT 在区块链的世界中打怪升级,它的身上积累了 300 笔链上数据、200U 的资产,而在此之前这些数据也只能积累在皮卡丘 NFT 持有人身上。

Signer是指拥有NFT的人,可以任意更换;TBA(Token Bound Account)是指NFT关联的智能合约账户
  1. POAP 等证明

    举个例子,小明从一个项目中获得了一个 Apple NFT,随后这个项目决定对 NFT 持有者进行代币空投,并且也发布了一系列 POAP,供持有者领取。

    场景 A——没有使用代币绑定账户

    当小明决定出售他的 NFT 时,与 NFT 相关的代币、POAP 都不会转移给买家。

    场景 B——使用了代币绑定账户

    所有与 NFT 相关的代币领取、POAP 领取,都会记录在 NFT 本身。在进行 NFT 出售时,买家也会看到这些记录,所有相关的代币、POAP 也都会一并转移给买家。如果缺失了这些,那么 NFT 的价值可能也会大打折扣。

  2. 完全链上身份

    目前,您的钱包代表您的数字身份。有了 TBA,您的每个 NFT 都有自己的身份。这意味着您的 NFT 可能与您的链上身份相关联,这可以表明您的可信度或成功交易的历史。这开辟了新的可能性——基于 NFT 过去行为的忠诚度计划/游戏内奖励来激励用户。Blend 可以使用您 DeGod 的(链上)身份和声誉来确定您的信誉,从而降低交易对手风险,同时规避掠夺性贷款(predatory loans)风险。

  3. 可溯源

    NFT(目前)无法提供资产交易历史或所有权证明以外的效用的完整信息。如果您出售了 DeGod OTC(不是在市场上),通常没有太多信息,TBA 解决了这个问题。

2、应用案例

2.1 Tokenbound Titans:NFT类“养成系”游戏

Tokenbound Titans 是 HomeDAO 在 ETH Waterloo 2023 中开发的NPC游戏,使用了 ERC-6551 标准,将NPC游戏模式与动态生成的 NFT 相结合。玩家是NFT的所有者,每个NFT绑定一个有不同能力和特点的角色。

核心玩法是角色通过战斗获得代币奖励,并花钱拉满攻击、速度、防御、血量等属性,随着等级的提高,还能解锁新招式和连击等技能。

原本NFT链游的模式似乎更像是代码块的排列组合,而这对于热爱“养成系”游戏的玩家似乎并不友好。而ERC-6551的出现则彻底改变了链游和NFT的融合方式,即角色NFT可以在游戏过程中不断进化成长,并对玩家的选择做出真实的反应。

2.2 游戏Parallel Colony: NFT作为游戏玩家账户

Parallel Colony 是一个融合人工智能、ERC-6551以及类似模拟人生的叙事性游戏。游戏中的主人公 Parallel Avatar AI兜里揣着几块钱(游戏流通的货币是ERC-20 PRIME)、一个芯片和一把步枪,开始了自己的生活。

其中,虚拟角色Avatar AI NFT 使用了ERC-6551技术,即该NFT作为自己的游戏账户,游戏中所有购买的物品都属于NFT绑定的钱包,Avatar AI 将和玩家一同决定如何处置钱包里的资产。

2.3 Web3数字时尚公司StapleVerse: 利用ERC-6551推出NFT签名版帽子

Stapleverse 于6月21日同@9dccxyz联名推出了限量版棒球帽,不同于其他签名限量款的是,棒球帽上的签名是电子版的。正是由于ERC-6551的推出,赋予NFT能持有其他NFT的权利,在Stapleverse与@9dccxyz的联名中,“帽子”NFT成为“签名”NFT的持有者。如果“帽子”NFT持有者后续进行交易,则“签名”也会作为“帽子”的附加资产被交易到买方的钱包中。由此来看,ERC-6551可看作是将NFT上现实世界中某些“从属关系”抽象出来并实现的手段。

3、缺点

对于链上 NFT 的可组合性,这本身不是 ERC-6551 的能力,而是作为 CA 钱包本身自带的基础功能,至于通过 ERC-6551 所增幅到的通过 NFT 来转移的这点,更多类似一种采用市场的方式来公平化账号转移的定价和执行上。

所以问题的根源就会回到,凭什么 NFT 更会期望用如此的方式来实现组合?

如果实在要有意义,那就只能说是,对于超大批量的 NFT 资产同时交易的 Gas 消耗很低,然而我想多数用户应该是只想卖点家具,而不是把整个房子打包卖完。即使是针对某个游戏方里的游戏NFT资产,游戏方也应该是并不希望玩家就此卖号走人,所以天然的对其支持有限。

至于SocialFi 的核心叙事 Web3 社交与ERC-6551的结合这点也会有同样的问题,即社交本身不应该鼓励卖号本身,否则关注的岂非是个被人买卖的数据了。

参考:

EIP6551:ERC-6551: Non-fungible Token Bound Accounts

jason陈老师:https://mp.weixin.qq.com/s/iMqZ4VEbAS-J4FekZdZxUw

OKX Ventures:https://twitter.com/OKX_Ventures/status/1669298710151573509

Dune:https://dune.com/sealaunch/erc-6551

账户抽象:ERC-6551 类比式解读 — zhixian

十四君:https://mp.weixin.qq.com/s/Lh9aP1_EUpVNnNQL-P7REQ