DID 核心 — 实现

For Claude: REQUIRED SUB-SKILL: Use superpowers:executing-plans to implement this plan task-by-task.

Goal: 在 BabyDriver L2 上实现核心 DID 系统 — DIDRegistry (0x8017) + CredentialRegistry (0x8018) + IdentityVerifier (0x8019) 三个系统合约,完成身份注册→凭证发行→凭证验证的完整闭环。

Architecture: 三个独立系统合约继承 SystemContractBase,使用 onlySystemCall / onlyCallFromBootloader 修饰符保护写操作。IdentityVerifier 先用 ECDSA 签名验证模式(P1 再替换为 ZK PLONK)。跨合约交互:IdentityVerifier 调用 DIDRegistry 验证身份状态,调用 CredentialRegistry 验证凭证有效性。

Tech Stack: Solidity 0.8.28 (zksolc 1.5.11), SystemContractBase, Hardhat + TypeScript tests, Foundry tests

设计文档: docs/plans/2026-03-04-did-system-design.md


关键参考文件

在实现前务必阅读以下文件理解模式:

文件
用途

era-contracts-l1/system-contracts/contracts/OracleHub.sol

系统合约实现模式

era-contracts-l1/system-contracts/contracts/interfaces/IOracleHub.sol

接口定义模式

era-contracts-l1/system-contracts/contracts/abstract/SystemContractBase.sol

基类 + 修饰符

era-contracts-l1/system-contracts/contracts/Constants.sol

地址常量注册

era-contracts-l1/system-contracts/scripts/constants.ts

TypeScript 常量注册

era-core/core/lib/constants/src/contracts.rs

Rust 地址常量

era-core/core/lib/types/src/system_contracts.rs

SYSTEM_CONTRACT_LIST

refs/ethr-did-registry/contracts/EthereumDIDRegistry.sol

DID 注册参考


Task 1: 地址常量注册(基础设施)

Files:

  • Modify: era-contracts-l1/system-contracts/contracts/Constants.sol

  • Modify: era-contracts-l1/system-contracts/scripts/constants.ts

  • Modify: era-core/core/lib/constants/src/contracts.rs

  • Modify: era-core/core/lib/types/src/system_contracts.rs

Step 1: 在 Constants.sol 添加 DID 系统合约地址

ORACLE_HUB_SYSTEM_CONTRACT 定义之后(约 line 112),添加:

Step 2: 在 TypeScript constants.ts 注册

oracleHub 条目之后添加:

Step 3: 在 Rust contracts.rs 添加地址常量

ORACLE_HUB_ADDRESS 定义之后添加:

Step 4: 在 SYSTEM_CONTRACT_LIST 注册

system_contracts.rs 的 OracleHub 条目之后添加 3 个条目:

更新数组长度注释(41 → 44)。在文件顶部 import 新增的 3 个常量。

Step 5: 验证编译

Run: cd era-core/core && cargo check 2>&1 | tail -20 Expected: 编译通过(Rust 常量和 import 无错误)

Step 6: Commit


Task 2: IDIDRegistry 接口 + DIDRegistry 合约

Files:

  • Create: era-contracts-l1/system-contracts/contracts/interfaces/IDIDRegistry.sol

  • Create: era-contracts-l1/system-contracts/contracts/DIDRegistry.sol

Step 1: 创建 IDIDRegistry 接口

Create era-contracts-l1/system-contracts/contracts/interfaces/IDIDRegistry.sol:

Step 2: 创建 DIDRegistry 系统合约

Create era-contracts-l1/system-contracts/contracts/DIDRegistry.sol:

Step 3: 验证编译

Expected: 编译通过,DIDRegistry included

Step 4: Commit


Task 3: ICredentialRegistry 接口 + CredentialRegistry 合约

Files:

  • Create: era-contracts-l1/system-contracts/contracts/interfaces/ICredentialRegistry.sol

  • Create: era-contracts-l1/system-contracts/contracts/CredentialRegistry.sol

