9 मिनट
NEAR पर सबग्राफ बनाना
यह गाइड NEAR ब्लॉकचेन पर स्मार्ट contract को इंडेक्स करने वाले Subgraphs बनाने की एक परिचयात्मक गाइड है।सबग्राफ
NEAR क्या है?
NEAR एक स्मार्ट contract प्लेटफ़ॉर्म है जो विकेंद्रीकृत applications बनाने के लिए है। अधिक जानकारी के लिए official documentation देखें।
NEAR Subgraphs क्या हैं?
The Graph डेवलपर्स को ब्लॉकचेन इवेंट्स को प्रोसेस करने और परिणामी डेटा को आसानी से एक GraphQL API के माध्यम से उपलब्ध कराने के टूल्स देता है, जिसे व्यक्तिगत रूप से एक सबग्राफ के रूप में जाना जाता है। Graph Node अब NEAR इवेंट्स को प्रोसेस करने में सक्षम है, जिसका अर्थ है कि NEAR डेवलपर्स अब अपने स्मार्ट contract को इंडेक्स करने के लिए Subgraphs बना सकते हैं।
सबग्राफ इवेंट-आधारित होते हैं, जिसका अर्थ है कि वे ऑनचेन इवेंट्स को सुनते हैं और फिर उन्हें प्रोसेस करते हैं। वर्तमान में, NEAR सबग्राफ के लिए दो प्रकार के handlers समर्थित हैं:
- ब्लॉक हैंडलर्स: ये हर नए ब्लॉक पर चलते हैं
- रसीद हैंडलर: किसी निर्दिष्ट खाते पर संदेश निष्पादित होने पर हर बार चलें
रसीद सिस्टम में एकमात्र कार्रवाई योग्य वस्तु है। जब हम NEAR प्लेटफॉर्म पर “एक लेन-देन को संसाधित करने” के बारे में बात करते हैं, तो अंततः इसका अर्थ किसी बिंदु पर “रसीदें लागू करना” होता है।
NEAR सबग्राफ बनाना
@graphprotocol/graph-cli
एक कमांड-लाइन टूल है जो सबग्राफ बनाने और डिप्लॉय करने के लिए उपयोग किया जाता है।
@graphprotocol/graph-ts
एक लाइब्रेरी है जो सबग्राफ-विशिष्ट प्रकार प्रदान करती है।
NEAR सबग्राफ विकास के लिए graph-cli
का संस्करण 0.23.0 से ऊपर और graph-ts
का संस्करण 0.23.0
से ऊपर होना आवश्यक है।
NEAR सबग्राफ बनाना Ethereum को इंडेक्स करने वाले सबग्राफ बनाने के समान ही है।
सबग्राफ परिभाषा के तीन पहलू हैं:
subgraph.yaml: सबग्राफ मैनिफेस्ट, जो आवश्यक डेटा स्रोतों को परिभाषित करता है और उन्हें कैसे प्रोसेस किया जाना चाहिए। NEAR एक नया kind का डेटा स्रोत है।
schema.graphql: एक स्कीमा फ़ाइल है जो यह परिभाषित करती है कि आपके सबग्राफ के लिए कौन सा डेटा संग्रहीत किया जाता है और इसे GraphQL के माध्यम से कैसे क्वेरी किया जाए। NEAR सबग्राफ के लिए आवश्यकताओं को मौजूदा दस्तावेज़ीकरण द्वारा कवर किया गया है।
असेम्बलीस्क्रिप्ट मैपिंग्स: AssemblyScript code जो इवेंट डेटा से आपके स्कीमा में परिभाषित एंटिटीज़ में अनुवाद करता है। NEAR समर्थन NEAR-विशिष्ट डेटा प्रकार और नई JSON पार्सिंग कार्यक्षमता पेश करता है।
Subgraph को बनाते वक़्त दो मुख्य कमांड हैं:
1$ graph codegen # generates types from the schema file identified in the manifest2$ graph build # generates Web Assembly from the AssemblyScript files, and prepares all the subgraph files in a /build folder
सब ग्राफ मैनिफेस्ट की परिभाषा
सबग्राफ manifest (subgraph.yaml
) उन डेटा स्रोतों की पहचान करता है जो सबग्राफ के लिए आवश्यक हैं, उन ट्रिगर्स को निर्दिष्ट करता है जिनमें रुचि है, और उन फ़ंक्शनों को परिभाषित करता है जिन्हें उन ट्रिगर्स के जवाब में चलाया जाना चाहिए। नीचे NEAR सबग्राफ के लिए एक उदाहरण सबग्राफ manifest दिया गया है:
1specVersion: 1.3.02schema:3 file: ./src/schema.graphql # link to the schema file4dataSources:5 - kind: near6 network: near-mainnet7 source:8 account: app.good-morning.near # This data source will monitor this account9 startBlock: 10662188 # Required for NEAR10 mapping:11 apiVersion: 0.0.912 language: wasm/assemblyscript13 blockHandlers:14 - handler: handleNewBlock # the function name in the mapping file15 receiptHandlers:16 - handler: handleReceipt # the function name in the mapping file17 file: ./src/mapping.ts # link to the file with the Assemblyscript mappings
- NEAR सबग्राफ ने एक नए kind का data source (
near
) पेश किया है। network
को होस्टिंग ग्राफ-नोड पर एक नेटवर्क से मेल खाना चाहिए। सबग्राफ Studio पर, NEAR का मेननेटnear-mainnet
है, और NEAR का टेस्टनेटnear-testnet
है।- NEAR डेटा स्रोतों में एक वैकल्पिक
source.account
फ़ील्ड पेश किया गया है, जो एक मानव-पठनीय आईडी है जो एक NEAR खाता से मेल खाती है। यह एक खाता या एक उप-खाता हो सकता है। - NEAR डेटा स्रोत वैकल्पिक
source.accounts
फ़ील्ड पेश करते हैं, जिसमें वैकल्पिक उपसर्ग और प्रत्यय होते हैं। कम से कम उपसर्ग या प्रत्यय में से एक निर्दिष्ट किया जाना चाहिए, ये किसी भी खाते से मेल खाएंगे जो सूचीबद्ध मानों से शुरू या समाप्त होता है। नीचे दिया गया उदाहरण निम्नलिखित के लिए मेल खाएगा:[app|good].*[morning.near|morning.testnet]
। यदि केवल उपसर्ग या प्रत्ययों की सूची आवश्यक हो तो दूसरा फ़ील्ड हटा दिया जा सकता है।
1accounts:2 prefixes:3 - app4 - good5 suffixes:6 - morning.near7 - morning.testnet
NEAR डेटा स्रोत दो प्रकार के हैंडलर का समर्थन करते हैं:
blockHandlers
: हर नए NEAR ब्लॉक पर चलते हैं। कोई source.account आवश्यक नहीं है।- Here’s the translation of the provided text into Hindi: receiptHandlers: हर रिसीट पर तब चलाए जाते हैं जब डेटा स्रोत का source.account प्राप्तकर्ता हो। ध्यान दें कि केवल बिल्कुल मिलान वाले ही प्रोसेस किए जाते हैं (subaccounts को स्वतंत्र डेटा स्रोत के रूप में जोड़ा जाना चाहिए)।
स्कीमा की परिभाषा
Schema परिभाषा परिणामस्वरूप बनने वाले सबग्राफ डेटाबेस की संरचना और इकाइयों के बीच संबंधों का वर्णन करती है। यह मूल डेटा स्रोत से स्वतंत्र होती है। सबग्राफ schema परिभाषा के बारे में अधिक विवरण यहाँ उपलब्ध हैं।
असेंबली स्क्रिप्ट मैप्पिंग्स
आयोजन को प्रोसेस करने के लिए handlerAssemblyScript में लिखे गए हैं।
NEAR इंडेक्सिंग AssemblyScript API में NEAR-विशिष्ट डेटा प्रकारों को पेश करती है।
1class ExecutionOutcome {2 gasBurnt: u64,3 blockHash: Bytes,4 id: Bytes,5 logs: Array<string>,6 receiptIds: Array<Bytes>,7 tokensBurnt: BigInt,8 executorId: string,9 }1011class ActionReceipt {12 predecessorId: string,13 receiverId: string,14 id: CryptoHash,15 signerId: string,16 gasPrice: BigInt,17 outputDataReceivers: Array<DataReceiver>,18 inputDataIds: Array<CryptoHash>,19 actions: Array<ActionValue>,20 }2122class BlockHeader {23 height: u64,24 prevHeight: u64,// हमेशा शून्य जब संस्करण < V325 epochId: Bytes,26 nextEpochId: Bytes,27 chunksIncluded: u64,28 hash: Bytes,29 prevHash: Bytes,30 timestampNanosec: u64,31 randomValue: Bytes,32 gasPrice: BigInt,33 totalSupply: BigInt,34 latestProtocolVersion: u32,35 }3637class ChunkHeader {38 gasUsed: u64,39 gasLimit: u64,40 shardId: u64,41 chunkHash: Bytes,42 prevBlockHash: Bytes,43 balanceBurnt: BigInt,44 }4546class Block {47 author: string,48 header: BlockHeader,49 chunks: Array<ChunkHeader>,50 }5152class ReceiptWithOutcome {53 outcome: ExecutionOutcome,54 receipt: ActionReceipt,55 block: Block,56 }
ये प्रकार block और receipt handlers को पास किए जाते हैं:
- ब्लॉक handler को एक
Block
प्राप्त होगा। - रसीद handler को
ReceiptWithOutcome
प्राप्त होगा।
अन्यथा, शेष AssemblyScript API NEAR सबग्राफ डेवलपर्स के लिए मैपिंग निष्पादन के दौरान उपलब्ध है।
यह एक नई JSON पार्सिंग फ़ंक्शन शामिल करता है - NEAR पर अक्सर stringified JSONs के रूप में लॉग्स जारी किए जाते हैं। एक नया json.fromString(...)
फ़ंक्शन JSON API के रूप में उपलब्ध है, जो डेवलपर्स को इन लॉग्स को आसानी से प्रोसेस करने की अनुमति देता है।
एक NEAR सबग्राफ की तैनाती
एक बार जब आपने सबग्राफ बना लिया है, तो इसे ग्राफ-नोड पर Indexing के लिए डिप्लॉय करने का समय आ गया है। NEAR सबग्राफ को किसी भी ग्राफ-नोड >=v0.26.x पर डिप्लॉय किया जा सकता है (यह संस्करण अभी तक टैग और जारी नहीं किया गया है)।
Subgraph Studio and the upgrade Indexer on The Graph Network currently supports indexing NEAR mainnet and testnet in beta, with the following network names:
near-mainnet
near-testnet
More information on सबग्राफ Studio पर सबग्राफ बनाने और तैनात करने के बारे में यहाँ पाया जा सकता है।
पहला कदम आपका सबग्राफ “बनाना” है - यह केवल एक बार करने की आवश्यकता होती है। सबग्राफ Studio पर, इसे आपके डैशबोर्ड से किया जा सकता है: “एक बनाएँ सबग्राफ ”।
एक बार जब आपका सबग्राफ बना लिया जाता है, तो आप graph deploy
CLI कमांड का उपयोग करके अपने सबग्राफ को डिप्लॉय कर सकते हैं।
1$ graph create --node <graph-node-url> <subgraph-name> # एक स्थानीय ग्राफ-नोड पर सबग्राफ बनाता है (सबग्राफ Studio पर, यह UI के माध्यम से किया जाता है)2$ graph deploy --node <graph-node-url> --ipfs https://ipfs.thegraph.com <subgraph-name> # निर्मित फ़ाइलों को निर्दिष्ट IPFS endpoint पर अपलोड करता है, और फिर manifest IPFS hash के आधार पर निर्दिष्ट ग्राफ-नोड पर सबग्राफ को डिप्लॉय करता है
नोड कॉन्फ़िगरेशन इस बात पर निर्भर करेगा कि सबग्राफ कहाँ तैनात किया जा रहा है।
Subgraph Studio
1graph auth2graph deploy <subgraph-name>
स्थानीय ग्राफ़ नोड (डिफ़ॉल्ट कॉन्फ़िगरेशन पर आधारित)
1graph deploy --node http://localhost:8020/ --ipfs http://localhost:5001 <subgraph-name>
एक बार जब आपका सबग्राफ डिप्लॉय हो जाता है, तो इसे ग्राफ-नोड द्वारा इंडेक्स किया जाएगा। आप खुद सबग्राफ को क्वेरी करके इसकी प्रगति की जांच कर सकते हैं।
1{2 _meta {3 block {4 number5 }6 }7}
एक स्थानीय ग्राफ़ नोड के साथ NEAR को अनुक्रमणित करना
NEAR को अनुक्रमित करने वाले ग्राफ़ नोड को चलाने के लिए निम्नलिखित परिचालन आवश्यकताएँ हैं:
- Firehose इंस्ट्रूमेंटेशन के साथ NEAR इंडेक्सर फ्रेमवर्क
- NEAR Firehose कंपोनेंट्(स)
- Firehose एंडपॉइन्ट के साथ ग्राफ़ नोड कॉन्फ़िगर किया गया
हम जल्द ही उपरोक्त कंपोनेंट्स को चलाने के बारे में और जानकारी प्रदान करेंगे।
NEAR सबग्राफ को क्वेरी करना
NEAR Subgraphs के लिए GraphQL एंडपॉइंट स्कीमा परिभाषा द्वारा निर्धारित किया जाता है, जिसमें मौजूदा API इंटरफेस शामिल होता है। अधिक जानकारी के लिए कृपया GraphQL API दस्तावेज़ देखें।
सब-ग्राफ के उदाहरण
यहाँ कुछ उदाहरण सबग्राफ संदर्भ के लिए दिए गए हैं:
FAQ
बीटा कैसे काम करता है?
NEAR समर्थन बीटा में है, जिसका अर्थ है कि जैसे-जैसे हम एकीकरण को बेहतर बनाने पर काम कर रहे हैं, API में परिवर्तन हो सकते हैं। कृपया हमें [email protected] पर ईमेल करें ताकि हम आपको NEAR सबग्राफ बनाने में सहायता कर सकें और आपको नवीनतम विकास से अपडेट रख सकें!
क्या सबग्राफ दोनों NEAR और EVM चेन को इंडेक्स कर सकता है?
नहीं, एक सब-ग्राफ केवल एक चेन/नेटवर्क से डाटा सोर्स को सपोर्ट कर सकता है
क्या सबग्राफ अधिक विशिष्ट ट्रिगर्स पर प्रतिक्रिया कर सकते हैं?
वर्तमान में, केवल अवरोधित करें और प्राप्त करें ट्रिगर समर्थित हैं। हम एक निर्दिष्ट खाते में फ़ंक्शन कॉल के लिए ट्रिगर्स की जांच कर रहे हैं। एक बार जब NEAR को नेटिव ईवेंट समर्थन मिल जाता है, तो हम ईवेंट ट्रिगर्स का समर्थन करने में भी रुचि रखते हैं।
क्या रसीद हैंडलर खातों और उनके उप-खातों के लिए ट्रिगर करेंगे?
यदि कोई account
निर्दिष्ट किया गया है, तो यह केवल सटीक खाता नाम से मेल खाएगा। उप-खातों से मेल करना संभव है यदि accounts
फ़ील्ड निर्दिष्ट की गई हो, जिसमें suffixes
और prefixes
शामिल हों ताकि खाते और उप-खाते मेल खा सकें। उदाहरण के लिए, निम्नलिखित सभी mintbase1.near
उप-खातों से मेल खाएगा:
1accounts:2 suffixes:3 - mintbase1.near
क्या NEAR सबग्राफमैपिंग्स के दौरान NEAR खातों पर view कॉल कर सकते हैं?
यह समर्थित नहीं है। हम मूल्यांकन कर रहे हैं कि अनुक्रमण के लिए यह कार्यक्षमता आवश्यक है या नहीं।
क्या मैं अपने NEAR सबग्राफ में data source templates का उपयोग कर सकता हूँ?
यह वर्तमान में समर्थित नहीं है। हम मूल्यांकन कर रहे हैं कि अनुक्रमण के लिए यह कार्यक्षमता आवश्यक है या नहीं।
Ethereum सबग्राफ “pending” और “current” संस्करणों का समर्थन करते हैं, मैं NEAR सबग्राफ का “pending” संस्करण कैसे तैनात कर सकता हूँ?
NEAR सबग्राफ के लिए लंबित कार्यक्षमता अभी तक समर्थित नहीं है। इस बीच, आप एक नए संस्करण को एक अलग “named” सबग्राफ पर तैनात कर सकते हैं, और जब वह चेन हेड के साथ सिंक हो जाता है, तो आप अपने प्राथमिक “named” सबग्राफ पर पुनः तैनाती कर सकते हैं, जो उसी अंतर्निहित deployment ID का उपयोग करेगा, जिससे मुख्य सबग्राफ तुरंत सिंक हो जाएगा।
मेरा प्रश्न अभी तक उत्तरित नहीं हुआ है, मुझे NEAR सबग्राफ बनाने में और सहायता कहाँ मिल सकती है?
यदि यह सबग्राफ विकास से संबंधित एक सामान्य प्रश्न है, तो शेष Developer documentation में बहुत अधिक जानकारी उपलब्ध है। अन्यथा, कृपया The Graph Protocol Discord से जुड़ें और #near चैनल में पूछें या [email protected] पर ईमेल करें।