社会恢复 + 企业 IAM — 设计

日期: 2026-03-06 状态: 已批准 前置: Phase 5a (DID 核心) + Phase 5b (ZK 身份证明 + Genesis 部署)


概览

Phase 5c 在现有 DID 系统(0x8017 DIDRegistry, 0x8018 CredentialRegistry, 0x8019 IdentityVerifier)基础上扩展三项能力:

  1. 社会恢复 — 扩展 DIDRegistry (0x8017)

  2. 企业 IAM — 新增 EnterpriseIAM (0x801A) 系统合约

  3. 选择性披露 — 扩展 IdentityVerifier (0x8019)

架构决策:最小化新合约数量,优先扩展现有合约,仅在职责不同时新建。


Part 1: 社会恢复(扩展 DIDRegistry 0x8017)

模型

混合模式:N-of-M 多签 + 时间锁。

  • 用户设置 M 个 guardian(最多 7 个),恢复需 N 个批准

  • 执行前强制 24h 时间锁,原 controller 可在此期间取消

  • Guardian 变更自动清除所有待处理恢复请求

新增存储

新增函数

函数
调用者
说明

setRecovery(address[] guardians, uint8 threshold, uint64 timelockDuration)

controller

设置/更新恢复配置

initiateRecovery(address identity, address newController)

guardian

发起恢复 + 第一票

approveRecovery(address identity)

guardian

批准恢复

executeRecovery(address identity)

任何人

时间锁到期后执行

cancelRecovery()

controller

取消待处理恢复

getRecoveryConfig(address identity)

任何人 (view)

查询恢复配置

getRecoveryRequest(address identity)

任何人 (view)

查询恢复请求状态

约束

  • threshold > 0 && threshold <= guardians.length && guardians.length <= 7

  • timelockDuration >= 1 hours(最少 1 小时)

  • Guardian 不能是 identity 自己

  • Guardian 不能重复

  • setRecovery 清除所有待处理请求(防止 guardian 更改攻击)

事件

L1 同步

  • Type 8: RecoveryInitiated → abi.encode(uint8(8), identity, newController, initiatedAt)

  • Type 9: RecoveryExecuted → abi.encode(uint8(9), identity, oldController, newController, nonce)


Part 2: 企业 IAM(新增 EnterpriseIAM 0x801A)

理由

企业 IAM 涉及组织、角色、权限位图等独立于 DID 的概念,放入新系统合约更清晰。

核心数据结构

权限常量(位图)

存储

函数

函数
调用者
说明

createOrganization(bytes32 orgId, address orgDID)

DID controller

创建组织(需 DID 活跃)

createRole(bytes32 orgId, bytes32 name, uint256 permissions)

org owner / MANAGE_ROLES

创建角色

assignRole(bytes32 orgId, address member, uint256 roleId)

org owner / MANAGE_MEMBERS

分配角色

revokeRole(bytes32 orgId, address member)

org owner / MANAGE_MEMBERS

撤销角色

hasPermission(bytes32 orgId, address member, uint256 permission)

任何人 (view)

检查权限

getMemberRole(bytes32 orgId, address member)

任何人 (view)

查询成员角色

getOrganization(bytes32 orgId)

任何人 (view)

查询组织信息

getRole(bytes32 orgId, uint256 roleId)

任何人 (view)

查询角色详情

deactivateOrganization(bytes32 orgId)

org owner

停用组织

DIDRegistry 集成

  • createOrganization 需验证 orgDID 在 DIDRegistry 中活跃

  • Owner 必须是 orgDID 的 controller 或 delegate

  • 通过 staticcall DIDRegistry.isActive()DIDRegistry.resolveDID() 验证

L1 同步

  • Type 10: OrgCreated → abi.encode(uint8(10), orgId, orgDID, owner)

  • Type 11: RoleAssigned → abi.encode(uint8(11), orgId, member, roleId)

  • Type 12: RoleRevoked → abi.encode(uint8(12), orgId, member)


Part 3: 选择性披露(扩展 IdentityVerifier 0x8019)

模型

选择性披露(Selective Disclosure):用户用 ZK 证明展示凭证的特定属性,而不暴露完整数据。

例如:证明 "年龄 >= 18" 而不暴露出生日期。

新增存储

新增电路类型

在现有基础上(0=KYC, 1=Credit, 2=Enterprise)扩展:

circuitType
用途
示例

3

Age Proof

证明年龄 >= X

4

Income Proof

证明收入在范围 [A, B]

5

Region Proof

证明属于某地区集合

新增函数

函数
调用者
说明

registerDisclosurePolicy(bytes32 policyId, bytes32 credentialType, bytes32[] requiredAttributes, uint8 circuitType)

bootloader / system call

注册披露策略

verifySelectiveDisclosure(address identity, bytes32 policyId, uint256[2] pA, uint256[2][2] pB, uint256[2] pC, uint256[] publicInputs)

system call

ZK 验证选择性披露

hasValidDisclosure(address identity, bytes32 policyId)

任何人 (view)

查询披露是否已验证通过

getDisclosurePolicy(bytes32 policyId)

任何人 (view)

查询策略详情

与现有 ZK 基础设施的关系

  • 复用 _circuitVerifiers 映射(已有 0/1/2,新增 3/4/5)

  • 复用 _usedProofs 防重放保护

  • 复用 Groth16 验证调用模式(staticcall verifyProof)

  • verifySelectiveDisclosure 内部调用已有的 proof 验证逻辑,然后将结果写入 _disclosureResults

合规性钩子

verifySelectiveDisclosure 成功后自动设置对应 compliance key:

这样其他合约可以通过 checkCompliance(identity, complianceKey) 验证。


系统合约地址总表

地址
合约
Phase

0x8016

OracleHub

P2

0x8017

DIDRegistry

P5a + P5c (社会恢复)

0x8018

CredentialRegistry

P5a

0x8019

IdentityVerifier

P5a/b + P5c (选择性披露)

0x801A

EnterpriseIAM

P5c (新增)


接口变更总结

IDIDRegistry.sol 新增

IIdentityVerifier.sol 新增

IEnterpriseIAM.sol(新建)


测试策略

每个 Part 独立的 Foundry 测试文件:

  1. DIDRegistryRecovery.t.sol — 社会恢复单元测试 (~20 tests)

  2. EnterpriseIAM.t.sol — 企业 IAM 单元测试 (~20 tests)

  3. IdentityVerifierDisclosure.t.sol — 选择性披露单元测试 (~15 tests)

  4. Phase5cE2E.t.sol — 跨合约 E2E 测试 (~10 tests)

Genesis 影响

  • DIDRegistry 和 IdentityVerifier 代码变更需要重新编译系统合约

  • 新增 EnterpriseIAM 需要注册到 Constants.sol + SYSTEM_CONTRACT_LIST

  • 需要 genesis 重部署(与 Phase 5b 相同流程)

Last updated