Step 1: 创建 ICredentialRegistry 接口

Create era-contracts-l1/system-contracts/contracts/interfaces/ICredentialRegistry.sol:

Step 2: 创建 CredentialRegistry 系统合约

Create era-contracts-l1/system-contracts/contracts/CredentialRegistry.sol:

Step 3: 验证编译

Expected: 编译通过

Step 4: Commit


Task 4: IIdentityVerifier 接口 + IdentityVerifier 合约

Files:

  • Create: era-contracts-l1/system-contracts/contracts/interfaces/IIdentityVerifier.sol

  • Create: era-contracts-l1/system-contracts/contracts/IdentityVerifier.sol

Step 1: 创建 IIdentityVerifier 接口

Create era-contracts-l1/system-contracts/contracts/interfaces/IIdentityVerifier.sol:

Step 2: 创建 IdentityVerifier 系统合约

Create era-contracts-l1/system-contracts/contracts/IdentityVerifier.sol:

Step 3: 验证编译

Expected: 编译通过

Step 4: Commit


Task 5: Foundry 测试 — DIDRegistry

Files:

  • Create: contracts/test/DIDRegistry.t.sol

  • Create: contracts/src/did/IDIDRegistryLocal.sol

说明: 系统合约测试有两种方式。此处用 Foundry 做独立逻辑测试(不依赖 zkSync 环境), 验证合约逻辑正确性。集成测试(bootloader 交互)在 Task 8 用 Hardhat 做。

Step 1: 创建本地测试用接口

因为 Foundry 测试不使用 zkSync 系统调用机制,我们需要一个可在标准 EVM 上测试的方式。 创建一个本地版本的 DIDRegistry 用于 Foundry 测试(移除系统合约修饰符,保留核心逻辑)。

Create contracts/src/did/IDIDRegistryLocal.sol:

Step 2: 创建本地测试版 DIDRegistry

Create contracts/src/did/DIDRegistryLocal.sol:

Step 3: 编写 Foundry 测试

Create contracts/test/DIDRegistry.t.sol:

Step 4: 运行测试

Expected: 所有 ~20 个测试通过

Step 5: Commit


Task 6: Foundry 测试 — CredentialRegistry + IdentityVerifier

Files:

  • Create: contracts/src/did/CredentialRegistryLocal.sol

  • Create: contracts/src/did/IdentityVerifierLocal.sol

  • Create: contracts/test/CredentialRegistry.t.sol

  • Create: contracts/test/IdentityVerifier.t.sol

Step 1: 创建 CredentialRegistryLocal

Create contracts/src/did/CredentialRegistryLocal.sol:

Step 2: 创建 IdentityVerifierLocal

Create contracts/src/did/IdentityVerifierLocal.sol:

Step 3: 创建 CredentialRegistry 测试

Create contracts/test/CredentialRegistry.t.sol:

Step 4: 创建 IdentityVerifier 测试

Create contracts/test/IdentityVerifier.t.sol:

Step 5: 运行所有测试

Expected: 所有 ~30 个测试通过

Step 6: Commit


Task 7: 系统合约编译验证 + 全套回归

Step 1: 预处理并编译系统合约

Expected: 所有合约编译成功(包括 DIDRegistry, CredentialRegistry, IdentityVerifier)

Step 2: 编译 bootloader(确认无破坏)

Expected: 7 个 bootloader 变体编译通过

Step 3: Rust 编译检查

Expected: ~200 crates 编译通过

Step 4: 运行全部 Foundry 测试

Expected: 所有测试通过(DIDRegistry ~20 + CredentialRegistry ~15 + IdentityVerifier ~15 + 现有 ~83)

Step 5: Commit(如有修复)


Task 8: 更新开发日志

Files:

  • Modify: docs/dev-log.md

Step 1: 在 dev-log.md 底部追加 Phase 5a 记录

在文件末尾添加:

Step 2: Commit


验证清单

完成所有 8 个 Task 后,确认以下全部通过:

Last updated