paint-brush
ब्लॉकचैन नेटवर्क को पाटने के लिए Truffle L2 बॉक्स का उपयोग करनाद्वारा@johnjvester
677 रीडिंग
677 रीडिंग

ब्लॉकचैन नेटवर्क को पाटने के लिए Truffle L2 बॉक्स का उपयोग करना

द्वारा John Vester10m2022/12/22
Read on Terminal Reader

बहुत लंबा; पढ़ने के लिए

L1s और L2s के बीच इंटरऑपरेट करने वाले dapps बनाना मुश्किल हो सकता है। आइए इथेरियम और ऑप्टिमिज्म को पाटने के आसान तरीके के रूप में ऑप्टिमिज्म ब्रिज ट्रफल बॉक्स का उपयोग करते हुए देखें।
featured image - ब्लॉकचैन नेटवर्क को पाटने के लिए Truffle L2 बॉक्स का उपयोग करना
John Vester HackerNoon profile picture


यह सर्वविदित है कि कई ब्लॉकचेन में स्केलेबिलिटी और कंजेशन की समस्या है। इन मुद्दों का धीमे लेन-देन के समय से लेकर बढ़े हुए लेन-देन शुल्क और खराब उपयोगकर्ता अनुभव तक व्यापक प्रभाव पड़ता है।


एक समाधान वेब 3 के लिए एल 2 (परत दो) श्रृंखलाओं का उपयोग करके बहु-श्रृंखला होना है। एथेरियम L2s, जैसे कि ऑप्टिमिज्म , आर्बिट्रम और पॉलीगॉन , एथेरियम नेटवर्क के शीर्ष पर निर्मित होते हैं, लेकिन एथेरियम की तुलना में तेज और सस्ते होते हैं।


हालाँकि, ट्रेडऑफ़ के रूप में, वे अक्सर एथेरियम की तुलना में कम सुरक्षित होते हैं। यही कारण है कि L2s एक सुरक्षित और विकेन्द्रीकृत निपटान और डेटा उपलब्धता परत के लिए पर्दे के पीछे की नींव के रूप में अभी भी Ethereum L1 पर भरोसा करते हुए दिन-प्रतिदिन की उपयोगकर्ता गतिविधियों को संभालते हैं।


यह एक अच्छा समाधान है - हालाँकि, अकेले इथेरियम पर कई L2s हैं; हर एक अपनी बारीकियों और अनुभवों के साथ एक स्टैंडअलोन नेटवर्क।


इन नेटवर्कों और एथेरियम एल1 के बीच इंटरऑपरेट करने और स्थानांतरित करने वाले डैप का निर्माण और उपयोग करना थकाऊ, कठिन और उपयोगकर्ताओं और डेवलपर्स के लिए एक खराब अनुभव हो सकता है।


हमें वेब3 के लिए एक बहु-श्रृंखला अनुभव बनने की आवश्यकता है, जहां उपभोक्ताओं को यह जानने की आवश्यकता नहीं है कि वे किस श्रृंखला का उपयोग कर रहे हैं (और स्पष्ट रूप से, परवाह नहीं करते हैं) और जहां डेवलपर्स किसी भी नेटवर्क पर भरोसा कर सकते हैं जो उनके डैप की जरूरतों का सबसे अच्छा समर्थन करता है। .


ब्लॉकचेन के इस मल्टी-चेन इंटरनेट में जाने से, वेब3 इसमें शामिल सभी लोगों के लिए एक बेहतर अनुभव बन जाता है।


दुर्भाग्य से, dapps को जंजीरों के बीच स्थानांतरित करने की अनुमति देना एक कठिन तकनीकी चुनौती है। इस लेख में, हम एक समाधान देखेंगे - Infura RPC एंडपॉइंट्स और Truffle Boxes का उपयोग करके इन नेटवर्कों को मूल रूप से बनाने और ब्रिज करने के लिए।


विशेष रूप से, हम एथेरियम गोएर्ली टेस्टनेट पर एक प्रोजेक्ट बनाने के लिए ऑप्टिमिज्म ब्रिज ट्रफल बॉक्स का उपयोग करेंगे और ऑप्टिमिज्म गोएर्ली के लिए ब्रिज का उपयोग करेंगे।

