本節說明 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 校驗和的驗證和產生,以確保與更廣泛的以太坊生態系的互通性。