8. 注册协议

本章规定资源从客户端进入 OpenAgenet (OAN) 的注册流程。客户端形成资源 DID、DID文档、资源元数据、资源包和资源控制证明后,提交给注册服务节点;注册服务节点执行入口校验和授权域校验,再以签名的上游请求调用根平台的资源验证与发布接口。当前参考实现使用 /resources/register 和兼容的 /resources/submit 入口,成功路径包括根平台请求成功、注册 VC 签发、登记记录写入和响应返回。

注册服务节点返回 status: submitted 只表示本次登记流程已获得该节点及其上游调用的成功结果,不等于资源已经完成全网发布、内容分发或发现索引。客户端应把登记结果、根平台可信发布证明和发现服务节点的索引状态分开保存和展示。

注册链路可以概括为“客户端准备材料,注册服务节点受理并校验,根平台验证并发布,注册服务节点返回登记结果”。客户端不应直接根据页面上的成功提示推断发现可见性;应以资源登记记录、根平台返回内容和发现服务节点查询结果分别判断三个阶段。注册服务节点的公开接口是资源提交入口,节点之间的上游调用属于受保护的服务间协议,二者的请求格式和签名主体不能混用。

sequenceDiagram
    participant Client as 客户端
    participant Registrar as 注册服务节点
    participant Root as 根平台
    participant CDN as 内容分发平台
    participant Discovery as 发现服务节点

    Client->>Registrar: 提交资源材料与控制证明
    Registrar->>Registrar: 校验 DID、元数据、授权域和请求
    Registrar->>Root: 提交带签名的上游请求
    Root->>Root: 验证控制证明、资源包和节点授权
    Root-->>Registrar: 返回验证结果与发布任务状态
    Registrar-->>Client: 返回登记结果与注册 VC(如有)
    Root->>CDN: 创建或推进资源包发布任务
    CDN-->>Discovery: 提供资源包与根平台可信发布证明
    Discovery->>Discovery: 校验材料并建立索引
    Client->>Discovery: 查询资源
    Discovery-->>Client: 返回资源及新鲜度、状态信息

上图中的根平台验证、内容分发和发现索引是连续但可异步完成的阶段。resource-verified-and-queued 或注册服务节点返回的 status: submitted 只代表相应登记或排队事实,不能推导内容分发平台已经完成托管,也不能推导发现服务节点已经建立可查询索引。

8.1 注册目标与状态

注册状态应区分客户端本地状态、注册服务节点处理状态和根平台发布状态。推荐使用以下逻辑状态:

状态 进入条件 允许操作 终止或转换条件
草稿 表单或 SDK 资源材料尚未提交 编辑、预览、重新生成 材料通过本地校验或被修改
本地已校验 本地身份、字段、哈希和控制证明通过 提交或继续编辑 任一绑定字段变化后回到草稿
提交中 客户端已发送注册请求 等待响应或查询 收到成功、失败或超时结果
登记成功 注册节点获得规定的上游成功结果 保存 VC、查询发布状态 后续根平台发布和发现流程独立推进
凭证待取得 登记结果存在但 VC 缺失或为空 按接口规则查询或重试 取得并验证 VC,或进入异常处理
重复 DID、版本和哈希与已有材料一致 返回既有结果 不应产生新的业务版本
冲突或失败 校验、控制、授权、版本或网络条件不满足 修正材料或按可重试性处理 不得显示为全网发布成功
stateDiagram-v2
    [*] --> Draft
    Draft --> LocallyValidated: 本地校验通过
    LocallyValidated --> Submitting: 发送注册请求
    Submitting --> Registered: 节点与根平台返回成功
    Submitting --> Failed: 校验、授权或网络失败
    Registered --> CredentialReturned: 返回注册 VC
    Registered --> CredentialPending: VC 暂缺
    CredentialPending --> CredentialReturned: 后续取得 VC
    Registered --> Updating: 新版本提交
    Updating --> Registered: 更新被接受