इन्फ्यूरा और ट्रफल बॉक्स का उपयोग करके मल्टी-चेन डैप चलाना

ट्रफल बॉक्स

हमारे उदाहरण समाधान के मूल के रूप में, हम Truffle Boxes - "शॉर्टकट" बॉयलरप्लेट्स (जैसे अनुबंध, पुस्तकालय, मॉड्यूल, और यहां तक कि पूरी तरह कार्यात्मक डैप) पर भरोसा करेंगे, जिसका उपयोग आप अपने डैप बनाने के लिए कर सकते हैं।


बहुश्रृंखला समाधानों के लिए, वे कई L2 नेटवर्कों के लिए Infura RPC नोड्स के शीर्ष पर निर्माण करते हैं।


जैसा कि ऊपर उल्लेख किया गया है, हम विशेष रूप से ऑप्टिमिज्म ब्रिज ट्रफल बॉक्स पर भरोसा करेंगे। इस बॉक्स में एल1 और एल2 दोनों से ऑप्टिमिज्म ब्रिज के साथ बातचीत करने के लिए आवश्यक सभी अनुबंध हैं, और परतों के बीच तैनाती, कॉलिंग फ़ंक्शन, और संदेशों/मानों को पारित करने के लिए माइग्रेशन का एक सेट है।


यहां तक कि इसकी एक सहायक स्क्रिप्ट भी है जो हमें यह सब कार्रवाई में देखने के लिए आवश्यक सब कुछ करती है। हमें बस जरूरत की हर चीज पाने के लिए इसे अनबॉक्स करना होगा! Trufflesuite.com के अनुसार, बॉक्स में शामिल हैं:


  • "एक L1 अनुबंध जो आशावाद पुल पर एक संदेश भेजता है
  • एक माइग्रेशन जो एथेरियम से आशावाद को संदेश भेजता है
  • एक L2 अनुबंध जो आशावाद पुल पर एक संदेश भेजता है
  • एक माइग्रेशन जो ऑप्टिमिज्म से एथेरियम को संदेश भेजता है
  • संकलन अनुबंधों को स्वचालित करने, माइग्रेशन चलाने और संदेश भेजने के लिए एक स्क्रिप्ट
  • पुल के पार ईटीएच और डीएओ भेजने को स्वचालित करने के लिए एक स्क्रिप्ट ”


नोट: एक पुल एक उपकरण है जो स्वतंत्र ब्लॉकचेन को एक दूसरे के साथ संवाद करने, टोकन भेजने, एनएफटी आदि भेजने की अनुमति देता है।

आवश्यक शर्तें

आरंभ करने से पहले, हमें निम्नलिखित पूर्वापेक्षाएँ चाहिए:


  • Node.js और इसका पैकेज मैनेजर NPM।
  • निम्नलिखित टर्मिनल कमांड का उपयोग करके सत्यापित करें कि हमारे पास Node.js स्थापित है:

node -v && npm -v

चरण 1 - नेटवर्क तक पहुँचने के लिए एक Infura खाता बनाएँ

एक बार जब आप पूर्वापेक्षाएँ पूरी कर लें, तो लॉग इन (या नए खाते के लिए साइन अप ) करने के लिए Infura वेबसाइट पर जाएँ।


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


"एक नई कुंजी बनाएँ" बटन पर क्लिक करें और आवश्यक जानकारी भरें।


अपनी एपीआई कुंजी बनाने के बाद, आपकी प्रोजेक्ट आईडी आपके डैशबोर्ड पर एपीआई कुंजी अनुभाग के तहत दिखाई देगी, जैसा कि नीचे दिखाया गया है। कॉपी करके कहीं रख दें; आपको इस ट्यूटोरियल में बाद में इसकी आवश्यकता होगी।


चरण 2 - सेटअप और स्थापना

अगला, हम एक ट्रफल ऑप्टिमिज्म ब्रिज बॉक्स स्थापित करेंगे। हम निम्नलिखित कमांड का उपयोग करके आपकी पसंद की किसी भी डायरेक्टरी में अनबॉक्स कमांड चला सकते हैं।


 npx truffle unbox optimism-bridge <DIRECTORY_NAME>


