オブジェクトデータの取得方法
対象読者: Suiでの読み取り操作を初めて実装する開発者。
目標: Suiのdevnetから生のオブジェクトデータを取得・検証するためのNode.jsスクリプトを作成する。
概要
このチュートリアルでは、SuiClientを使用して読み取り操作を行います。Sui devnetに対してオンチェーンの非代替性トークン(NFT)オブジェクトをクエリし、その属性を確認します。
構築するもの:
ネットワークに接続し、IDを指定してオブジェクトをリクエストし、JSONレスポンスを出力する軽量なNode.jsスクリプト。
前提条件
- Node.js: v18.0.0以降。
- パッケージマネージャー:
npmまたはyarn。 - ターミナル: 基本的なコマンドライン操作スキル。
1. プロジェクトのセットアップ
-
新しいディレクトリを作成して移動します:
Terminalmkdir sui-data-fetcher && cd sui-data-fetcher -
Nodeプロジェクトを初期化し、ESモジュール用に設定します:
Terminalnpm init -ynpm pkg set type="module" -
Sui TypeScript SDKをインストールします:
Terminalnpm 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パラメータにもお気づきになったことでしょう。利用可能なクエリパラメータを詳しく学び、学習を進めるには:
- 利用可能なすべてのレスポンスオプションとフィルターについては、
getObjectAPIリファレンスを参照してください。 - バッチクエリについては、複数のオブジェクトを取得する方法および所有オブジェクトを取得する方法を確認してください。
- 次のチュートリアル「書き込み操作を使用したトランザクションの送信」に進み、オンチェーンの状態変更を構築・実行してください。