浏览器预览或本地校验通过不创建注册记录;网络超时也不应直接生成新的 DID 或新版本。相同业务材料的重试应沿用原资源 DID、版本和哈希,并由服务端或查询接口确认真实结果。

8.2 注册请求结构

注册入口的核心载荷是 ResourceRegistrationSubmission。主要字段与用途如下:

字段 来源 校验和用途
resourceDid 客户端生成的资源身份 作为资源身份和登记记录主键
resourceType 客户端选择 与 DID 语义编码及 DID文档元数据一致
didDocument 客户端草稿 提供公钥、验证方法、服务端点和 OAN 元数据
didDocumentHash 客户端按协议计算 绑定控制 challenge 和发布材料
metadata 客户端表单或资源描述 校验资源声明和授权域
packageVersion 客户端资源版本 区分同 DID 的不同版本
packageHashmetadataHash 客户端计算 绑定资源包和元数据完整性
hashAlgorithm 协议和客户端配置 解释哈希字段的算法前缀
registrationCredential 协议兼容字段 向根平台提交时由注册节点清空
subjectControlProof 资源控制方签名 证明本次注册或更新获得控制授权

这些字段可按验证顺序分为四组:

字段组 字段 主要判断
身份与类型 resourceDidresourceTypedidDocument 资源身份、资源类型和 DID文档是否相互一致
完整性绑定 didDocumentHashmetadataHashpackageHashpackageVersionhashAlgorithm 本次登记材料是否对应同一版本、同一份内容
业务声明 metadata 能力、端点、授权域和生命周期等资源描述是否完整
授权证明 subjectControlProofregistrationCredential 资源控制方是否授权本次操作;注册节点向根平台转发时不带入已有注册 VC

说明性请求片段如下:

{
  "resourceDid": "did:oan:SKFI:...",
  "resourceType": "skill",
  "didDocument": {"id": "did:oan:SKFI:...", "verificationMethod": []},
  "didDocumentHash": "sha256:...",
  "metadata": {"resourceType": "skill", "authorizedDomains": ["software"]},
  "packageVersion": "1.0.0",
  "packageHash": "sha256:...",
  "metadataHash": "sha256:...",
  "hashAlgorithm": "sha256",
  "registrationCredential": null,
  "subjectControlProof": {"challenge": {}, "proof": {}}
}

注册服务节点应在调用根平台前拒绝资源 DID、DID文档标识、challenge 目标或哈希不一致的请求。未知扩展字段是否保留由协议版本决定;未知核心字段、错误类型或无法解析的结构不得被当作合法请求。

合法请求至少需要同时满足以下关系:didDocument.id == resourceDid;DID文档声明的资源类型与 resourceType 一致;三个哈希字段能够按 hashAlgorithm 解释;控制 challenge 的主体和文档哈希分别对应资源 DID和 didDocumentHash。例如,只有把 resourceTypeskill 改成 agent_service 而不同时更新 DID文档和元数据的请求,应在注册节点本地校验阶段被拒绝。registrationCredential 保留在共享请求模型中用于兼容和记录,但注册节点向根平台构造上游请求时会将其清空,避免把注册节点此前签发的凭证当成根平台验证依据。

注册服务节点向根平台转发的关键交互可以概括为:

sequenceDiagram
    participant Registrar as 注册服务节点
    participant Root as 根平台

    Registrar->>Registrar: 生成请求体哈希和 SignedRequestEnvelope
    Registrar->>Root: POST /root/resources/verify-and-publish
    Root->>Root: 验证节点 DID、授权 VC、受众、路径、时间和 nonce
    Root->>Root: 验证资源控制证明与三类哈希
    alt 验证失败
        Root-->>Registrar: 错误代码与拒绝原因
    else 验证通过
        Root-->>Registrar: resource-verified-and-queued
    end

