メインコンテンツまでスキップ

オブジェクトデータの取得方法

対象読者: Suiでの読み取り操作を初めて実装する開発者。
目標: Suiのdevnetから生のオブジェクトデータを取得・検証するためのNode.jsスクリプトを作成する。


概要​

このチュートリアルでは、SuiClientを使用して読み取り操作を行います。Sui devnetに対してオンチェーンの非代替性トークン(NFT)オブジェクトをクエリし、その属性を確認します。

構築するもの:
ネットワークに接続し、IDを指定してオブジェクトをリクエストし、JSONレスポンスを出力する軽量なNode.jsスクリプト。

前提条件​

  • Node.js: v18.0.0以降。
  • パッケージマネージャー: npmまたはyarn。
  • ターミナル: 基本的なコマンドライン操作スキル。

1. プロジェクトのセットアップ​

  1. 新しいディレクトリを作成して移動します:

    Terminal
    mkdir sui-data-fetcher && cd sui-data-fetcher
  2. Nodeプロジェクトを初期化し、ESモジュール用に設定します:

    Terminal
    npm init -y
    npm pkg set type="module"
  3. Sui TypeScript SDKをインストールします:

    Terminal
    npm install @mysten/sui

2. クライアントの初期化​

index.jsという名前のファイルを作成します。まずクライアントをインポートし、devnetに接続します。

index.js
import { SuiClient, getFullnodeUrl } from '@mysten/sui/client';

// 設定
const NETWORK = 'devnet';

// 1. クライアントの初期化
// getFullnodeUrlは'devnet'の正しいRPCエンドポイントを自動的に解決します
const client = new SuiClient({
url: getFullnodeUrl(NETWORK),
});

console.log(`✅ Connected to Sui ${NETWORK}`);

3. クエリロジックの作成​

既知の「devnet NFT」オブジェクトをクエリします。

注記

devnetでは、ネットワークワイプによってオブジェクトが定期的に削除されます。以下のIDでエラーが発生した場合は、Sui Explorerから最新のオブジェクトIDを取得してください。

index.jsに以下のコードを追加します:

index.js
// devnet上の既知のオブジェクトID(NFTの例)
const TARGET_OBJECT_ID = '0x7d6539b7a423b035109b823e20c641c73defd23b8f3107b38d1d368688c2797c';

async function fetchObjectData() {
try {
console.log(`🔍 オブジェクトを照会中: ${TARGET_OBJECT_ID}...`);

// 2. フェッチの実行
const response = await client.getObject({
id: TARGET_OBJECT_ID,
// "options"はノードが返すデータの量を決定します。
// ペイロードを小さく保つため、content(フィールド)とtypeのみを要求します。
options: {
showContent: true,
showType: true
}
});

// 3. レスポンスの処理
if (response.error) {
throw new Error(`オブジェクトが見つかりません: ${response.error.code}`);
}

console.log('--- オブジェクトデータ ---');
console.dir(response.data, { depth: null, colors: true });

} catch (err) {
console.error('❌ クエリが失敗しました:', err.message);
}
}

fetchObjectData();

4. 実行と確認​

ターミナルでスクリプトを実行します:

Terminal
node index.js

出力の理解​

以下のようなJSON構造が表示されます:

Output
{
"objectId": "0x7d...",
"version": "120",
"digest": "AuF...",
"type": "0x2::devnet_nft::DevNetNFT",
"content": {
"dataType": "moveObject",
"fields": {
"name": "Sui DevNet NFT",
"description": "An NFT created by the Sui DevNet",
"url": "ipfs://..."
}
}
}
  • digest: オブジェクトのバージョンを検証するハッシュ。
  • type: Move言語固有の型定義(Package::Module::Type)。
  • content.fields: チェーン上に保存されている実際のデータ(NFTの名前、説明、画像URLなど)。

次のステップ​

生データの取得に成功しました。コード内のoptionsパラメータにもお気づきになったことでしょう。利用可能なクエリパラメータを詳しく学び、学習を進めるには: