概要
ERC‑1056(Ethereum Lightweight Identity)是一个针对以太坊上轻量级身份管理的ERC标准,旨在提供一个通用的身份注册表,用于管理身份的公钥代理(delegates)和属性(attributes),并实现完全的W3C去中心化标识符(DID)兼容性。它的核心设计目标是让身份创建“即插即用”且零成本(无需额外合约部署或Gas花费),同时支持离线环境下的身份管理,并允许在不改变主标识符的情况下对密钥进行安全轮换。本文将分章节详细解读其动机、核心概念、规范细节、实现方式、安全考量及生态展望。
背景与动机
早期的身份管理方案(如ERC‑725)要求为每个身份部署独立合约,导致身份创建的链上成本高昂,不利于大规模普及,也无法在无网络或网络受限环境(如难民场景)中使用。uPort团队在实践中发现,降低身份创建门槛、支持离线发生器(offline tools)和密钥轮换是最迫切的需求。ERC‑1056从“所有现有以太坊账户皆为有效身份”的角度出发,将身份创建简化为普通账户创建,免去额外合约部署费用,并通过单一共享注册表合约(EthereumDIDRegistry)实现所有身份的管理与更新,从而极大降低资源消耗。
核心概念
- Identifier(身份标识):直接使用以太坊地址作为唯一标识,无需额外ID生成器。
- Delegate(代理):由身份所有者授权、具有特定用途和有效期的地址,用于代表身份执行操作。
- DelegateType(代理类型):描述代理用途的32字节标识符,例如
did-jwt
、raiden
等。 - Attribute(属性):与身份关联的任意数据片段,可用于存储服务端点、加密公钥或其他外部信息。
规范简介
身份所有权
- identityOwner:查询指定身份的当前所有者。
function identityOwner(address identity) public view returns(address);
- changeOwner:直接在链上更新身份所有者。
function changeOwner(address identity, address newOwner) public;
- changeOwnerSigned:使用离线签名的方式更新所有者,允许第三方发起交易支付Gas。
function changeOwnerSigned(address identity, uint8 sigV, bytes32 sigR, bytes32 sigS, address newOwner) public;
代理管理
- validDelegate 检查指定代理在给定身份和类型下是否仍然有效。
function validDelegate(address identity, bytes32 delegateType, address delegate) public view returns(bool);
- addDelegate/addDelegateSigned:添加新代理并设置有效期(秒级);Signed版本同上,可脱离身份所有者支付Gas。
- revokeDelegate/revokeDelegateSigned:撤销指定代理。
属性管理
- setAttribute/setAttributeSigned:为身份添加或更新属性,设置有效期。
- revokeAttribute/revokeAttributeSigned:按名称和值撤销属性。
事件与高效查询
- DIDOwnerChanged, DIDDelegateChanged, DIDAttributeChanged:每当所有者、代理或属性发生变化时,合约发出相应事件,包含
previousChange
指向上一次变更的区块编号。 - 高效链下查询:通过链上存储的
changed[identity]
映射,应用可以从最新变更向前迭代,只需在关键区块扫描相关事件,极大提升事件检索性能。
构建 DID 文档
使用 identityOwner
获取主公钥,遍历 DIDDelegateChanged
事件收集附加公钥与验证方法,遍历 DIDAttributeChanged
获取服务端点和其他信息,即可在链下生成符合W3C DID文档的JSON结构。
实现与部署
- ethr‑did‑registry: Solidity合约实现,公开部署于主网及多个测试网(地址
0xdca7ef03e98e0dc2b855be647c39abe984fcf21b
)。 - ethr‑did‑resolver: JavaScript库,用于在应用中解析和生成DID文档。
- ethr‑did: 客户端库,封装身份方法调用和签名流程。
安全考虑与局限
- 账户恢复方案缺失:社区指出当前标准缺少链上恢复机制,无法防止私钥丢失后身份永久不可控。
- 跨链重放风险:离线签名未引入链ID约束,可能在不同网络重复提交同一签名,建议未来升级至EIP‑712以防重放。
- 网络发现与注册表选择:私链/侧链环境中难以自动发现正确的注册表地址,标准尚未定义网络发现算法。
生态与未来展望
- DID 互操作性:ERC‑1056 作为最轻量级的以太坊 DID 方法,被ERC‑1484等聚合协议纳入支持,用于连接多种身份标准及元交易框架。
- 与账户抽象结合:随着ERC‑4337等账户抽象方案推进,ERC‑1056 可与费用支付分离的身份交易模式深度集成,实现用户体验进一步优化。
- 离线身份与更广泛应用:Off‑chain身份生成机制使得大规模认证(如物联网设备、无网络环境下的数字身份)成为可能,推动去中心化身份在更多场景落地。
结论
ERC‑1056 通过共享注册表、离线签名和事件链式链接等机制,实现了“零成本”且轻量化的以太坊身份管理标准,兼容W3C DID规范,极大降低了链上身份系统的使用门槛。虽然当前尚缺少恢复与网络发现等机制,但其在DID生态系统与账户抽象领域的天然契合,使其成为Web3身份解决方案的重要基石。

声明:本作品采用署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0)进行许可,使用时请注明出处。
Author: mengbin
blog: mengbin
Github: mengbin92
cnblogs: 恋水无意
腾讯云开发者社区:孟斯特
—