这段交互只描述注册服务节点与根平台之间的受保护上游调用。客户端提交入口、注册 VC 签发和后续内容分发仍按本章其它小节分别处理;根平台返回成功也不改变发现服务节点尚未完成索引这一事实。

8.3 本地身份初始化与导入

本地身份是客户端保存主体配置、资源控制密钥和必要凭证的材料集合,不是注册服务节点上的用户账户。它用于生成或恢复控制关系,并为具体注册操作签发控制证明。注册节点只能接收验证所需的 DID文档、公钥、证明和登记材料,不应接收主体或资源控制私钥。

资源控制关系可表示为“本地身份持有控制密钥,资源 DID文档发布验证方法,控制证明把一次具体操作绑定到该资源和该文档版本”。因此,本地身份与资源不是同一个对象:一个主体配置可以控制多个资源,但每次注册请求仍应明确一个 resourceDid,并使用与该资源 DID文档匹配的证明。注册节点验证的是公开材料和签名结果,而不是客户端声称“这是我的资源”。

8.3.1 新建本地身份

客户端生成主体控制密钥和主体 DID,保存公开验证材料及本地配置;随后可为每个资源创建独立的资源 DID 和资源控制材料。新建本地身份本身不产生注册节点记录,也不代表资源已获得网络发布状态。

8.3.2 导入本地身份

客户端解析本地身份备份,校验主体 DID、公钥、私钥、资源配置和凭证之间的对应关系。导入成功后可以继续控制已有资源,但本次注册、更新或重试仍应针对目标 DID、版本、哈希和操作目的生成新的证明。

8.3.3 私钥与主体配置

私钥只在客户端签发控制证明或其它受保护签名时使用;主体配置描述主体 DID 与资源的关联。服务端请求和日志可包含公开 DID、公钥、签名、哈希和凭证,但不得包含私钥或可恢复私钥的明文材料。

8.3.4 身份备份与恢复

身份备份应包含恢复控制关系所需的结构化信息,并标明敏感性和版本。恢复后应重新检查密钥对应关系和 DID文档一致性;备份文件存在不等于资源已经登记,恢复失败也不应覆盖客户端已有的有效身份。

8.4 DID Document 草稿生成

客户端根据资源类型、名称和描述、能力标签、授权域、端点、版本、本地身份和控制密钥生成 DID文档。id 必须与 resourceDid 相同,oanMetadata.resourceTypesubjectType 必须与请求一致,验证方法必须提供可解析公钥,服务端点和资源包信息必须与资源元数据绑定。

预览按钮可以生成或复用本地 DID文档并展示校验结果,但不得因为展开预览而发起注册网络请求。若表单、本地身份、高级访问或资源包信息未变化,客户端可以复用已生成文档;影响 DID、文档哈希、版本或控制证明的输入发生变化后,必须重新生成并重新签名。

为避免用户在未改变材料时反复得到不同资源身份,客户端应把生成 DID文档所依赖的表单值、本地身份主体 DID、资源控制配置、端点、授权域、版本和资源包摘要形成内部快照。快照相同且已有预览文档时,点击按钮只切换预览区域的展开状态;快照变化时才重新生成文档和相关哈希。该缓存只属于客户端体验优化,不能替代注册节点对请求材料的再次校验。

8.5 提交前本地校验

提交前至少检查以下条件:本地身份已创建或导入;资源类型已选择;名称、描述、端点、授权域、能力标签和版本等必填项完整;DID 语法和资源类型匹配;DID文档、元数据、资源包及哈希一致;控制 challenge 的目标、用途、文档哈希和 verification method 正确;控制证明可由 DID文档中的公钥验证。错误提示应指出具体缺失项,例如“缺少本地身份”“缺少资源端点”“未选择授权域”或“DID文档哈希不一致”。

预览按钮只执行本地生成和校验,提交按钮在发起请求前复用校验结果;两者都不应在页面打开时自动提交。校验失败不得写入注册节点记录、根平台发布记录或成功注册 VC。

