APIリファレンス: multiGetObjects
32バイトの16進数オブジェクトIDを指定して、1回のバッチリクエストで複数のSuiオブジェクトのオンチェーン詳細およびメタデータを取得します。
このメソッドを使用すると、複数のオブジェクトクエリを1つのネットワーク呼び出しにまとめ、オブジェクトを個別にクエリする場合に比べてレイテンシを低減できます。multiGetObjectsはフルノードのローカル状態から直接処理される読み取り操作であるため、トランザクションを送信したりガスを消費したりすることなく、即座に実行されます。
- クラス:
SuiClient - パッケージ:
@mysten/sui/client - 操作タイプ: 読み取り操作(ガス代不要、ウォレット署名不要)
概要
multiGetObjectsを呼び出すことは、ループ内でgetObjectを呼び出すよりもはるかに効率的です。複数のオブジェクトクエリを1つのリモートプロシージャコール(RPC)にまとめることで、ネットワークレイテンシを低減します。
順次 getObject (N 回の往復通信):
App ── getObject(A) ──► Fullnode ──► App ── getObject(B) ──► Fullnode
バッチ multiGetObjects (1 回の往復通信):
App ──────────── multiGetObjects([A, B, C]) ────────────► Fullnode
App ◄─────────── [ResultA, ResultB, ResultC] ─────────── Fullnode
シグネチャ
client.multiGetObjects(input: MultiGetObjectsParams): Promise<SuiObjectResponse[]>
パラメータ
このメソッドは、以下のプロパティを持つ設定オブジェクトを受け取ります:
| パラメータ | 型 | 必須 | 説明 |
|---|---|---|---|
ids | string[] | はい | 32バイトの16進数オブジェクトIDの配列。 |
options | SuiObjectDataOptions | いいえ | 特定のデータフィールドの表示/非表示を切り替える設定フラグ。要求されたすべてのオブジェクトに適用されます。 |
ほとんどのパブリックRPCノードでは、通常1回のリクエストにつき50個のIDという制限が設けられています。これより大きなバッチを処理する場合は、配列を複数のチャンクに分割する必要があります。
戻り値
SuiObjectResponseオブジェクトの配列を返すPromiseを返します。
配列の順序は、リクエストで渡されたidsの順序と完全に一致します:
[
{
"data": { "objectId": "0xA...", "version": "1" }
},
{
"error": { "code": "notExists", "object_id": "0xB..." }
},
{
"data": { "objectId": "0xC...", "version": "5" }
}
]
使用例
NFTメタデータを一括取得し属性を表示する
NFTのID一覧をクエリし、オンチェーンフィールドと画像URLを表示します:
const objectIds = ['0x123...', '0x456...', '0x789...'];
const results = await client.multiGetObjects({
ids: objectIds,
options: {
showContent: true,
showDisplay: true
}
});
// 結果を処理する
results.forEach((result) => {
if (result.data) {
console.log("見つかった項目:", result.data.display?.data?.name);
} else {
console.warn("アイテムの読み込みに失敗しました:", result.error);
}
});
バッチ処理制限のために大きなIDリストをチャンク化する
ほとんどのパブリックRPCノードでは1回のリクエストにつき50件の上限が適用されるため、大規模なリストにはチャンキングヘルパーを使用します:
import { chunk } from 'lodash'; // または独自のヘルパー関数
const allIds = [/* ... 200個のID配列 ... */];
const CHUNK_SIZE = 50;
const chunks = chunk(allIds, CHUNK_SIZE);
for (const batch of chunks) {
const batchResults = await client.multiGetObjects({
ids: batch,
options: { showType: true }
});
// batchResultsを処理...
}
ベストプラクティス
アイテムごとの部分的な失敗を処理する
エラー時にバッチ全体が停止する可能性がある標準的なデータベースクエリとは異なり、multiGetObjectsはすべてのIDに対して結果を返します。1つのオブジェクトで障害が発生した場合(例えばトランザクションによって削除された場合など)でも、バッチ内の残りの項目は正常に返されます。返された配列の各項目について、常にdataとerrorを確認してください。
インデックス順序の保持を活用する
SDKは入力配列のインデックス順序を維持します:
results[0]はids[0]に対応しますresults[1]はids[1]に対応します
この順序を利用して、結果を元のデータソースに直接マッピングできます。
関連情報
getObject: 個々のオンチェーンオブジェクトの詳細を取得します。getOwnedObjects: 特定のアドレスが所有するすべてのオブジェクトを一覧表示します。- オブジェクトデータの取得方法: Node.jsスクリプトで読み取り操作を実装するステップバイステップのチュートリアル。
- SuiClientのアーキテクチャ:
SuiClientおよび読み取り操作の概念的な概要。