ERC-2193 类型别名:给链上数据结构起名字的注册规则 图 1
ERC-2193 类型别名:给链上数据结构起名字的注册规则 · 图 1

ERC-2193 类型别名:给链上数据结构起名字的注册规则

三十二字节的标识符对机器友好,对人完全不可读。以太坊为这个问题造过的标准不少:ENS 管域名,ERC-725 的键值键做过命名空间尝试,2019 年 7 月 16 日创建的 ERC-2193 则把它塞进 dType 类型系统:给每个类型标识符注册一个人类可读的别名。仓库状态 Stagnant。名字系统看着简单,实际是所有注册类协议的必答题——谁先占名、怎么防抢、如何防冒充,这份两百行不到的标准把答案压缩进了两个函数。

两个函数的分工

接口叫 Alias,只有核心两员。setAlias 收五个参数:来自类型注册表的 dtypeIdentifier、单字节分隔符 separator、名字字符串、被指向的标识符,以及一个签名 signaturegetAliased 用分隔符和名字两个参数反查,返回绑定的标识符。查询比写入简单,因为写入要处理的全部治理问题——证明你有权注册这个名字——在写入时就消化掉了。

原文对流量的设定值得细读:注册时合约要检查 dtypeIdentifier 确实存在于 dType 注册表,同时别名指向的标识符要在该类型的存储合约里被验证存在与所有权。这条链的含义是,名字不是自由市场——你不能凭空注册一个指向不存在对象的词,也不能冒用别人类型下的名字。签名参数则是最后一道锁:注册动作由标识符持有者授权。

ERC-2193 类型别名:给链上数据结构起名字的注册规则 图 2
ERC-2193 类型别名:给链上数据结构起名字的注册规则 · 图 2

同名冲突的解法

不同项目都想起名”MyToken”怎么办?标准的方案是把唯一性键设为”类型标识符加分隔符加名字”的组合:同一个类型命名空间内部名字唯一,跨类型重名互不干扰。分隔符是单字节,用途类似 ENS 里的点号,为将来在名字里切分子空间留了口子。代价是查询时需要先知道类型上下文——纯按一个词全网检索并不被这份接口支持,名字的可寻址性弱于全局命名系统。

为什么停在原地

别名注册的前提是先有那个”谁都不能篡改”的类型注册表,而这个前提(ERC-1900)从未成立。这决定了 ERC-2193 即使实现也只能是局部设施:在某个信任圈内做名字绑定没有问题,做成公共设施则回到注册治理老问题——抢名、囤名、注销回收,一样不少。讽刺的是,ENS 用拍卖与租金解决囤名,走的恰是市场路线而非登记路线;名字问题最后被证明是经济问题,纯合约接口回答不了。

对今天读者的实用映射

AliasSet 事件的字段设计值得多看一眼:类型标识符、分隔符、名字原样入日志,而被指向的标识符加上了 indexed 标记——工具可以直接按目标标识符过滤事件流,不必解析整条记录。对注册系统来说,事件流就是名字的户口本:谁在何时把哪个名字指向了哪里,公开可查、可回放。别名变更史在 ENS 这类系统里被证明是排障与纠纷裁决的核心数据,ERC-2193 在两百行里也把它安排上了,可见设计者对注册类协议的风险点是清楚的。

签名参数在接口里的位置同样有讲究。setAlias 要求附带签名而非直接校验调用者身份,意味着注册动作可以由第三方代执行——持有者签好名字绑定的授权,任何人代为提交都可以,注册 gas 与名字管理权因此可以分离。这个模式与后来元交易、授权签名的通用范式一致,也再次印证标准的一条隐含原则:名字的所有权由密码学签名锚定,不由提交交易的地址锚定。读任何名字系统时抓住这条原则,就不会被代注册机构、经销商的话术绕进”是谁在控制名字”的迷雾里。

别名列子的当代版本无处不在:域名、社交标识、合约昵称服务、NFT 项目声明的官方名字。ERC-2193 的检查链可以原样搬进任何一次”这个名字是不是他的”判断:先看名字绑定是否由被指向对象的持有者签名授权,再看查询路径上的每个中间注册合约由谁控制。抢名与仿冒的教训则更直白:任何公开先到先得、没有租金或销毁成本的名字市场,长期都会被批量注册者占据。名字系统的安全不在接口的第一行,在抢名要付出什么代价的那一行。本文为机制说明,不构成任何投资建议。