本地校验结果宜按字段返回,便于界面和 SDK 采取确定动作:

{
  "valid": false,
  "errors": [
    {"field": "localIdentity", "code": "required", "message": "缺少本地身份"},
    {"field": "serviceEndpoint", "code": "required", "message": "缺少资源端点"}
  ]
}

valid: false 时不得进入提交请求;网络不可用属于提交阶段错误,不应被伪装成本地字段错误。预览成功只证明当前浏览器能够生成并核验草稿,不能证明注册节点或根平台已经接受该材料。

8.6 资源控制证明验证

注册服务节点应同时验证证明载荷、签名和业务上下文。目标资源 DID、DID文档哈希、验证方法、操作目的、challenge 中的注册服务节点、时间窗口和 nonce 必须与当前请求一致;公钥和签名算法必须可解析。证明缺失、过期、用途不符、目标不符、哈希不符或重复使用时,应在调用根平台前拒绝。

控制证明失败不得产生成功登记状态或注册 VC。可保存挑战 ID、资源 DID、文档哈希、验证方法、验证时间和错误代码用于审计,但不得保存签名私钥。

验证顺序应先检查结构和上下文,再验证签名,最后进入发布调用:

请求可解析
  -> challenge.subjectDid == resourceDid
  -> challenge.didDocumentHash == request.didDocumentHash
  -> challenge.registrarDid == 当前注册服务节点 DID
  -> purpose、issuedAt、expiresAt 和 nonce 合法
  -> verificationMethod 位于 DID文档的 assertionMethod
  -> 解析公钥并验签
  -> 允许继续执行注册流程

任一步失败都应停止后续根平台调用。验签成功只说明签名者掌握对应私钥且签名内容未被修改;节点授权域、资源类型、版本和根平台发布条件仍需分别验证。

8.7 注册节点授权与范围验证

当前注册服务节点会读取自身 DID文档中的授权域,将资源 DID文档中的授权域与请求元数据中的授权域进行一致性检查,再判断节点授权域是否覆盖资源域。授权域必须非空、格式合法、顺序稳定且没有越权;不一致或越权时,应在根平台调用前返回错误。

节点签名密钥只证明请求来自该节点运行边界,节点授权 VC 才证明该节点具有相应角色和范围;资源控制证明则是另一个独立条件。

注册节点向根平台发送的请求由 SignedRequestEnvelope 绑定请求 ID、协议版本、用途、HTTP 方法、路径、受众、时间戳、随机数、请求体哈希和节点 proof。根平台可以据此核对哪个注册服务节点在什么时间、以什么用途提交了哪一份材料。这层节点间签名不替代资源控制证明,也不把注册节点自动变成资源控制者。

8.8 资源类型、元数据、端点与资源包校验

资源类型、DID 语义编码、DID文档元数据、资源元数据和资源包应形成一条一致性链。资源 DID、资源类型、版本、DID文档哈希、元数据哈希和资源包哈希必须相互引用;端点应符合声明协议和格式;能力标签应能由能力标签树或允许的扩展规则解释;授权域不能由自由文本绕过。

当前 validate_shape() 已覆盖 DID 语法、资源类型关系、DID文档标识、资源结构、资源包版本、哈希算法、三类哈希引用、challenge 目标 DID、文档哈希和操作目的。端点是否可达、业务是否安全和资源质量是否满足调用需求,属于后续发布或调用前判断,不能由形状校验替代。

8.9 重复注册与幂等性

业务幂等应以资源 DID、资源类型、版本、DID文档哈希、元数据哈希和资源包哈希判断,而不能以提交时间或 VC 的签发时间判断。请求 ID 和 nonce 用于请求关联、新鲜度和重放防护,不能单独决定两个请求是否属于同一资源版本。

8.9.1 同 DID 重复注册

