ERC-7656 通用关联服务:一个 NFT 名下能挂出多少种外挂合约 图 1
ERC-7656 通用关联服务:一个 NFT 名下能挂出多少种外挂合约 · 图 1

ERC-7656 通用关联服务:一个 NFT 名下能挂出多少种外挂合约

ERC-6551 让每个 NFT 可以绑定一个专属账户合约,这个思路曾被叫做“代币绑定账户”。ERC-7656 则把它推广到更一般的情形:不只是给 NFT 绑“钱包”,而是允许把任意类型的服务合约挂到某个 NFT、某个 ERC-4337 钱包或其他合约名下,由被链接对象的所有者支配,且完全不用改动原来的合约。2026 年 9 月 9 日在 ethereum/ERCs 仓库核对,该标准标注为 Final。

统一工厂与两个入口

标准定义了一个 IERC7656Factory 接口,只有两个核心函数:create 负责实际部署,compute 负责在部署前算出服务合约将会得到的地址。两者接收同一组参数:实现合约地址、saltchainIdmode、被链接合约地址与 linkedId。部署成功时工厂发出 Created 事件,把这一整套参数连同新服务地址记入日志。任何工厂实现必须声明支持接口标识 0x9e23230a

对普通持有人来说,compute 的价值在于可预告、可核对:不用真的花 Gas,就能先算出“我的 NFT 如果挂一个服务合约,它会长驻哪个地址”,再决定要不要执行。

ERC-7656 通用关联服务:一个 NFT 名下能挂出多少种外挂合约 图 2
ERC-7656 通用关联服务:一个 NFT 名下能挂出多少种外挂合约 · 图 2

两种链接模式

mode 是一个 12 字节的选择器,目前规定了两种取值。LINKED_ID 模式(0x000000000000000000000000)用于需要代币编号的场景,比如挂到某枚具体的 ERC-721 上,这与 ERC-6551 的既有体系兼容;NO_LINKED_ID 模式(0x000000000000000000000001)用于不需要编号的对象,比如 ERC-4337 智能账户,此时 linkedId 参数仍保留在接口里,但应当置零或另作他用。规范特意保留 bytes12 的宽裕空间,给未来的链接方式留了插槽。

183 字节的壳

每个被挂出去的服务合约都必须是 ERC-1167 最小代理,并在字节码尾部追加一段常量数据:ERC-1167 头部 10 字节、实现地址 20 字节、ERC-1167 尾部 15 字节,再接 salt 32 字节、chainId 32 字节、mode 12 字节、linkedContract 20 字节、linkedId 32 字节,合计恰好 183 字节。这意味着任何人拿到一个地址,都可以用 eth_getCode 把这段“身份证”逐字段读出来,验证它到底挂在谁名下、在哪条链、用哪种模式——这正是防跨链重放的基础:服务应当检查操作发生在 chainId 字段指定的链上。

与 ERC-6551 的关系和一个新风险

持有人视角的三条核对动线

把标准翻译成人话,普通持有人在三种场景里会真正碰到 ERC-7656。第一种是项目方宣称“你的藏品自带钱包”:这通常就是 LINKED_ID 模式挂出来的账户,去工厂事件的 Created 日志里能找到实现地址与盐值,用 compute 复算一遍地址是否吻合,就能验证宣传与链上是否一致。第二种是你自己的 NFT 想接入某个第三方服务合约:签名前确认这笔 create 交易用的实现合约你在合约浏览器里能读到已验证源码,因为服务合约一经部署就永久挂在你的藏品名下,删除动作本身也要通过它自己的逻辑进行。第三种是排查“这个地址为什么持有我的币”:把地址的字节码尾部按 183 字节结构拆开,立刻能看出它是替谁、在哪条链、按哪种模式服务。标准本身不新增任何资产搬运能力,它只是把“挂名服务”这件事从各家自造轮子变成同一种查法——查法统一,骗局藏身处就少了。

ERC-6551 把绑定的合约限定为“账户”,ERC-7656 则去掉了这个限制,同一个工厂既能挂服务也能挂账户,并宣称与既有代币绑定账户保持向后兼容。规范文档自己也提示了一个此前存在的所有权循环:如果一个智能钱包给自己名下的 NFT 部署了服务合约,而这个服务合约又管理着同一个钱包的资产,就可能形成循环,让资产陷入无法取出的状态,实现者应当加入检测。对持有人的现实意义是:给藏品挂“外挂”前,先想清楚这个服务合约将拥有谁的资产、由谁触发,别把“扩展功能”变成“多一个能动你资产的入口”。本文为协议机制科普,不构成任何投资建议;标准状态以 ethereum/ERCs 仓库文本为准(核验时间 2026 年 9 月 9 日)。