मुख्य कंटेंट तक स्किप करें

एपीआई संदर्भ: getOwnedObjects

किसी विशिष्ट 32-बाइट Sui वॉलेट पते के स्वामित्व वाली ऑन-चेन ऑब्जेक्ट्स की एक पेजिनेटेड सूची प्राप्त करता है।

वॉलेट डैशबोर्ड, उपयोगकर्ता इन्वेंट्री स्क्रीन, और टोकन बैलेंस सूचियों को भरने के लिए इस मेथड का उपयोग करें। क्योंकि एक ही खाता हजारों ऑब्जेक्ट्स रख सकता है, Sui JSON-RPC API कर्सर-आधारित पेजिनेशन का उपयोग करके स्वामित्व वाले ऑब्जेक्ट्स को अलग-अलग पेजों में लौटाता है। क्योंकि getOwnedObjects एक रीड ऑपरेशन है जो सीधे फुलनोड लोकल स्टेट से परोसा जाता है, यह लेनदेन सबमिट किए बिना या गैस का उपभोग किए बिना तुरंत निष्पादित होता है।

  • क्लास: SuiClient
  • पैकेज: @mysten/sui/client
  • ऑपरेशन प्रकार: रीड ऑपरेशन (कोई गैस नहीं, कोई वॉलेट हस्ताक्षर नहीं)

अवलोकन​

getOwnedObjects को कॉल करने पर, फुलनोड इंडेक्स से उन ऑब्जेक्ट्स को क्वेरी किया जाता है जिनकी मालिकी टारगेट एड्रेस (AddressOwner) को सौंपी गई है। उच्च लेटेंसी और नेटवर्क टाइमआउट से बचने के लिए, फुलनोड एक ही रिस्पॉन्स में पूरी इन्वेंट्री वापस करने के बजाय परिणामों को पेजिनेट करते हैं।

पेजिनेशन लूप का विज़ुअलाइज़ेशन​

कर्सर पेजिनेशन फ़्लोचार्ट

हस्ताक्षर​

हस्ताक्षर
client.getOwnedObjects(input: GetOwnedObjectsParams): Promise<PaginatedObjectsResponse>

पैरामीटर्स​

यह मेथड निम्नलिखित प्रॉपर्टीज़ वाला एक कॉन्फ़िगरेशन ऑब्जेक्ट स्वीकार करता है:

पैरामीटरप्रकारआवश्यकविवरण
ownerstringहाँटारगेट वॉलेट का 32-बाइट हेक्साडेसिमल पता।
filterSuiObjectDataFilterनहींप्रकार, पैकेज, या मॉड्यूल के अनुसार परिणामों को फ़िल्टर करने के मानदंड।
optionsSuiObjectDataOptionsनहींअतिरिक्त विवरण शामिल करने के लिए फ़्लैग (उदाहरण के लिए, showType, showContent, showDisplay)।
cursorstring | nullनहींअगले पेज को प्राप्त करने के लिए पिछले प्रतिक्रिया से nextCursor टोकन।
limitnumberनहींप्रति पेज लौटाए जाने वाले अधिकतम आइटम (डिफ़ॉल्ट और अधिकतम आमतौर पर सार्वजनिक RPC नोड्स पर 50 होता है)।

SuiObjectDataFilter​

filter पैरामीटर fullnode पर क्वेरी को सीमित करता है, जिससे बैंडविड्थ और क्लाइंट-साइड प्रोसेसिंग की बचत होती है:

फ़िल्टर कुंजीमान प्रकारविवरण
MatchAllSuiObjectDataFilter[]तार्किक AND। एक ऑब्जेक्ट को सभी प्रदान किए गए फ़िल्टर मानदंडों को पूरा करना चाहिए।
MatchAnySuiObjectDataFilter[]तार्किक OR। कोई ऑब्जेक्ट प्रदान किए गए फ़िल्टर मानदंडों में से किसी को भी पूरा कर सकता है।
StructTypestringएक पूर्णतः योग्य Move Struct प्रकार के लिए सटीक मिलान (उदाहरण के लिए, 0x2::coin::Coin<0x2::sui::SUI>)।
Packagestringनिर्दिष्ट पैकेज आईडी के भीतर मॉड्यूल से इंस्टैंशिएट किए गए किसी भी ऑब्जेक्ट से मेल खाता है।
MoveModule{ package: string, module: string }किसी पैकेज के एक विशिष्ट मॉड्यूल के भीतर परिभाषित किसी भी ऑब्जेक्ट से मेल खाता है।

