一个地址只属于一个身份:ERC-1484 的 EIN 编号与恢复地址 图 1
一个地址只属于一个身份:ERC-1484 的 EIN 编号与恢复地址 · 图 1

一个地址只属于一个身份:ERC-1484 的 EIN 编号与恢复地址

链上身份标准层出不穷,每一个都试图把“身份”绑定到某个侧面:声明协议、身份专属合约、签名方案。ERC-1484 反着来:它什么都不定义,只修一层地基。摘要的表述是——一个身份管理与聚合框架,让实体通过单一登记合约声明身份、把各种以太坊地址与身份建立关联并用身份与合约交互。文档创建于 2018 年 10 月 12 日,仓库记录状态为 Stagnant,属于长期无人推进的归档方案。

EIN:唯一、递增、且刻意无意义

登记合约是全部身份的中枢,职责被定义为制定并执行一个全局命名空间的规则。每个身份由一个以太坊身份编号(EIN)标识:从 1 开始的递增无符号整数,规范对它的定性是“唯一但除此之外不携带信息”。身份本体是一个结构体,四个组成部分:一个恢复地址、一个关联地址集合、一个服务方集合、一个解析方集合。

身份和地址的关系是这份设计最需要读仔细的地方。一个地址要成为某身份的关联地址,必须由该身份自己出手——从身份侧发起交易,或者提供候选地址与一个已关联地址分别签出的两份签名,表明关联意图;解关联同理需要交易或签名。规范立了一条全局排他规则:任一地址在同一时刻只能是某一个身份的关联地址。这条规则把“多地址同身份”合法化,也让任何工具不能靠地址撞车去猜测归属。服务方是获得身份授权后可代为行事的地址,规范明说它包括且不限于管理关联地址、服务方和解析方三个集合,存在目的是降低管理门槛。

一个地址只属于一个身份:ERC-1484 的 EIN 编号与恢复地址 图 2
一个地址只属于一个身份:ERC-1484 的 EIN 编号与恢复地址 · 图 2

查询与操作的函数分层

登记合约的只读侧给了一组对偶问题:identityExists(uint ein) 问编号是否在册,hasIdentity(address)getEIN(address) 从地址反向问归属,isAssociatedAddressForisProviderForisResolverFor 分别核对三种集合成员,getIdentity(ein) 一次取回整个结构。写入侧围绕四个集合展开:createIdentity(address recoveryAddress, address[] providers, address[] resolvers) 一步建号,其余是 add 与 remove 配对的三组函数,并且每组都提供一个带 For(uint ein, ...) 的变体给被授权的服务方代管身份用。

每个敏感操作还有一个 Delegationed 后缀的变体,例如 createIdentityDelegatedaddAssociatedAddressDelegatedtriggerRecovery。规范在这些函数签名里统一携带 uint8 v, bytes32 r, bytes32 s, uint timestamp 四个参数:用链下签名代替交易发起人,同时用一个显式时间戳界定签名有效期。这个时间戳是防重放的关键——裸签名永不过期,套上截止窗口后,一份泄露的授权签名作恶窗口被压缩成有限时间。

恢复与销毁

恢复地址是结构体里唯一的单值角色,也是找回机制的扳机:triggerRecovery(uint ein, address newAssociatedAddress, v, r, s, timestamp) 由恢复地址一侧驱动(携带旧关联地址的签名),把身份的全部关联关系指向新地址,身份编号本身保持不变。销毁走 triggerDestruction,参数里带数组分块清理集合并选择是否清空解析方。triggerRecoveryAddressChange 与其 For 变体则允许身份主动换掉恢复地址——恢复路径本身也在可管理资产清单里,这一点常被用户忽略。

归档身份层照见的现实

这份方案停更多年,但它针对的问题一件没消失:各个身份标准互不兼容,协调成本转嫁给用户。它的回答是把身份抽象成登记合约里的一个结构体,对 ERC-725、ERC-1056 等既有体系保持兼容,还支持去中心化标识符规范和元交易。对照今天做安全检查时可以拿三个问题去测任何“链上身份”产品:归属规则是不是全局排他(一个地址是否同时挂着多个身份);恢复流程公开在哪个合约、恢复地址由谁持有;委托操作是否带过期时间戳。ERC-1484 把三个答案都写成了链上可查的接口,这正是读一份 Stagnant 文档仍然划算的原因——机制可以被归档,问题不会。本文为机制说明,不构成任何投资建议。