不用合约主人点头也能登记脚本:ERC-7738 注册表的便利与污染风险 图 1
不用合约主人点头也能登记脚本:ERC-7738 注册表的便利与污染风险 · 图 1

钱包想显示一个 NFT 合约的完整信息,传统办法是要么合约自己实现了接口、要么钱包厂商标好了再显示——中间地带是一片空白。ERC-7738 在这个地带放了一个公共登记处:任何人可以把”某合约对应的操作脚本地址”写进一个所有链同址部署的注册表合约。规范本身很短,但对用户来说,它同时解释了两种相反的体验:为什么有的陌生 NFT 突然能正常交互了,以及为什么有的”官方脚本”其实是别人抢注的。

机制:一张无许可的电话簿

注册表是一个多链单例合约——同一段代码部署在多条主网与测试网的相同地址上。它提供三个动作:setScriptURI 允许任何人给任意合约地址登记一组脚本链接(登记行为是无许可的);scriptURI 返回某合约已登记的链接数组,并建议把合约所有者登记的条目排在前面,因为多数钱包只取第一条;ScriptUpdate 事件在条目更新时触发,方便钱包刷新缓存。它与更早的 ERC-5169 的分工是:后者要求合约本身先天支持脚本声明,改不了的老合约用 7738 在外部补登记。理解这一句,就理解了它的全部风险来源——登记处不设门槛,条目好坏只靠排序惯例提示。

不用合约主人点头也能登记脚本:ERC-7738 注册表的便利与污染风险 图 2
不用合约主人点头也能登记脚本:ERC-7738 注册表的便利与污染风险 · 图 2

为什么钱包宁可用它:中心化服务的替代

提案的动机部分说得很直白:如果没有去中心化注册表,“哪个合约配哪个脚本”就得由某家公司的在线数据库说了算——那家公司既承担安全责任,又天然成为守门人。链上登记把守门换成了公开账本,好处是可查、可竞争、单点不烂;代价是垃圾条目与抢注同样公开。这是对用户最重要的一个认知切换:链上注册表解决的是”可得性”,不提供”真实性”。

用户侧的四步信任检查

第一步看来源层级:钱包界面若能显示脚本登记方,优先信任”合约 owner 登记”的条目(规范里把 owner 条目排前的建议就是给用户看的层级)。第二步查登记交易:注册表本身是公开合约,任何条目的写入历史都能用收据里的日志也能查账:topics 和 data 怎么反查一笔转账讲的事件与收据方法反查——某热门 NFT 的脚本条目如果是刚由陌生地址写入的,就是抢注信号。第三步验脚本域名:脚本 URI 通常指向链下服务器或去中心化存储,链接域名核对思路与搜索引擎广告位里的假官网:从点击到钱包弹窗的完整链条的仿冒站识别相同,且注意登记脚本内容随时可被登记方更新。第四步交叉比对:主流钱包内置的合约标签、区块浏览器标注与注册表条目对不上时,以多源一致的为准,单边信息不执行签名。

脚本能做什么:权限边界先想清楚

“脚本”在这里指钱包可加载执行的交互程序,能替用户组织出 approve、mint、claim 之类的调用序列。它自己不持有任何权限——所有后果仍来自你逐笔签下的调用本身,所以脚本页面的风险最终都还原为签名核对纪律:弹窗里出现了你没打算做的授权就停手钱包连接过的网站清单怎么清:断开连接和撤销授权是两件事。如果脚本要求”先授权一个陌生合约再操作”,那和裸网页钓鱼没有本质区别,注册表的存在不改变这一判断。

这个模式的普遍教训

把”合约元数据上链”当成趋势看:合约归属可以用 DNS 交叉验证,弹窗解码有接口附件类提案,链标识有专用字段,脚本入口有本节这种注册表。每一层都在把”钱包替你判断”变成”账本替你留证”,判断责任仍回到你手上的多源比对。习惯养成很简单:交互陌生合约前,浏览器里花一分钟看它的登记面、源码验证状态、owner 与创建交易合约是谁部署的?从部署交易到权限移交的链上调查法——四项都干净,脚本来自哪里都不太容易坑到你。

风险提示:无许可注册意味着条目可能被抢注或污染,脚本链接指向的内容也随时会变化;任何签名以设备屏核对为最终防线,本文不构成投资建议。