API リファレンス: getOwnedObjects
特定のアドレスが所有するオブジェクトのリストを取得します。
クラス: SuiClient
メソッドタイプ: 読み取り操作、ガス代不要
概要
このメソッドは、「インベントリ(持ち物)」や「ウォレット」画面を表示するために使用されます。1 つのアドレスが数千のオブジェクトを所有する可能性があるため、このメソッドは結果を**ページ分割(パジネーション)**して返します。
シグネチャ
client.getOwnedObjects(input: GetOwnedObjectsParams): Promise<PaginatedObjectsResponse>
パラメーター
| パラメーター | タイプ | 必須 | 説明 |
|---|---|---|---|
owner | string | はい | 確認するウォレットの 32 バイトのアドレス。 |
filter | SuiObjectDataFilter | いいえ | タイプまたはパッケージで結果をフィルタリングします(詳細は以下を参照)。 |
options | SuiObjectDataOptions | いいえ | showType などの詳細を含めるためのフラグ。 |
cursor | string | いいえ | 前回のレスポンスからの nextCursor(ページ分割用)。 |
limit | number | いいえ | 返すアイテムの最大数。デフォルトは 50 です。 |
SuiObjectDataFilter
filter パラメーターは強力なフィルタリング機能を提供します。ユーザーのインベントリ全体をダウンロードする代わりに、「コインのみを表示する」といった特定の条件を指定できます。
| フィルターキー | 値のタイプ | 説明 |
|---|---|---|
MatchAll | Filter[] | 論理積 (AND)。オブジェクトは提供されたすべてのフィルターに一致する必要があります。 |
MatchAny | Filter[] | 論理和 (OR)。オブジェクトは提供されたいずれかのフィルターに一致すれば十分です。 |
StructType | string | Move Struct タイプ(例: 0x2::sui::SUI)との完全一致。 |
Package | string | 特定のパッケージ ID で定義されたすべてのオブジェクトとの一致。 |
戻り値
PaginatedObjectsResponse を返します。
{
"data": [
{ "data": { "objectId": "0xA...", "type": "..." } },
{ "data": { "objectId": "0xB...", "type": "..." } }
],
"hasNextPage": true,
"nextCursor": "0x12345...ResultCursor"
}
data: このページのオブジェクトを保持する配列です。hasNextPage: 次に取得するオブジェクトがまだある場合はtrueになります。nextCursor: 次のページを取得するために、次回の呼び出しでcursorパラメーターに渡す必要がある文字列です。
使用例
シナリオ A: 基本的なインベントリ取得(最初のページ)
アドレスが所有する最初の 5 つのオブジェクトを取得します。
const response = await client.getOwnedObjects({
owner: '0xMyAddress...',
limit: 5,
options: { showType: true }
});
response.data.forEach(item => {
console.log(`ID: ${item.data.objectId}, タイプ: ${item.data.type}`);
});
シナリオ B: 特定のアセットのフィルタリング
ユーザーが所有するコインやその他のアイテムを無視して、「Sui DevNet NFT」のみを取得します。
const response = await client.getOwnedObjects({
owner: '0xMyAddress...',
filter: {
StructType: '0x2::devnet_nft::DevNetNFT'
},
options: { showContent: true }
});
シナリオ C: 完全なページ分割、すべての取得
while ループを使用して、アカウントが所有するすべてのオブジェクトをページごとに取得します。
let hasNextPage = true;
let nextCursor = null;
const allObjects = [];
while (hasNextPage) {
const response = await client.getOwnedObjects({
owner: '0xMyAddress...',
cursor: nextCursor
});
allObjects.push(...response.data);
hasNextPage = response.hasNextPage;
nextCursor = response.nextCursor;
}
console.log(`取得したオブジェクトの総数: ${allObjects.length}`);
よくあるエラー
| エラーコード | 原因 | 解決策 |
|---|---|---|
cursor_invalid | cursor に渡された文字列が無効であるか、別のクエリのものです。 | 前回の呼び出しで nextCursor に返された文字列をそのまま渡しているか確認してください。 |
limit_exceeded | ノードが許可する制限(例: 1000)より高い制限をリクエストした場合。 | 制限を下げてください。標準的な最大値は通常 50 です。 |
関連項目
getObject: ID で単一のオブジェクトを取得します。multiGetObjects: 1 回のリクエストで、ID を指定して複数のオブジェクトを取得します。