同 DID 再次提交时,服务端应先验证控制权,再比较版本和哈希。材料完全相同应返回既有登记结果或明确幂等结果;DID 相同但版本或任一哈希不同,应进入同 DID 更新决策;控制证明无效时不得覆盖已有记录。

8.9.2 幂等判断依据

幂等判断至少依赖资源 DID、资源类型、版本、DID文档哈希、元数据哈希和资源包哈希,并应保存请求 ID、处理时间和结果以区分业务重试与新版本。当前注册节点通过按资源 DID 的 upsert 方式写入 SQLite、PostgreSQL 或文件存储,这可以保持当前记录,但不足以单独证明已实现完整的版本级幂等历史。

8.9.3 VC 重发

同一业务版本的重试可以返回已保存注册 VC,也可以按明确策略重新签发内容等价但时间不同的 VC。客户端应依据资源 DID、版本、哈希和状态识别凭证对应版本,不能把新的签发时间当作资源版本更新。

8.9.4 根平台重复发布控制

根平台应使相同 DID、版本和哈希的重复发布产生单一业务结果;不同哈希或版本应进入更新、冲突或拒绝路径。注册服务节点收到上游 HTTP 成功并不足以证明根平台已完成重复发布去重,发布证明和序列记录才是判断依据。

8.10 资源更新与同 DID 版本更新

同 DID 更新保留资源身份,但必须产生新的版本、文档或资源包哈希,并通过 previousVersion 等字段表达前序关系。新版本必须使用当前控制关系生成新的控制证明;旧注册 VC 或旧资源包不能自动授权未来更新。版本递增、并发冲突、历史保留和回滚由注册节点与根平台共同执行,具体发布替换规则见第 9 章。

8.10.1 更新授权验证

验证方必须确认提交者仍由当前 DID 控制关系授权,并检查控制证明绑定新文档哈希、版本、用途和 challenge。只有旧凭证而没有新版本控制证明时,应拒绝更新。

8.10.2 DID Document 更新

更新后的 DID文档仍使用原资源 DID,文档哈希必须进入注册提交和资源包。新增、替换或停用验证方法都需要可验证控制链;无法证明更新由当前控制者授权时,不得替换当前文档。

8.10.3 资源元数据和端点更新

资源描述、能力标签、授权域、协议绑定或端点变化都应形成新的元数据哈希和资源包哈希。扩大授权域不能只修改文字字段,端点可达也不能替代业务安全和调用授权判断。

8.10.4 新版本发布与旧版本处理

新版本被接受后,根平台应明确当前版本、历史版本和旧版本状态,发现服务节点按发布序列同步。旧版本可用于审计或回滚,但不能在查询结果中与最新版本混淆。

8.11 注册 VC 签发与获取

当前参考实现只有在根平台资源验证与发布接口返回成功后,才调用注册凭证生成逻辑,并把注册 VC 写入登记记录和成功响应。注册 VC 的 issuer 是注册服务节点,credential subject 是资源 DID,声明包含资源类型、版本、哈希、授权域和生命周期等登记事实。

8.11.1 VC 签发条件

签发前应完成入口形状校验、资源授权域校验、控制证明处理和根平台请求。客户端本地预览通过、点击提交或注册节点收到请求,都不是单独的签发条件。

8.11.2 VC 返回方式

成功响应当前包含 statusresourceDidresourceTyperegistrationCredentialrootResponse。客户端应保存 VC 原文并与 DID文档、版本和哈希关联;rootResponse 仍需按根平台证明和状态规则解析。

8.11.3 VC 缺失或为空的处理

若登记结果成功但 VC 缺失或为空,客户端应分开记录登记状态和凭证状态,明确提示凭证尚未取得,不能伪造空 VC,也不能把空值当作有效凭证。查询或重试应保留原 DID、版本和哈希。

8.11.4 VC 本地保存

