我的问题是,在将去中心化识别 (DID) 文档发布到 ION 链后,我无法使用短格式 URI 解析该文档。如果您能帮助纠正我或提出一些建议,谢谢。
示例代码
import { anchor, DID, generateKeyPair } from '@decentralized-identity/ion-tools';
// Generate keys and ION DID
let authnKeys = await generateKeyPair();
let did = new DID(..);
// Generate and publish create request to an ION node
let createRequest = await did.generateRequest(0);
//anchor: post and publish DID document to https://beta.ion.msidentity.com/api/v1.0/proof-of-work-challenge
let anchorResponse = await anchor(createRequest);
console.log(anchorResponse)
let uri = await did.getURI();
let shortURI = await did.getURI('short');
console.log("Long URI "+ uri+ "\nShort URI: "+ shortURI);
此代码几乎是从
https://github.com/decentralized-identity/ion-tools
中的 Readme.md 复制而来。底部的方法anchor()
发布并发布请求到ION链,这是比特币链的L2。执行后,短URI和长URI都会被打印,其中短URI只有发布后才能解析。
以前,短 URI 和长 URI 都可以在
https://identity.foundation/ion/explorer
和 https://dev.uniresolver.io/
中解析。我可以从注册表中获取完整定义的 DID 文档。但自 7 月 28 日起解析失败并返回 404。
我的理解是短uri也应该像长URI一样解析到指定文档。
在 DID 文档锚定完成之前,无法解析短 DID。由于 Sidetree 协议使用批处理,并且写入区块链本身存在延迟,因此这可能需要时间。
当您提供 DID(长格式或短格式)时,解析器将检查文档是否已锚定,如果是,它将使用 DID 中的地址信息来获取完整文档。
如果DID文档尚未发布,则可以解码长格式DID的后缀来构造DID文档并返回,因为后缀包含了所有原始服务和验证方法信息。当然,短格式 DID 中缺少后缀,因此无法进行解包。
如果您查看决议响应的
didDocumentMetadata
部分,您可以看到一个标志,指示文档是否已发布。