PutNftObjectCommand は、デジタルアセット(画像、ビデオ、オーディオファイルなど)をアップロードすると同時に、関連する DID ドキュメントを作成または更新するために設計された特殊なコマンドです。このプロセスは、分散型識別子(DID)を特定のデータ片に効果的にリンクさせます。これは、DID Spaces 内で非代替性トークン(NFT)やその他の検証可能なデジタルアセットを管理する上で重要なステップです。
このコマンドは、いくつかの複雑なステップを自動化します。アセットのハッシュを計算し、アセットの場所と整合性ハッシュを指定する有効な DID ドキュメントを構築し、所有権を証明するためにコントローラーウォレットを使用してドキュメントに署名します。その後、アセットと署名済みドキュメントを単一のリクエストにバンドルして DID Space に送信します。
ワークフローの概要
以下の図は、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 に含まれており、誰でも署名を検証できます。