跳到主要內容

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

範例

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 中,讓任何人都可以驗證簽名。