注册 VC 应与资源 DID文档和资源版本建立文件关联。客户端打包下载 VC、DID文档和本地身份备份时,私钥仍属于敏感材料,只能由控制者保管,不得发送到节点或公共存储。

8.12 注册响应与错误处理

当前注册服务节点的处理函数接收 Json<ResourceRegistrationSubmission>,成功时返回动态 JSON。成功响应的稳定核心字段是 statusresourceDidresourceTyperegistrationCredentialrootResponse;其中 rootResponse 保留根平台返回的动态内容,不能被客户端假定为固定的 VC 或全网发布完成标志。

阶段 典型结果 客户端解释
注册节点本地校验 4xx 或结构化错误 请求未进入根平台发布流程,先修正字段、哈希或控制证明
根平台验证并排队 status: resource-verified-and-queued 根平台已验证并建立后续任务,不代表内容分发和发现索引已完成
注册节点登记成功 status: submitted 注册节点已记录登记结果,响应中可能包含注册 VC 和根平台响应
网络或上游暂时失败 5xx、连接错误或超时 依据资源 DID、版本、哈希和请求标识查询状态后再决定是否重试

下面的 handler 关系说明输入和输出的实际类型;它是接口契约的缩略表示,不是可直接替换的完整实现:

async fn register_resource(
    State(state): State<AppState>,
    Json(submission): Json<ResourceRegistrationSubmission>,
) -> ApiResult<serde_json::Value>;

注册节点与根平台之间的 ResourceVerifyAndPublishRequest 还包含 registrarDid、原始登记提交和 upstreamAuth。客户端不应自行构造该内部转发对象,也不应把注册节点的 registrationCredential 当作根平台可信发布证明;错误响应中的 error、状态码和请求关联标识应共同用于判断修正、查询、重试或停止。

结果 含义 客户端处理
成功且有 VC 注册节点完成当前流程并返回注册凭证 保存 VC,另行确认根平台发布和发现状态
成功但 VC 暂缺 登记结果存在但凭证不完整 保留 DID、版本和哈希,查询或重试
校验失败 请求结构、类型、哈希或证明不合法 修正具体字段,不盲目重试
授权失败 节点范围或资源控制权不足 检查授权 VC、授权域和控制关系
上游失败 根平台拒绝或不可用 按可重试性处理,不声明发布成功
网络超时 客户端没有确定响应 保留原材料,查询或使用相同业务材料重试
重复或冲突 已有相同版本或存在不同内容 返回既有结果,或进入更新和冲突处理

当前实现的错误主要通过 HTTP 状态和 error 文本返回;后续稳定协议应补充 request ID、错误码、登记状态、上游状态和可重试标志,使客户端不依赖自由文本猜测网络状态。

建议将响应处理归纳为以下确定性规则:

{
  "status": "submitted",
  "resourceDid": "did:oan:SKFI:...",
  "resourceType": "skill",
  "registrationCredential": null,
  "rootResponse": {"status": "published"}
}

当 HTTP 请求超时而没有响应时,客户端只能记录“结果未知”,保留原 DID、版本和哈希,并通过查询或相同材料重试,不能据此生成新 DID。收到非成功 HTTP 状态时,不得保存为登记成功;收到成功状态但 VC 为空时,应将登记状态与凭证状态分开显示,只有实际拿到并验证的凭证才能作为 VC 文件下载。

8.13 注册审计记录

登记记录至少应关联资源 DID、资源类型、版本、DID文档哈希、元数据哈希、资源包哈希、授权域、注册服务节点、登记 VC、根平台响应摘要、提交时间和处理结果。当前 write_resource_record() 按资源 DID 写入 SQLite、PostgreSQL 或文件存储,因此完整审计实现还应保留操作类型、请求 ID、前后版本和失败原因,避免覆盖记录丢失历史上下文。

