不花 Gas 建身份:ERC-1056 轻量身份注册表怎么换手与撤销
早期链上身份方案(比如 ERC-725)要用户先部署一个合约账户才算“注册”,创建就要花 Gas。2018 年 5 月 3 日创建的 ERC-1056 反其道而行:身份就是一个普通的以太坊账户,注册零成本,离线也能生成,按 ercs 仓库记录该标准状态为 Stagnant。设计目标里甚至写明了难民的离线开号场景。它同时声称完全兼容 W3C 的 DID 规范。
身份、委托人与属性
术语表里有三个概念。Identifier 是身份标识,就是一个以太坊地址;delegate 是被委托在一段时间内替身份行事的地址;attribute 是挂在身份上的一段数据。委托人还带 delegateType,由上层协议决定用途,标准举的例子是 did-jwt 和 raiden。属性则是由身份所有者管理的简单数据。注册表合约 EthereumDIDRegistry 全网部署一次,所有人共用。

所有权与密钥轮换
identityOwner(身份) 查询归属,默认身份归自身——谁掌握那对密钥谁就是主人。changeOwner(身份, 新主人) 把身份转到新账户或多签,changeOwnerSigned 是签名版,作用相同、提交方式不同。这套机制解决的是它最关心的事:不换主标识也能换钥匙。私钥泄露或设备丢失时,把 owner 指向新账户,旧密钥即失去对注册表的控制;但如果旧密钥还控制着资产本身的直接所有权,注册表层面的换主并不能替你追回资产,这两层要分开看。
委托与属性都带有效期
addDelegate(身份, 类型, 委托人, validity) 里的 validity 是秒数:到期后 validDelegate 自动不再认这个委托人,无需谁动手撤销;revokeDelegate 可提前终止。属性同理,setAttribute(身份, 名称, 值, validity) 设置、revokeAttribute 撤销。每个动作都有对应的 Signed 变体,配合事件 DIDOwnerChanged、DIDDelegateChanged 留痕。带到期时间是这份标准的点睛设计:授权默认会腐烂,这比“永远有效直到想起撤销”的 approve 模式安全得多。
它能证明到哪一步
三个设计决定的来龙去脉
第一处是它和前辈的分岔。ERC-725 把身份做成链上合约账户,注册要先花部署费;ERC-1056 干脆把身份降格成一个普通密钥对,动机部分点名 uPort 团队当年的经验:身份创建成本是推广的最大障碍,还举了离线难民营开号的极端场景,要求整套流程不依赖联网注册服务。代价也清楚——身份与账户彻底合一,身份的全部安全就是那把私钥的安全,换主机制(changeOwner)补的是治理层,不是密钥层。
第二处是 DID 对齐。标准自称完全兼容 W3C 的 DID 规范,Identifier 就取以太坊地址,注册表对外的角色相当于一份链上可查的 DID 文档片段:谁是所有者(identityOwner)、哪些密钥被短期授权(validDelegate)、有哪些自述属性(setAttribute)。第三处藏在函数命名里:几乎每个管理动作都配一个带 sigV、sigR、sigS 的 Signed 变体,含义是“用原始签名代替广播交易来完成同一件事”——用户不持 Gas 也能登记委托,由代付方提交,这是 2018 年元交易思路在身份场景的投影。三个决定合起来读,才看得出这份标准把“便宜、可离线、可轮转”放在多优先——以及它为此放弃了哪些可审计性。
这套机制的诚实版本其实更简单:公告上链的第一价值不是内容权威,而是时间与归属不可抵赖。把一句含糊的“服务正常”写进事件,等同于在链上按了手印——此后任何相反的口径都多了一份可对照的记录。反过来说,没写进合约的官方声明,无论语气多确定,链上世界里都不存在。这也是读任何“服务状态”类合约的分寸:先查 readPosts 有没有活跃公告,再对照事件历史看最近有没有删除与理由;两条链都空白的合约,等于没有公告系统,和没发声是一个意思。
注册表能说明的是:某地址在链上声明了归属、委托与属性,且这些声明带有到期时间,可查事件历史。不能说明的是:地址背后是哪个自然人、属性内容是否属实——attribute 只是所有者自己填的数据,没有权威签发方。把它当免费的、可轮转的“身份路由表”是准确的;把它当现实世界的身份证明则越界了。本文为机制说明,不构成任何投资建议。
发表评论
还没有评论,来说两句吧。
评论区为展示样式,提交不会被处理。