Docs
खोज⌘ K
  • Home
  • The Graph के बारे में
  • समर्थित नेटवर्क
  • Protocol Contracts
  • सबग्राफ
    • सबस्ट्रीम
      • टोकन API
        • AI Suite
          • Overview
          • Indexer टूलिंग
            • GraphTally Guide
            • Supported Network Requirements
            • Chain Integration Process Overview
            • नई श्रृंखला एकीकरण
            • संसाधन
              सबग्राफ > How-to Guides

              7 मिनट

              एक कॉन्ट्रैक्ट बदलें और उसका इतिहास ग्राफ्टिंग के साथ रखें

              इस गाइड में, आप मौजूदा Subgraph को ग्राफ्ट करके नए Subgraph को बनाना और तैनात करना सीखेंगे।

              ग्राफ्टिंग क्या है?

              Grafting मौजूदा Subgraph से डेटा को पुनः उपयोग करता है और इसे बाद के ब्लॉक पर indexing करना शुरू करता है। यह विकास के दौरान सरल त्रुटियों को जल्दी से पार करने या किसी मौजूदा Subgraph को फिर से कार्यशील बनाने के लिए उपयोगी है, जब यह विफल हो जाता है। साथ ही, जब किसी Subgraph में कोई ऐसा फीचर जोड़ा जाता है जिसे शुरू से इंडेक्स करने में अधिक समय लगता है, तब भी इसका उपयोग किया जा सकता है।

              ग्राफ्टेड Subgraph एक ग्राफक्यूएल स्कीमा का उपयोग कर सकता है जो बेस Subgraph के समान नहीं है, लेकिन इसके अनुकूल हो। यह अपने आप में एक मान्य Subgraph स्कीमा होना चाहिए, लेकिन निम्नलिखित तरीकों से बेस Subgraph के स्कीमा से विचलित हो सकता है:

              • यह इकाई के प्रकारों को जोड़ या हटा सकता है|
              • यह इकाई प्रकारों में से गुणों को हटाता है|
              • यह प्रभावहीन गुणों को इकाई प्रकारों में जोड़ता है|
              • यह प्रभाव वाले गुणों को प्रभावहीन गुणों में बदल देता है|
              • यह इनम्स में महत्व देता है|
              • यह इंटरफेस जोड़ता या हटाता है|
              • यह कि, किन इकाई प्रकारों के लिए इंटरफ़ेस लागू होगा, इसे बदल देता है|

              अधिक जानकारी के लिए आप देख सकते हैं:

              • Grafting

              इस ट्यूटोरियल में, हम एक बेसिक 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 प्रदान किया गया है:

              • Subgraph उदाहरण रिपॉजिटरी⁠

              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

              बेस सब-ग्राफ को तैनात करना

              1. Subgraph Studio पर जाएं और Sepolia testnet पर graft-example नाम से एक Subgraph बनाएं।
              2. अपने Subgraph पेज के AUTH & DEPLOY सेक्शन में दिए गए निर्देशों का पालन करें और रिपोजिटरी की graft-example फोल्डर से Subgraph को डिप्लॉय करें।
              3. एक बार पूरा होने पर, सत्यापित करें की इंडेक्सिंग सही ढंग से हो गयी है| यदि आप निम्न कमांड ग्राफ प्लेग्राउंड में चलाते हैं
              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 में एक नया कॉन्ट्रैक्ट एड्रेस होगा| यह तब हो सकता है जब आप अपना डैप अपडेट करें, कॉन्ट्रैक्ट को दोबारा तैनात करें, इत्यादि|

              1. Subgraph Studio पर जाएं और Sepolia testnet पर graft-replacement नाम से एक Subgraph बनाएं।
              2. एक नया 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 में जाकर प्राप्त किया जा सकता है।
              3. अपने Subgraph पेज के AUTH & DEPLOY सेक्शन में दिए गए निर्देशों का पालन करें और रिपोजिटरी की graft-replacement फोल्डर से Subgraph को डिप्लॉय करें।
              4. एक बार पूरा होने पर, सत्यापित करें की इंडेक्सिंग सही ढंग से हो गयी है| यदि आप निम्न कमांड ग्राफ प्लेग्राउंड में चलाते हैं
              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 के साथ अधिक अनुभव प्राप्त करना चाहते हैं, तो यहां कुछ लोकप्रिय कॉन्ट्रैक्ट्स के उदाहरण दिए गए हैं:

              • Curve⁠
              • ERC-721⁠
              • Uniswap⁠,

              ग्राफ विशेषज्ञ बनने के लिए, अन्य तरीकों के बारे में जानने पर विचार करें जो अंतर्निहित डेटा स्रोतों में परिवर्तन को संभाल सकते हैं। Data Source Templates जैसे विकल्प समान परिणाम प्राप्त कर सकते हैं।

              ध्यान दें: इस लेख की अधिकांश सामग्री को पहले प्रकाशित Arweave article से लिया गया है।

              ⁠GitHub पर संपादित करें⁠

              आरवीव पर सब-ग्राफ्र्स बनानासुरक्षित सबग्राफ कोड जेनरेटर
              इस पृष्ठ पर
              • ग्राफ्टिंग क्या है?
              • Important Note on Grafting When Upgrading to the Network
              • यह क्यों महत्वपूर्ण है?
              • Best Practices
              • एक मौजूदा सब-ग्राफ बनाना
              • सब ग्राफ मैनिफेस्ट की परिभाषा
              • ग्राफ्टिंग मैनिफेस्ट की परिभाषा
              • बेस सब-ग्राफ को तैनात करना
              • ग्राफ्टिंग सब-ग्राफ तैनात करना
              • Additional Resources
              The GraphStatusTestnetBrand AssetsForumSecurityPrivacy PolicyTerms of Service