एपीआई संदर्भ: getOwnedObjects
किसी विशिष्ट 32-बाइट Sui वॉलेट पते के स्वामित्व वाली ऑन-चेन ऑब्जेक्ट्स की एक पेजिनेटेड सूची प्राप्त करता है।
वॉलेट डैशबोर्ड, उपयोगकर्ता इन्वेंट्री स्क्रीन, और टोकन बैलेंस सूचियों को भरने के लिए इस मेथड का उपयोग करें। क्योंकि एक ही खाता हजारों ऑब्जेक्ट्स रख सकता है, Sui JSON-RPC API कर्सर-आधारित पेजिनेशन का उपयोग करके स्वामित्व वाले ऑब्जेक्ट्स को अलग-अलग पेजों में लौटाता है। क्योंकि getOwnedObjects एक रीड ऑपरेशन है जो सीधे फुलनोड लोकल स्टेट से परोसा जाता है, यह लेनदेन सबमिट किए बिना या गैस का उपभोग किए बिना तुरंत निष्पादित होता है।
- क्लास:
SuiClient - पैकेज:
@mysten/sui/client - ऑपरेशन प्रकार: रीड ऑपरेशन (कोई गैस नहीं, कोई वॉलेट हस्ताक्षर नहीं)
अवलोकन
getOwnedObjects को कॉल करने पर, फुलनोड इंडेक्स से उन ऑब्जेक्ट्स को क्वेरी किया जाता है जिनकी मालिकी टारगेट एड्रेस (AddressOwner) को सौंपी गई है। उच्च लेटेंसी और नेटवर्क टाइमआउट से बचने के लिए, फुलनोड एक ही रिस्पॉन्स में पूरी इन्वेंट्री वापस करने के बजाय परिणामों को पेजिनेट करते हैं।
पेजिनेशन लूप का विज़ुअलाइज़ेशन
- Mermaid (छवि)
- Mermaid (कोड)
- ASCII
flowchart TD
Start([पृष्ठानुक्रमण शुरू करें]) --> Init["cursor = null आरंभ करें<br/>allObjects = []"]
Init --> Query["getOwnedObjects कॉल करें<br/>(cursor, limit: 50)"]
Query --> Resp["प्रतिक्रिया प्राप्त करें:<br/>data[], hasNextPage, nextCursor"]
Resp --> Append["allObjects ऐरे में<br/>आइटम जोड़ें"]
Append --> Check{"hasNextPage == true?"}
Check -->|हाँ| Update["cursor = nextCursor अपडेट करें"]
Check -->|नहीं| Done([सभी संचित ऑब्जेक्ट्स लौटाएँ])
Update -.->|अगला पृष्ठ| Query
पेजिनेशन फ़्लो (करसर लूप):
क्लाइंट फ़ुलनोड
│ │
│── getOwnedObjects(cursor: null) ───────►│ (पृष्ठ 1: limit 50)
│◄── { data: [50 items], nextCursor } ────│
│ │
│── getOwnedObjects(cursor: nextCursor) ─►│ (पृष्ठ 2: limit 50)
│◄── { data: [12 items], hasNextPage: false }
हस्ताक्षर
client.getOwnedObjects(input: GetOwnedObjectsParams): Promise<PaginatedObjectsResponse>
पैरामीटर्स
यह मेथड निम्नलिखित प्रॉपर्टीज़ वाला एक कॉन्फ़िगरेशन ऑब्जेक्ट स्वीकार करता है:
| पैरामीटर | प्रकार | आवश्यक | विवरण |
|---|---|---|---|
owner | string | हाँ | टारगेट वॉलेट का 32-बाइट हेक्साडेसिमल पता। |
filter | SuiObjectDataFilter | नहीं | प्रकार, पैकेज, या मॉड्यूल के अनुसार परिणामों को फ़िल्टर करने के मानदंड। |
options | SuiObjectDataOptions | नहीं | अतिरिक्त विवरण शामिल करने के लिए फ़्लैग (उदाहरण के लिए, showType, showContent, showDisplay)। |
cursor | string | null | नहीं | अगले पेज को प्राप्त करने के लिए पिछले प्रतिक्रिया से nextCursor टोकन। |
limit | number | नहीं | प्रति पेज लौटाए जाने वाले अधिकतम आइटम (डिफ़ॉल्ट और अधिकतम आमतौर पर सार्वजनिक RPC नोड्स पर 50 होता है)। |
SuiObjectDataFilter
filter पैरामीटर fullnode पर क्वेरी को सीमित करता है, जिससे बैंडविड्थ और क्लाइंट-साइड प्रोसेसिंग की बचत होती है:
| फ़िल्टर कुंजी | मान प्रकार | विवरण |
|---|---|---|
MatchAll | SuiObjectDataFilter[] | तार्किक AND। एक ऑब्जेक्ट को सभी प्रदान किए गए फ़िल्टर मानदंडों को पूरा करना चाहिए। |
MatchAny | SuiObjectDataFilter[] | तार्किक OR। कोई ऑब्जेक्ट प्रदान किए गए फ़िल्टर मानदंडों में से किसी को भी पूरा कर सकता है। |
StructType | string | एक पूर्णतः योग्य Move Struct प्रकार के लिए सटीक मिलान (उदाहरण के लिए, 0x2::coin::Coin<0x2::sui::SUI>)। |
Package | string | निर्दिष्ट पैकेज आईडी के भीतर मॉड्यूल से इंस्टैंशिएट किए गए किसी भी ऑब्जेक्ट से मेल खाता है। |
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"
}
रिस्पॉन्स लिफाफे में निम्नलिखित फ़ील्ड होते हैं:
| फ़ील्ड | प्रकार | विवरण |
|---|---|---|
data | SuiObjectResponse[] | मौजूदा पेज के लिए ऑब्जेक्ट रिस्पॉन्स लिफाफों की ऐरे। |
hasNextPage | boolean | यह इंगित करता है कि वस्तुओं के अतिरिक्त पृष्ठ मौजूद हैं या नहीं। |
nextCursor | string | null | अगली कॉल में कर्सर के रूप में पास करने के लिए ओपेक पेजिनेशन टोकन। जब hasNextPage false होता है, तो यह मान null होता है। |
उपयोग के उदाहरण
इन्वेंट्री का पहला पृष्ठ प्राप्त करें
किसी पते के स्वामित्व वाले पहले 5 ऑब्जेक्ट प्राप्त करें:
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 को छोड़कर:
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 लूप का उपयोग करें:
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और रीड ऑपरेशंस के वैचारिक डिज़ाइन की व्याख्या करता है।