<DIRECTORY_NAME> को अपनी पसंद के डायरेक्टरी नाम से बदलें। वैकल्पिक रूप से, आप Truffle को विश्व स्तर पर स्थापित कर सकते हैं और अनबॉक्स कमांड चला सकते हैं।


 npm install -g truffle truffle unbox optimism-bridge <DIRECTORY_NAME> 



कमांड को अनबॉक्सिंग प्रक्रिया के भाग के रूप में npm इंस्टॉल को डाउनलोड और चलाना चाहिए।


अब, हमारे द्वारा अभी बनाई गई निर्देशिका को नई निर्देशिका में बदलने के लिए निम्न कमांड चलाएँ।


 cd truffle-bridge-demo


नोट: ट्रफल-ब्रिज-डेमो हमारी बनाई गई निर्देशिका का नाम है।


हमारे पास नीचे दिखाई देने वाले जैसा कुछ होना चाहिए।


. dotenv पैकेज स्थापित किया गया है, लेकिन हमें अनबॉक्सिंग के बाद बनाई गई .env फ़ाइल में कुछ जानकारी जोड़ने की आवश्यकता होगी।


truffle-config.ovm.js फ़ाइल उम्मीद करती है कि Ethereum Goerli और Optimism Goerli टेस्टनेट पर कमांड चलाने के लिए .env फ़ाइल में एक GOERLI_MNEMONIC मान मौजूद हो और नेटवर्क से कनेक्ट करने के लिए एक INFURA_KEY हो।


 GOERLI_MNEMONIC="<your-wallet-mnemonic>" INFURA_KEY="<your-infura-key>"


<your-infura-key> को उस जानकारी से बदलें जो हमें पहले हमारे Infura डैशबोर्ड से मिली थी। ( ध्यान दें : कभी भी अपनी निजी कुंजियाँ (स्मरणीय) किसी के साथ साझा न करें और उन्हें सुरक्षित रखें)। और <your-wallet-mnemonic> को अपने स्मरक से बदलें जैसा कि नीचे देखा गया है:


मेटामास्क से स्मरक को पुनः प्राप्त करने के लिए, अपने मेटामास्क पर नीचे दिखाए गए आइकन पर क्लिक करें।



इसके बाद, स्मरक को कॉपी करने के लिए एक्सपोर्ट प्राइवेट की बटन पर क्लिक करें।


Git आपके निजी डेटा की सुरक्षा में सहायता के लिए इस प्रोजेक्ट में .env फ़ाइल की उपेक्षा करता है। गिटहब को अपनी निजी चाबियों का खुलासा करने से बचने के लिए यह अच्छा सुरक्षा अभ्यास है।

चरण 3 - Truffle L2 बॉक्स का उपयोग करके ब्रिजिंग

जब हमने प्रोजेक्ट को अनबॉक्स किया, तो हमारे प्रोजेक्ट के सभी आवश्यक अनुबंध और स्क्रिप्ट हमारे लिए तैयार हो गए। इस अगले चरण में, यह समझने के लिए कि नेटवर्क के बीच ब्रिजिंग और इंटरेक्शन कैसे होता है, अलग-अलग अनुबंधों और माइग्रेशन के माध्यम से चलते हैं।


अनुबंध contract/ethereum/GreeterL1.sol आपको दिखाता है कि L1 से L2 तक ऑप्टिमिज्म ब्रिज पर संदेश कैसे भेजा जाए।


 //SPDX-License-Identifier: Unlicense // This contract runs on L1, and controls a Greeter on L2. pragma solidity ^0.8.0; import { ICrossDomainMessenger } from "@eth-optimism/contracts/libraries/bridge/ICrossDomainMessenger.sol"; contract GreeterL1 { address crossDomainMessengerAddr = 0x5086d1eEF304eb5284A0f6720f79403b4e9bE294; address greeterL2Addr = 0xC0836cCc8FBa87637e782Dde6e6572aD624fb984; function setGreeting(string calldata _greeting) public { bytes memory message; message = abi.encodeWithSignature("setGreeting(string)", _greeting); ICrossDomainMessenger(crossDomainMessengerAddr).sendMessage( greeterL2Addr, message, 1000000 // within the free gas limit amount ); } // function setGreeting } // contract GreeterL1


