メインコンテンツへスキップ

PutNftObjectCommand

PutNftObjectCommand は、デジタルアセット(画像、ビデオ、オーディオファイルなど)をアップロードすると同時に、関連する DID ドキュメントを作成または更新するために設計された特殊なコマンドです。このプロセスは、分散型識別子(DID)を特定のデータ片に効果的にリンクさせます。これは、DID Spaces 内で非代替性トークン(NFT)やその他の検証可能なデジタルアセットを管理する上で重要なステップです。

このコマンドは、いくつかの複雑なステップを自動化します。アセットのハッシュを計算し、アセットの場所と整合性ハッシュを指定する有効な DID ドキュメントを構築し、所有権を証明するためにコントローラーウォレットを使用してドキュメントに署名します。その後、アセットと署名済みドキュメントを単一のリクエストにバンドルして DID Space に送信します。

ワークフローの概要

以下の図は、PutNftObjectCommand を使用する際の典型的なワークフローを示しています。

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) — アセットファイルの内容を表す読み取り可能なストリーム。

出力

このコマンドは、標準の出力オブジェクトを返します。

  • statusCode number — レスポンスの HTTP ステータスコード。200 の値は、NFT オブジェクトとその DID ドキュメントが正常にアップロードされたことを示します。
  • data void — リクエストが成功した場合、data フィールドは空です。

以下は、PutNftObjectCommand を使用して NFT アセットをアップロードする方法の完全な例です。

まず、アップロードするファイル(例:my-nft.png)があることを確認してください。

Example

typescript
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 ドキュメントの作成と署名を自動化することです。コマンドを送信すると、内部で以下のアクションが実行されます。

  1. ハッシュ化

    data ストリームを読み取り、ファイルコンテンツの SHA3-256 ハッシュを計算します。このハッシュは DID ドキュメントに埋め込まれ、アセットの完全性を保証します。

  2. ドキュメントの構築

    表示アセットへのアクセスやブロックエクスプローラーでの表示のためのサービスエンドポイントなど、重要なメタデータを含む DID ドキュメントを組み立てます。

  3. 署名

    提供された controller ウォレットの秘密鍵を使用して、DID ドキュメント全体に署名します。この暗号署名は検証可能であり、コントローラーがこの特定のバージョンのドキュメントを承認したことを証明します。

コントローラーウォレット

controller ウォレットは、セキュリティと所有権モデルの基本です。提供されたウォレットが、指定されたアセット did を管理する権限を持っていることを確認してください。このウォレットの公開鍵は DID ドキュメントの verificationMethod に含まれており、誰でも署名を検証できます。