PutNftObjectCommand 是一个专门的命令,旨在上传数字资产(如图像、视频或音频文件),并同时创建或更新其关联的 DID 文档。此过程有效地将去中心化标识符(DID)链接到特定的数据片段,这是在 DID 空间内管理非同质化代币(NFT)和其他可验证数字资产的关键步骤。
该命令自动化了几个复杂的步骤:它计算资产的哈希值,构建一个有效的 DID 文档,指定资产的位置和完整性哈希,并使用控制器钱包签署该文档以证明所有权。然后,它将资产和已签署的文档捆绑到对 DID空间的单个请求中。
工作流程概览
下图说明了使用 PutNftObjectCommand 时的典型工作流程:

输入
PutNftObjectCommand 需要向其构造函数提供以下输入参数。
- did
string(required) — 资产的 DID。这是上传的对象和 DID 文档将与之关联的标识符。 - controller
WalletObject(required) — 对资产 DID 拥有控制权的钱包对象。该钱包将用于签署生成的 DID 文档,以证明所有权。 - chainHost
string(required) — 区块链浏览器 API 的基础 URL(例如:'https://beta.abtnetwork.io/api/')。这用于在 DID 文档中构建浏览器服务端点。 - display
object(required) — 包含显示资产配置的对象。- key
string(required) — 资产的文件名(例如:'my-nft-image.png')。不应包含任何路径。 - data
Readable(required) — 代表资产文件内容的可读流。
- key
输出
该命令返回一个标准的输出对象。
- statusCode
number— 响应的 HTTP 状态码。值为200表示 NFT 对象及其 DID 文档已成功上传。 - data
void— 请求成功时,data 字段为空。
示例
以下是如何使用 PutNftObjectCommand 上传 NFT 资产的完整示例。
首先,请确保您有一个要上传的文件,例如 my-nft.png。
Example
import { SpaceClient, PutNftObjectCommand } from '@blocklet/did-space-js';
import getWallet from '@blocklet/sdk/lib/wallet';
import * as fs from 'fs';
import * as path from 'path';
async function uploadNftAsset() {
const wallet = getWallet(); // 假设环境中有一个可用的钱包
const client = new SpaceClient({
endpoint: 'https://www.didspaces.com/app/api/space/...',
wallet: wallet,
});
// 1. 准备 NFT 资产的文件流
const filePath = path.join(__dirname, 'my-nft.png');
// 在创建流之前,确保文件存在
if (!fs.existsSync(filePath)) {
console.error(`File not found: ${filePath}`);
// 作为占位符,创建一个虚拟文件以供示例运行
fs.writeFileSync(filePath, 'This is a dummy NFT file.');
}
const fileStream = fs.createReadStream(filePath);
// 2. 定义命令输入
const commandInput = {
// 您正在上传的资产的 DID
did: 'z8iZnaYxnkMD5AKRjTKiCb8pQr1ut8UantAcf',
// 控制此资产 DID 的钱包
controller: wallet,
// 区块链浏览器的主机
chainHost: 'https://beta.abtnetwork.io/api/',
display: {
key: 'my-nft.png',
data: fileStream,
},
};
// 3. 创建并发送命令
const command = new PutNftObjectCommand(commandInput);
const output = await client.send(command);
// 4. 检查结果
if (output.statusCode === 200) {
console.log('NFT asset uploaded successfully!');
} else {
console.error('Failed to upload NFT asset:', output);
}
}
uploadNftAsset();最佳实践
DID 文档自动化
PutNftObjectCommand 的主要优势在于其对 DID 文档创建和签名的自动化。当您发送该命令时,它会在内部执行以下操作:
哈希计算
它读取
data流并计算文件内容的 SHA3-256 哈希值。此哈希值嵌入到 DID 文档中,以保证资产的完整性。文档构建
它组装一个包含基本元数据的 DID 文档,其中包括用于访问显示资产和在区块浏览器上查看它的服务端点。
签名
它使用提供的
controller钱包的私钥对整个 DID 文档进行签名。此加密签名是可验证的,并证明控制器授权了此特定版本的文档。
控制器钱包
controller 钱包是安全和所有权模型的基础。请确保提供的钱包有权管理指定的资产 did。该钱包的公钥包含在 DID 文档的 verificationMethod 中,允许任何人验证签名。