माइग्रेशन migrations/3_set_L2_greeting.js से आशावाद को संदेश भेजने के लिए उपरोक्त अनुबंध का उपयोग करता है।


 var Greeter = artifacts.require("GreeterL1"); /** * Set L2 Greeting * Run this migration on L1 to update the L1 greeting. */ module.exports = async function (deployer) { console.log("Updating the L2 Greetings contract from L1! 👋👋"); const instance = await Greeter.deployed(); const tx = await instance.setGreeting("👋 Greetings from Truffle!"); console.log(`🙌 Greeter txn confirmed on L1! ${tx.receipt.transactionHash}`); console.log(`🛣️ Bridging message to L2 Greeter contract...`); console.log( `🕐 In about 1 minute, check the Greeter contract "read" function: https://goerli-optimism.etherscan.io/address/0xC0836cCc8FBa87637e782Dde6e6572aD624fb984#readContract` ); };


अगला, contracts/optimism/GreeterL2.sol अनुबंध आशावाद पुल पर दूसरी दिशा (L2->L1) में एक संदेश भेजता है।


 //SPDX-License-Identifier: Unlicense // This contract runs on L2, and controls a Greeter on L1. pragma solidity ^0.8.0; import { ICrossDomainMessenger } from "@eth-optimism/contracts/libraries/bridge/ICrossDomainMessenger.sol"; contract GreeterL2 { address crossDomainMessengerAddr = 0x4200000000000000000000000000000000000007; address greeterL1Addr = 0x7fA4D972bB15B71358da2D937E4A830A9084cf2e; function setGreeting(string calldata _greeting) public { bytes memory message; message = abi.encodeWithSignature("setGreeting(string)", _greeting); ICrossDomainMessenger(crossDomainMessengerAddr).sendMessage( greeterL1Addr, message, 1000000 // irrelevant here ); } // function setGreeting } // contract GreeterL2


माइग्रेशन migrations/4_set_L1_greeting.js उपरोक्त अनुबंध का उपयोग आशावाद से एथेरियम को संदेश भेजने के लिए करता है।


 require("dotenv").config(); const sdk = require("@eth-optimism/sdk"); const ethers = require("ethers"); const Greeter = artifacts.require("GreeterL2"); const goerliMnemonic = process.env["GOERLI_MNEMONIC"]; const infuraKey = process.env["INFURA_KEY"]; const sleep = (milliseconds) => { return new Promise((resolve) => setTimeout(resolve, milliseconds)); }; /** * Set L1 Greeting * Run this migration on L1 to update the L1 greeting. */ module.exports = async function (deployer) { const newGreeting = "👋 Greetings from Truffle!"; //<---- CHANGE THIS VALUE TO YOUR NAME!!! const instance = await Greeter.deployed(); console.log("Updating the L1 Greetings contract from L2! 👋"); const tx = await instance.setGreeting(newGreeting); const txHash = tx.receipt.transactionHash; console.log(`🙌🙌 Greeter txn confirmed on L2! ${txHash}`); console.log( `🛣️ Bridging message to L1 Greeter contract.\n 🕐 This will take at least 1-5 min...` ); // Set providers for Optimism sdk const l1Provider = new ethers.providers.JsonRpcProvider( "https://goerli.infura.io/v3/" + infuraKey ); const l2Provider = new ethers.providers.JsonRpcProvider( "https://optimism-goerli.infura.io/v3/" + infuraKey ); // Connect an L1 signer const wallet = ethers.Wallet.fromMnemonic(goerliMnemonic); const l1Signer = wallet.connect(l1Provider); // Initialize sdk messenger const crossChainMessenger = new sdk.CrossChainMessenger({ l1ChainId: 5, l2ChainId: 420, l1SignerOrProvider: l1Signer, l2SignerOrProvider: l2Provider, }); let statusReady = false; // Sleep for 1 min during L2 -> L1 bridging await sleep(60000); // 60 seconds // Poll the L1 msg status while (!statusReady) { let status = null; status = await crossChainMessenger.getMessageStatus(txHash); statusReady = status == sdk.MessageStatus.READY_FOR_RELAY; if (!statusReady) { console.log( "Message not yet received on L1.\n 🕐 Retrying in 10 seconds..." ); await sleep(10000); // 10 seconds } } console.log("📬 Message received! Finalizing..."); // Open the message on L1 finalize = await crossChainMessenger.finalizeMessage(txHash); console.log( `🎉 Message finalized. Check the L1 Greeter contract "read" function: https://goerli.etherscan.io/address/0x7fA4D972bB15B71358da2D937E4A830A9084cf2e#readContract` ); };


स्क्रिप्ट निर्देशिका में, हमारे पास goerli_bridge_message.mjs और goerli_bridge_value.js भी हैं जो अनुबंधों को संकलित करने, माइग्रेशन चलाने और संदेश भेजने की प्रक्रिया को स्वचालित करते हैं।

चरण 4 - एथेरियम गोएर्ली और ऑप्टिमिज्म गोएर्ली के बीच एक अनुबंध का पूरा संकलन, प्रवासन और ब्रिजिंग

इसके बाद, हम वास्तव में अपना अनुबंध गोएर्ली को तैनात करेंगे। हेल्पर स्क्रिप्ट एथेरियम गोएर्ली और ऑप्टिमिज्म गोएर्ली के बीच संदेशों के संकलन, माइग्रेशन और ब्रिजिंग की सुविधा प्रदान करती है।


उन नेटवर्कों पर, हमें इसका उपयोग करने के लिए टेस्टनेट ईटीएच की आवश्यकता होगी। कुछ प्राप्त करने के लिए, नल का उपयोग करें। हमें आपके Infura खाते में आशावाद ऐड-ऑन भी जोड़ना होगा।


अगला, हम प्रोजेक्ट शुरू करने के लिए निम्न कमांड चलाएंगे।


 npm run deploy 


पूर्ण माइग्रेशन के बाद ब्रिज किए गए संदेश की पुष्टि (इथरस्कैन के माध्यम से) करने के लिए नीचे एक URL है।


चौथा माइग्रेशन पूरा होने पर इथरस्कैन के माध्यम से ब्रिज किए गए संदेश की पुष्टि करने के लिए एक लिंक प्रदान किया जाएगा।


चरण 5 - ब्लॉक एक्सप्लोर के साथ गोएर्ली टेस्टनेट पर परियोजना को सफलतापूर्वक सत्यापित करें

हमने उस परियोजना को सफलतापूर्वक स्थापित, स्थापित, निर्मित, परिनियोजित किया है और उस परियोजना को पूरा किया है जिसे हमने पहले अनबॉक्स किया था। अगला, हम परियोजना को गोएर्ली एथेरियम टेस्टनेट पर सत्यापित करेंगे।


Goerli Etherscan ब्लॉक एक्सप्लोरर पर जाएं और txn एड्रेस 0xbcc1746a9ebbfcfb71665225c1a353a8c8dc9a1aa528a3babcb5b046d615a353 को पेस्ट करें जो हमारे CLI पर तैनात होने पर दिखाई देता है।



https://goerli-optimism.etherscan.io/tx/0xbcc1746a9ebbfcfb71665225c1a353a8c8dc9a1aa528a3babcb5b046d615a353


निष्कर्ष

यदि हम चाहते हैं कि उपयोगकर्ता और डेवलपर अनुभव में सुधार जारी रहे, तो एक बहु-श्रृंखला वेब3 दुनिया महत्वपूर्ण है। और इसे प्राप्त करने के लिए, हमें जंजीरों के बीच तेजी से और निर्बाध रूप से संवाद करने के लिए dapps के तरीकों की आवश्यकता है।


उम्मीद है, ऑप्टिमिज्म ब्रिज ट्रफल बॉक्स का उपयोग करके हम जिस उदाहरण से गुजरे हैं, उसने आपको आरंभ करने का एक अपेक्षाकृत आसान और तेज़ तरीका दिखाया। अधिक जानने के लिए, आधिकारिक दस्तावेज देखें।


आपका दिन वाकई बहुत अच्छा हो!