7 मिनट
एक कॉन्ट्रैक्ट बदलें और उसका इतिहास ग्राफ्टिंग के साथ रखें
इस गाइड में, आप मौजूदा Subgraph को ग्राफ्ट करके नए Subgraph को बनाना और तैनात करना सीखेंगे।
ग्राफ्टिंग क्या है?
Grafting मौजूदा Subgraph से डेटा को पुनः उपयोग करता है और इसे बाद के ब्लॉक पर indexing करना शुरू करता है। यह विकास के दौरान सरल त्रुटियों को जल्दी से पार करने या किसी मौजूदा Subgraph को फिर से कार्यशील बनाने के लिए उपयोगी है, जब यह विफल हो जाता है। साथ ही, जब किसी Subgraph में कोई ऐसा फीचर जोड़ा जाता है जिसे शुरू से इंडेक्स करने में अधिक समय लगता है, तब भी इसका उपयोग किया जा सकता है।
ग्राफ्टेड Subgraph एक ग्राफक्यूएल स्कीमा का उपयोग कर सकता है जो बेस Subgraph के समान नहीं है, लेकिन इसके अनुकूल हो। यह अपने आप में एक मान्य Subgraph स्कीमा होना चाहिए, लेकिन निम्नलिखित तरीकों से बेस Subgraph के स्कीमा से विचलित हो सकता है:
- यह इकाई के प्रकारों को जोड़ या हटा सकता है|
- यह इकाई प्रकारों में से गुणों को हटाता है|
- यह प्रभावहीन गुणों को इकाई प्रकारों में जोड़ता है|
- यह प्रभाव वाले गुणों को प्रभावहीन गुणों में बदल देता है|
- यह इनम्स में महत्व देता है|
- यह इंटरफेस जोड़ता या हटाता है|
- यह कि, किन इकाई प्रकारों के लिए इंटरफ़ेस लागू होगा, इसे बदल देता है|
अधिक जानकारी के लिए आप देख सकते हैं:
इस ट्यूटोरियल में, हम एक बेसिक use case कवर करेंगे। हम एक मौजूदा contract को एक identical contract से replace करेंगे (जिसका नया address होगा, लेकिन code वही रहेगा)। इसके बाद, मौजूदा Subgraph को उस “base” Subgraph से graft करेंगे, जो नए contract को track करता है।
Important Note on Grafting When Upgrading to the Network
Caution: यह अनुशंसा की जाती है कि The Graph Network पर प्रकाशित किए गए Subgraphs के लिए grafting का उपयोग न करें।
यह क्यों महत्वपूर्ण है?
Grafting एक शक्तिशाली feature है जो आपको एक Subgraph को दूसरे पर “graft” करने की सुविधा देता है, जिससे मौजूदा Subgraph का historical data नए version में प्रभावी रूप से ट्रांसफर हो जाता है। The Graph Network से वापस Subgraph Studio में किसी Subgraph को graft करना संभव नहीं है।
Best Practices
Initial Migration: जब आप अपना Subgraph पहली बार decentralized network पर deploy करें, तो इसे grafting के बिना करें। सुनिश्चित करें कि Subgraph स्थिर है और अपेक्षित रूप से कार्य कर रहा है।
Subsequent Updates: जब आपका Subgraph decentralized network पर live और stable हो जाए, तो आप भविष्य के versions के लिए grafting का उपयोग कर सकते हैं ताकि transition स्मूथ हो और historical data संरक्षित रहे।
इन guidelines का पालन करके, आप risks को कम करते हैं और एक smoot migration प्रक्रिया की सुनिश्चित करते हैं।
एक मौजूदा सब-ग्राफ बनाना
Subgraphs बनाना The Graph का एक आवश्यक हिस्सा है, जिसे और गहराई से यहाँ समझाया गया है। इस ट्यूटोरियल में उपयोग किए गए मौजूदा Subgraph को build और deploy करने के लिए निम्नलिखित repo प्रदान किया गया है:
Note: Subgraph में उपयोग किया गया contract निम्नलिखित Hackathon Starterkit से लिया गया है। (https://github.com/schmidsi/hackathon-starterkit)
सब ग्राफ मैनिफेस्ट की परिभाषा
Subgraph manifest subgraph.yaml Subgraph के लिए data sources, महत्वपूर्ण triggers, और उन triggers के जवाब में चलने वाले functions को निर्दिष्ट करता है। नीचे एक उदाहरण Subgraph manifest दिया गया है, जिसे आप उपयोग करेंगे:
1specVersion: 1.3.02schema:3 file: ./schema.graphql4dataSources:5 - kind: ethereum6 name: Lock7 network: sepolia8 source:9 address: '0xb3aabe721794b85fe4e72134795c2f93b4eb7e63'10 abi: Lock11 startBlock: 595569012 mapping:13 kind: ethereum/events14 apiVersion: 0.0.915 language: wasm/assemblyscript16 entities:17 - Withdrawal18 abis:19 - name: Lock20 file: ./abis/Lock.json21 eventHandlers:22 - event: Withdrawal(uint256,uint256)23 handler: handleWithdrawal24 file: ./src/lock.ts
Lock
डेटा स्रोत वह ABI और अनुबंध पता है जो हमें तब मिलेगा जब हम अनुबंध को संकलित और तैनात करेंगे।- नेटवर्क को एक इंडेक्स किए गए नेटवर्क के अनुरूप होना चाहिए जिसे क्वेरी किया जा रहा है। चूंकि हम सेपोलीया टेस्टनेट पर चल रहे हैं, नेटवर्क
sepolia
है। mapping
सेक्शन उन ट्रिगर्स को परिभाषित करता है जो दिलचस्प होते हैं और उन ट्रिगर्स के प्रतिक्रिया में चलने वाली कार्यों को परिभाषित करता है। इस मामले में, हम Withdrawal इवेंट की प्रतीक्षा कर रहे हैं और जब यह इवेंट उत्पन्न होता है, तोhandleWithdrawal
कार्य को कॉल किया जाता है।
ग्राफ्टिंग मैनिफेस्ट की परिभाषा
Grafting के लिए मूल Subgraph manifest में दो नए आइटम जोड़ने की आवश्यकता होती है:
1--2features:3 - grafting # feature name4graft:5 base: Qm... # Subgraph ID of base Subgraph6 block: 5956000 # block number
features:
सभी उपयोग किए गए विशेषताओं के नाम की एक सूची है।- graft: एक map है जो base Subgraph और जिस block पर graft करना है, उसे परिभाषित करता है।block वह block number है जिससे indexing शुरू करनी है।The Graph base Subgraph का डेटा दिए गए block तक (और उसे शामिल करते हुए) कॉपी करेगा और फिर उसी block से नए Subgraph की indexing जारी रखेगा।
base और block मान प्राप्त करने के लिए दो Subgraphs deploy करने होते हैं:Base indexing के लिए एक SubgraphGrafting वाले नए Subgraph के लिए एक Subgraph
बेस सब-ग्राफ को तैनात करना
- Subgraph Studio पर जाएं और Sepolia testnet पर graft-example नाम से एक Subgraph बनाएं।
- अपने Subgraph पेज के AUTH & DEPLOY सेक्शन में दिए गए निर्देशों का पालन करें और रिपोजिटरी की graft-example फोल्डर से Subgraph को डिप्लॉय करें।
- एक बार पूरा होने पर, सत्यापित करें की इंडेक्सिंग सही ढंग से हो गयी है| यदि आप निम्न कमांड ग्राफ प्लेग्राउंड में चलाते हैं
1{2 withdrawals(first: 5) {3 id4 amount5 when6 }7}
तो हमे कुछ ऐसा दिखता है:
1{2 "data": {3 "withdrawals": [4 {5 "id": "0xe8323d21c4f104607b10b0fff9fc24b9612b9488795dea8196b2d5f980d3dc1d0a000000",6 "amount": "0",7 "when": "1716394824"8 },9 {10 "id": "0xea1cee35036f2cacb72f2a336be3e54ab911f5bebd58f23400ebb8ecc5cfc45203000000",11 "amount": "0",12 "when": "1716394848"13 }14 ]15 }16}
एक बार जब आप सुनिश्चित कर लें कि Subgraph सही तरीके से indexing कर रहा है, तो आप grafting का उपयोग करके इसे तेजी से अपडेट कर सकते हैं।
ग्राफ्टिंग सब-ग्राफ तैनात करना
ग्राफ्ट प्रतिस्तापित subgraph.yaml में एक नया कॉन्ट्रैक्ट एड्रेस होगा| यह तब हो सकता है जब आप अपना डैप अपडेट करें, कॉन्ट्रैक्ट को दोबारा तैनात करें, इत्यादि|
- Subgraph Studio पर जाएं और Sepolia testnet पर graft-replacement नाम से एक Subgraph बनाएं।
- एक नया manifest बनाएँ।graph-replacement के लिए subgraph.yaml में एक अलग contract address और grafting के लिए नई जानकारी होगी। इसमें निम्नलिखित शामिल होंगे:block – यह पुराने contract द्वारा उत्पन्न आखिरी event का block नंबर है, जिससे आप grafting शुरू करना चाहते हैं। आखिरी event का ट्रांजैक्शन यहाँ देखें: https://sepolia.etherscan.io/tx/0xea1cee35036f2cacb72f2a336be3e54ab911f5bebd58f23400ebb8ecc5cfc452base – यह पुराने Subgraph का Subgraph ID है।base Subgraph ID = आपके मूल graph-example Subgraph का Deployment ID। इसे Subgraph Studio में जाकर प्राप्त किया जा सकता है।
- अपने Subgraph पेज के AUTH & DEPLOY सेक्शन में दिए गए निर्देशों का पालन करें और रिपोजिटरी की graft-replacement फोल्डर से Subgraph को डिप्लॉय करें।
- एक बार पूरा होने पर, सत्यापित करें की इंडेक्सिंग सही ढंग से हो गयी है| यदि आप निम्न कमांड ग्राफ प्लेग्राउंड में चलाते हैं
1{2 withdrawals(first: 5) {3 id4 amount5 when6 }7}
आपको यह वापस मिलना चाहिए:
1{2 "data": {3 "withdrawals": [4 {5 "id": "0xe8323d21c4f104607b10b0fff9fc24b9612b9488795dea8196b2d5f980d3dc1d0a000000",6 "amount": "0",7 "when": "1716394824"8 },9 {10 "id": "0xea1cee35036f2cacb72f2a336be3e54ab911f5bebd58f23400ebb8ecc5cfc45203000000",11 "amount": "0",12 "when": "1716394848"13 },14 {15 "id": "0x2410475f76a44754bae66d293d14eac34f98ec03a3689cbbb56a716d20b209af06000000",16 "amount": "0",17 "when": "1716429732"18 }19 ]20 }21}
आप देख सकते हैं कि graft-replacement Subgraph पुराने graph-example डेटा और नए contract address से आने वाले डेटा को एक साथ index कर रहा है।मूल contract ने दो Withdrawal events उत्पन्न किए:Event 1: https://sepolia.etherscan.io/tx/0xe8323d21c4f104607b10b0fff9fc24b9612b9488795dea8196b2d5f980d3dc1dEvent 2: https://sepolia.etherscan.io/tx/0xea1cee35036f2cacb72f2a336be3e54ab911f5bebd58f23400ebb8ecc5cfc452नए contract ने एक Withdrawal event उत्पन्न किया:Event 3: https://sepolia.etherscan.io/tx/0x2410475f76a44754bae66d293d14eac34f98ec03a3689cbbb56a716d20b209afअब, इन दोनों पुराने transactions (Event 1 और 2) और नए transaction (Event 3) को graft-replacement Subgraph में एक साथ जोड़ दिया गया है।
बधाई हो! आपने सफलतापूर्वक एक Subgraph को दूसरे Subgraph पर graft कर लिया है।
Additional Resources
यदि आप grafting के साथ अधिक अनुभव प्राप्त करना चाहते हैं, तो यहां कुछ लोकप्रिय कॉन्ट्रैक्ट्स के उदाहरण दिए गए हैं:
ग्राफ विशेषज्ञ बनने के लिए, अन्य तरीकों के बारे में जानने पर विचार करें जो अंतर्निहित डेटा स्रोतों में परिवर्तन को संभाल सकते हैं। Data Source Templates जैसे विकल्प समान परिणाम प्राप्त कर सकते हैं।
ध्यान दें: इस लेख की अधिकांश सामग्री को पहले प्रकाशित Arweave article से लिया गया है।