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

API リファレンス: multiGetObjects

1 回のネットワーク リクエストで多数のオブジェクトの詳細を取得します。

クラス: SuiClient メソッドタイプ: 読み取り操作、ガス代不要


概要

multiGetObjects を使用することは、getObject をループ内で呼び出すよりもはるかに効率的です。多数のクエリを単一の RPC(リモート プロシージャ コール)にまとめることで、ネットワーク レイテンシを削減します。

シグネチャ

client.multiGetObjects(input: MultiGetObjectsParams): Promise<SuiObjectResponse[]>

パラメーター

このメソッドは、以下のプロパティを含む構成オブジェクトを受け入れます。

パラメータータイプ必須説明
idsstring[]はい32 バイトの 16 進数オブジェクト ID の配列。
optionsSuiObjectDataOptionsいいえ特定のデータ フィールドを切り替えるための構成フラグ。リクエストされたすべてのオブジェクトに適用されます。
注記

ほとんどのパブリック RPC ノードでは、通常 1 リクエストあたり 50 個の ID という制限が設けられています。より大きなバッチの場合は、配列をチャンク(塊)に分割する必要があります。


戻り値

SuiObjectResponse オブジェクトの配列に解決される Promise を返します。

配列の順序は、リクエストで渡された ids の順序と正確に一致します。

[
{
"data": { "objectId": "0xA...", "version": "1", ... }
},
{
"error": { "code": "notExists", "object_id": "0xB..." }
},
{
"data": { "objectId": "0xC...", "version": "5", ... }
}
]

使用例

シナリオ A: メタデータの一括取得

NFT(非代替性トークン)の ID リストがあり、それらの名前を表示する必要があるとします。

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);
}
});

シナリオ B: チャンク分割による大量のリストの処理

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 を処理する...
}

ベストプラクティス

1. 部分的な失敗を常に処理する

エラーが発生するとバッチ全体が停止する可能性のある標準的なデータベース クエリとは異なり、multiGetObjectsすべての ID に対して結果を返します。1 つのオブジェクトが失敗した場合(例:削除されていた場合)でも、バッチ内の他のオブジェクトは正常に返されます。返された配列の各アイテムについて、dataerror を確認する必要があります。

2. 順序の保持

SDK は、出力配列が入力配列のインデックスと一致することを保証します。

  • results[0]ids[0] に対応します。
  • results[1]ids[1] に対応します。

これを利用して、結果を元のデータ ソースにマッピングし直すことができます。