审计记录不得保存资源控制私钥、本地身份备份或可恢复秘密。DID、公钥、哈希、挑战 ID、请求 ID、状态和错误代码可以作为追踪证据;审计读取权限必须与公开发现接口分开。

8.14 资源更新授权与同 DID 替换

服务端收到同 DID 新材料后,应依次确认控制证明、版本关系和哈希关系。相同版本同哈希属于幂等重试;相同版本不同哈希属于冲突;新版本带有效前序关系才可进入更新;版本倒退、前序缺失、授权变化未经批准或控制证明无效时应拒绝或转人工处理。注册节点可以保存受理记录,但根平台决定网络发布事实。

替换判断可用下表核对:

DID 版本 内容哈希 控制证明 处理
相同 相同 相同 有效 按同一业务版本幂等处理
相同 相同 不同 有效 作为冲突拒绝,不覆盖当前版本
相同 更新 不同 有效且绑定新材料 按更新流程处理
相同 更新或相同 任意 无效 拒绝,不产生替换副作用
不同 任意 任意 有效 按新的资源登记处理

8.15 提交重试、幂等键与重复处理

节点到根平台的上游请求使用 SignedRequestEnvelope 绑定 request ID、协议版本、用途、方法、路径、受众、请求时间、请求随机数、请求体哈希和 proof;安全层通过 nonce 存储和时间窗口实施重放防护。业务幂等则依赖资源 DID、版本和内容哈希。客户端超时后应保留原材料,优先查询既有结果或使用相同业务材料重试,不能立即生成新 DID 来掩盖未知结果。

8.16 注册速率限制与滥用控制

公开注册入口应限制单位时间请求量、请求体和资源包大小、单来源失败次数、同 DID 冲突次数以及上游转发并发量。控制证明、节点授权和授权域检查应尽早执行,以减少伪造材料造成的存储、网络和计算压力。限流不能把合法的同 DID 幂等查询误判为新版本,也不能通过放宽控制证明换取吞吐量。

当前参考实现明确包含结构校验、授权域覆盖检查、上游请求签名和 nonce 重放防护;反向代理、WAF 或服务级限流若在部署中启用,应在部署文档中注明实际策略、响应码和恢复方式。

注册流程验收清单

  • [ ] 空表单、缺少本地身份、缺少端点或缺少授权域时,客户端能指出具体条件。
  • [ ] 注册服务节点在根平台调用前完成请求形状、资源授权域和控制证明校验。
  • [ ] 根平台失败或网络超时时,客户端不会显示全网发布成功,也不会丢失原 DID 和版本材料。
  • [ ] 成功响应中的注册 VC 能与资源 DID、版本和三个哈希建立对应关系。
  • [ ] 相同 DID、版本和哈希的重试与不同哈希或版本的更新得到不同处理。
  • [ ] 登记、根平台发布、内容分发和发现索引状态能够分别观察和验证。
  • [ ] 审计记录可追踪请求而不包含私钥、本地身份备份或其它敏感秘密。

参考来源

来源 类型 链接
oan-registrar-node 代码仓:注册入口、校验、登记记录和注册 VC https://github.com/OpenAgenet/oan-registrar-node
oan-root-services 代码仓:根平台资源验证与发布接口 https://github.com/OpenAgenet/oan-root-services
oan-protocol-common 代码仓:注册载荷、错误码和跨节点协议类型 https://github.com/wolfbrother/oan-protocol-common
oan-sdk-ts 代码仓:客户端注册材料和注册调用 https://github.com/OpenAgenet/oan-sdk-ts
oan-community-skill 代码仓:注册流程脚本和开发者调用示例 https://github.com/OpenAgenet/oan-community-skill
OAN Yellow Paper arXiv 黄皮书:注册、发布和验证流程 https://arxiv.org/abs/2606.03163
OAN Resource Identity and Discovery IETF 草案:资源身份与注册发现关系 https://datatracker.ietf.org/doc/draft-xu-oan-resource-identity-discovery/
On this page