# 旧 OpenCerts 与新 TrustVC 校验不同：按格式定位身份、撤销和空白字段

整理：链小知（AI 辅助）
资料核对日期：2026-10-12
引用地址：https://lianxiaozhi.com/tools/guides/opencerts-oa-trustvc-format-status-troubleshoot
难度：进阶
核验方式：官方文档整理，未执行真实账户操作

从原文档/验证日志辨认 OA 与 W3C 路径，排查 DNS、DID、状态列表和 renderer 包装问题，不把迁移文档当已完成机构迁移。

## 使用工具
- [OpenCerts](https://lianxiaozhi.com/tools/opencerts) · [官方入口](https://opencerts.io/)

## 前置条件
- 准备授权的已有脱敏文档结构、验证fragment/错误、应用/库锁定版本、环境配置和renderer字段记录；仅查看已有材料，不上传、发行、撤销、签名或请求业务网络。
- 范围为OpenCerts产品v3迁移指南及TrustVC固定250079…包2.15.4；旧证书不需持有人修改，机构迁移日期是指导。缺部署/网络/结果时保留未知。

## 1. 分别记录产品、文档和 SDK 版本

列OpenCerts界面/产品版本、OA wrapped v2/v3或W3C VC格式、@trustvc/trustvc锁定包版本和原验证时间。当前产品v3使用W3C VC2.0；OA wrapped v3仍是另一格式，不能因数字3相同合并。

固定core.verifyDocument用isWrappedV2/V3判OA，其它走W3C verifiers，返回fragment数组；不认识的对象被路由不表示有效W3C。固定2.15.4与用户包/官网部署不同，不按main源码替换真实版本记录。

核对结果：产品/格式/包版本各自明确，错误分支未误判迁移成功。
依据：[OpenCerts v3：OA 到 TrustVC](https://docs.opencerts.io/docs/migrations/oa_to_trustvc)
依据：[TrustVC 固定 verifyDocument 路由](https://raw.githubusercontent.com/TrustVC/trustvc/25007968939db4c40231fcfea8b426e33892e6d9/src/core/verify.ts)
依据：[TrustVC 固定包版本与访问边界](https://raw.githubusercontent.com/TrustVC/trustvc/25007968939db4c40231fcfea8b426e33892e6d9/package.json)

## 2. 核旧 OA 身份与链配置，保留兼容代码边界

对OA已有结果查看issuers[].documentStore或certificateStore、identityProof.location/type及所用链/Provider；同名DocumentStore不足以识别机构。主网/测试网、地址错误、contract notfound或RPC失败保留原错，不当篡改/撤销。

旧Verifier文档和固定OpenCert兼容代码仍有Registry分支，但官网称Registryceased；没有DNS身份或旧registry证据时应标身份未证实，不能用一个SKIPPED代替其它issuer全部通过，也不新调用链查询补造记录。

核对结果：旧OA的身份和链范围可追溯，兼容逻辑不被当当前注册服务。
依据：[OpenCerts Verifier：旧 Registry 规则](https://docs.opencerts.io/docs/verifier)
依据：[TrustVC 固定 OpenCert 验证汇总与旧 Registry](https://raw.githubusercontent.com/TrustVC/trustvc/25007968939db4c40231fcfea8b426e33892e6d9/src/open-cert/verify.ts)
依据：[TrustVC 错误文案与旧链条件](https://raw.githubusercontent.com/TrustVC/trustvc/25007968939db4c40231fcfea8b426e33892e6d9/src/utils/errorMessages/VerificationErrorMessages.ts)
依据：[OpenCerts v3：OA 到 TrustVC](https://docs.opencerts.io/docs/migrations/oa_to_trustvc)

## 3. 核 W3C issuer 与 DID 方法，区别解析和签名

W3C原issuer可'did:web:机构域名'或对象id，保留准确原字符串。核proof.verificationMethod的DID主体与issuerId；固定实现不一致返回INVALID，即使网页能显示issuer.name也不算匹配。

did:web域根对应/.well-known/did.json，路径DID对应/department-a/did.json等；已有解析日志中HTTPS/CORS/loader读取失败可让身份片段失败。固定实现还接受did:key自证，不能概括所有W3C必须DNS域名；解析、签名完整性和机构认可继续分开。

核对结果：DID主体与解析来源相符，身份失败不被用显示名覆盖。
依据：[OpenCerts v3：OA 到 TrustVC](https://docs.opencerts.io/docs/migrations/oa_to_trustvc)
依据：[TrustVC W3CIssuerIdentity：DID 对齐与解析](https://raw.githubusercontent.com/TrustVC/trustvc/25007968939db4c40231fcfea8b426e33892e6d9/src/verify/fragments/issuer-identity/w3cIssuerIdentity.ts)
依据：[TrustVC 固定 verifyDocument 路由](https://raw.githubusercontent.com/TrustVC/trustvc/25007968939db4c40231fcfea8b426e33892e6d9/src/core/verify.ts)

## 4. 按 credentialStatus 拆出目的、索引和结果

对W3C记录保存credentialStatus.type、statusPurpose、statusListIndex、statusListCredential；多项status逐项列出，不按credentialStatus.id末尾数字猜真实index。原索引按字符串保留，不替换或翻转任何位。

列表是托管的已签VC，0/false表示相应revocation或suspension标志未置，1/true表示置位。固定状态fragment先处理error→ERROR，再全部false→VALID，否则INVALID；网络/格式错不能填false。无/空status可由EmptyStatus给VALID，但结论只能是未配置该查询，不保证不可撤销/永久有效。

核对结果：每项状态目的、原索引/URL与错误或置位结果完整，没有ERROR→active。
依据：[OpenCerts v3：OA 到 TrustVC](https://docs.opencerts.io/docs/migrations/oa_to_trustvc)
依据：[TrustVC W3CCredentialStatus：VALID、INVALID、ERROR](https://raw.githubusercontent.com/TrustVC/trustvc/25007968939db4c40231fcfea8b426e33892e6d9/src/verify/fragments/document-status/w3cCredentialStatus.ts)
依据：[TrustVC EmptyStatus：缺撤销配置边界](https://raw.githubusercontent.com/TrustVC/trustvc/25007968939db4c40231fcfea8b426e33892e6d9/src/verify/fragments/document-status/w3cEmptyCredentialStatus/index.ts)

## 5. 定位 renderer 的字段搬移而不重新签发

若验证记录与展示不同，核旧OA $template.url/name和新W3C renderMethod[0].id/templateName；证书数据从top-level转credentialSubject，issuer/dates仍在外。姓名/课程空白可能是旧模板读document.recipient而新字段在credentialSubject.recipient。

官方getDocumentData将W3C和OA v3取credentialSubject，OA v2 wrapped用getDataV2；该helper也能显示raw预览，因此渲染修好不是签名通过。Renderer文案“旧证书neverexpire”不能覆盖validUntil字段或撤销结果，不把有效期删掉。

核对结果：空白字段绑定具体路径/模板版本，格式化展示与验证分别记录。
依据：[OpenCerts Renderer：原始字段与新包装](https://docs.opencerts.io/docs/migrations/renderer_w3c_vc)
依据：[OpenCerts v3：OA 到 TrustVC](https://docs.opencerts.io/docs/migrations/oa_to_trustvc)

## 6. 按原 fragment 与配置提交故障清单

报告含格式/版本、完整性/身份/状态三类原status/name/reason、DID或旧Store来源、有效期、renderer路径与缺证。verifyDocument options可有documentLoader/rpcProviderUrl/provider，固定provider覆盖URL且为ethers v5；这不保证每W3C会发链请求或兼容任意节点。

只交付已取得的原记录和错误范围；不运行signW3C、issueDID、revoke、setStatus或修改凭证。旧OA继续接受与机构应2027-03-31迁移为官方指引，未证明该机构迁移或该凭证当前验收。

核对结果：读者能按版本/字段/访问路径定位故障，签发和状态变更均未混入诊断。
依据：[TrustVC 固定 verifyDocument 路由](https://raw.githubusercontent.com/TrustVC/trustvc/25007968939db4c40231fcfea8b426e33892e6d9/src/core/verify.ts)
依据：[TrustVC 固定包版本与访问边界](https://raw.githubusercontent.com/TrustVC/trustvc/25007968939db4c40231fcfea8b426e33892e6d9/package.json)
依据：[TrustVC 错误文案与旧链条件](https://raw.githubusercontent.com/TrustVC/trustvc/25007968939db4c40231fcfea8b426e33892e6d9/src/utils/errorMessages/VerificationErrorMessages.ts)
依据：[OpenCerts FAQ：三类验证与呈交者](https://dev.opencerts.io/faq/)
依据：[OpenCerts v3：OA 到 TrustVC](https://docs.opencerts.io/docs/migrations/oa_to_trustvc)

## 常见错误
- OA文档v3与OpenCerts产品v3/W3C不是同一版本维度。
- EmptyStatus VALID不查列表；enum404/500也不能直接当真实HTTP状态。
- 迁移示例及源码不会证明具体机构完成迁移、任何网络可用或无费用。

## 完成检查
- 形成两格式的身份、状态、渲染和错误对照，保留当前部署/网络缺证。
- 仅documentation；无私人文件验证、业务查询、签发/撤销或签名。

## 相关知识
- [原始、解码和整理后的链上数据有什么区别？](https://lianxiaozhi.com/learn/raw-decoded-curated-data)
- [把数据上链，与只保存数据哈希有什么区别？](https://lianxiaozhi.com/learn/data-onchain-vs-offchain)

## 官方依据
- [OpenCerts v3：OA 到 TrustVC](https://docs.opencerts.io/docs/migrations/oa_to_trustvc)
- [TrustVC 固定 verifyDocument 路由](https://raw.githubusercontent.com/TrustVC/trustvc/25007968939db4c40231fcfea8b426e33892e6d9/src/core/verify.ts)
- [TrustVC 固定包版本与访问边界](https://raw.githubusercontent.com/TrustVC/trustvc/25007968939db4c40231fcfea8b426e33892e6d9/package.json)
- [OpenCerts Verifier：旧 Registry 规则](https://docs.opencerts.io/docs/verifier)
- [TrustVC 固定 OpenCert 验证汇总与旧 Registry](https://raw.githubusercontent.com/TrustVC/trustvc/25007968939db4c40231fcfea8b426e33892e6d9/src/open-cert/verify.ts)
- [TrustVC 错误文案与旧链条件](https://raw.githubusercontent.com/TrustVC/trustvc/25007968939db4c40231fcfea8b426e33892e6d9/src/utils/errorMessages/VerificationErrorMessages.ts)
- [TrustVC W3CIssuerIdentity：DID 对齐与解析](https://raw.githubusercontent.com/TrustVC/trustvc/25007968939db4c40231fcfea8b426e33892e6d9/src/verify/fragments/issuer-identity/w3cIssuerIdentity.ts)
- [TrustVC W3CCredentialStatus：VALID、INVALID、ERROR](https://raw.githubusercontent.com/TrustVC/trustvc/25007968939db4c40231fcfea8b426e33892e6d9/src/verify/fragments/document-status/w3cCredentialStatus.ts)
- [TrustVC EmptyStatus：缺撤销配置边界](https://raw.githubusercontent.com/TrustVC/trustvc/25007968939db4c40231fcfea8b426e33892e6d9/src/verify/fragments/document-status/w3cEmptyCredentialStatus/index.ts)
- [OpenCerts Renderer：原始字段与新包装](https://docs.opencerts.io/docs/migrations/renderer_w3c_vc)
- [OpenCerts FAQ：三类验证与呈交者](https://dev.opencerts.io/faq/)
