本节解释了 ArcBlock 去中心化身份(DID)背后的基本概念。在 ArcBlock 生态系统中,DID 不仅仅是一个标识符;它是一个自包含、自描述的实体,内嵌了自身的加密属性。这种设计实现了一个通用且可互操作的身份系统。
DID 结构
ArcBlock DID 是一个遵循 W3C DID 规范格式的字符串,前缀为 did:abt:。前缀之后的部分是一个 Base58 编码的字符串,其中包含了关于该身份的所有必要信息。
例如:did:abt:zNKoDmH82m9fW5n444z4T8tWz9t2v7q3m6s
DID 的核心是一个 26 字节的缓冲区,包含:
- 类型信息(2 字节): 编码 DID 使用的加密套件。
- 公钥哈希(20 字节): 与 DID 关联的公钥的哈希值。
- 校验和(4 字节): 确保 DID 字符串的完整性。
这种结构使得 ArcBlock DID 能够自我验证和自我描述,因为你可以直接从 DID 字符串本身推导出 DID 的能力。
DIDType 对象
DIDType 对象是一个关键的配置对象,它定义了 DID 的加密特性。它指定了用于密钥对、哈希和地址编码的算法。
- role
number(required) — 指定 DID 的目的或角色。不同的角色可能有不同的加密要求。例如,ROLE_NODE 使用 SHA2 进行哈希,而 ROLE_ACCOUNT 使用 SHA3。常见的角色包括 ROLE_ACCOUNT、ROLE_APPLICATION、ROLE_NODE 和 ROLE_PASSKEY。 - pk
number(required) — 定义用于签名和验证的公钥加密方案。支持的类型包括 ED25519、ETHEREUM 和 PASSKEY。 - hash
number(required) — 指定用于生成公钥哈希和校验和的哈希算法。支持的算法包括 SHA3、SHA2 和 KECCAK。 - address
number(required) — 决定最终 DID 地址字符串的编码格式。主要格式是 BASE58(用于标准 ArcBlock DID)和 BASE16(用于与以太坊兼容的 DID)。
DID 类型预设
为了简化 DID 的创建,该库提供了几个字符串快捷方式,对应于常见用例的预配置 DIDType 对象。
| 快捷方式 | 角色 | 密钥类型 | 哈希类型 | 编码 | 用例 |
|---|---|---|---|---|---|
'default', 'arcblock' | ROLE_ACCOUNT | ED25519 | SHA3 | BASE58 | 标准用户和应用程序帐户。 |
'eth', 'ethereum' | ROLE_ACCOUNT | ETHEREUM | KECCAK | BASE16 | 与以太坊兼容的帐户。 |
'passkey' | ROLE_PASSKEY | PASSKEY | SHA2 | BASE58 | 由 WebAuthn Passkeys 管理的 DID。 |
DID 生成流程
DID 是从一个密钥和一个 DIDType 对象生成的。下图说明了标准 ArcBlock DID 的生成过程。

兼容以太坊的 DID
该库为兼容以太坊的 DID 提供了一流的支持。这些是标准的以太坊地址,前缀为 0x。
与标准的 ArcBlock DID 不同,以太坊 DID 不在其地址本身内编码其类型信息。相反,其类型是通过其格式推断出来的。当库遇到一个有效的以太坊地址时,它会自动应用 'ethereum' 预设(ETHEREUM 密钥类型、KECCAK 哈希、BASE16 编码)。该库还处理 EIP-55 校验和的验证和生成,以确保与更广泛的以太坊生态系统的互操作性。