रिटर्न मान​

एक Promise लौटाता है जो PaginatedObjectsResponse ऑब्जेक्ट में रिज़ॉल्व होता है:

प्रतिक्रिया
{
"data": [
{ "data": { "objectId": "0xA...", "version": "1", "type": "0x2::coin::Coin<0x2::sui::SUI>" } },
{ "data": { "objectId": "0xB...", "version": "4", "type": "0x2::coin::Coin<0x2::sui::SUI>" } }
],
"hasNextPage": true,
"nextCursor": "0x12345...ResultCursor"
}

रिस्पॉन्स लिफाफे में निम्नलिखित फ़ील्ड होते हैं:

फ़ील्डप्रकारविवरण
dataSuiObjectResponse[]मौजूदा पेज के लिए ऑब्जेक्ट रिस्पॉन्स लिफाफों की ऐरे।
hasNextPagebooleanयह इंगित करता है कि वस्तुओं के अतिरिक्त पृष्ठ मौजूद हैं या नहीं।
nextCursorstring | nullअगली कॉल में कर्सर के रूप में पास करने के लिए ओपेक पेजिनेशन टोकन। जब hasNextPage false होता है, तो यह मान null होता है।

उपयोग के उदाहरण​

इन्वेंट्री का पहला पृष्ठ प्राप्त करें​

किसी पते के स्वामित्व वाले पहले 5 ऑब्जेक्ट प्राप्त करें:

basicInventory.js
const response = await client.getOwnedObjects({
owner: '0x0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef',
limit: 5,
options: { showType: true }
});

response.data.forEach((item) => {
if (item.data) {
console.log(`ID: ${item.data.objectId}, Type: ${item.data.type}`);
}
});

Move struct प्रकार के अनुसार संपत्तियों को फ़िल्टर करें​

किसी उपयोगकर्ता के स्वामित्व वाले केवल SUI कॉइन ऑब्जेक्ट्स को क्वेरी करें, अन्य टोकन और NFTs को छोड़कर:

filterCoins.js
const response = await client.getOwnedObjects({
owner: '0x0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef',
filter: {
StructType: '0x2::coin::Coin<0x2::sui::SUI>'
},
options: { showContent: true }
});

console.log(`प्राप्त SUI कॉइन ऑब्जेक्ट्स: ${response.data.length}`);

सभी स्वामित्व वाले ऑब्जेक्ट्स के माध्यम से पेजिनेट करें​

किसी एड्रेस के स्वामित्व वाले हर ऑब्जेक्ट के माध्यम से जाने के लिए एक while लूप का उपयोग करें:

pagination.js
let hasNextPage = true;
let nextCursor = null;
const allObjects = [];

while (hasNextPage) {
const response = await client.getOwnedObjects({
owner: '0x0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef',
cursor: nextCursor,
limit: 50
});

allObjects.push(...response.data);

hasNextPage = response.hasNextPage;
nextCursor = response.nextCursor;
}

console.log(`प्राप्त कुल ऑब्जेक्ट्स: ${allObjects.length}`);

सामान्य त्रुटियाँ​

त्रुटि कोडकारणसमाधान
cursor_invalidकर्सर को पास की गई स्ट्रिंग समाप्त हो चुकी है, गलत स्वरूप की है, या किसी अलग क्वेरी से उत्पन्न हुई है।पिछली क्वेरी से nextCursor में लौटाई गई सटीक स्ट्रिंग पास करें।
limit_exceededअनुरोधित सीमा फुलनोड के अधिकतम अनुमत पेज आकार (आमतौर पर 50) से अधिक है।limit पैरामीटर को 50 या उससे कम आइटम तक कम करें।

इन्हें भी देखें​

  • getObject किसी एक ऑन-चेन ऑब्जेक्ट के लिए विवरण प्राप्त करता है।
  • multiGetObjects एक ही बैच अनुरोध में कई विशिष्ट ऑब्जेक्ट्स के लिए विवरण प्राप्त करता है।
  • ऑब्जेक्ट डेटा कैसे प्राप्त करें Node.js में रीड ऑपरेशंस को लागू करने के लिए एक चरण-दर-चरण ट्यूटोरियल प्रदान करता है।
  • SuiClient आर्किटेक्चर SuiClient और रीड ऑपरेशंस के वैचारिक डिज़ाइन की व्याख्या करता है।