GitHub रेपो:- https://github.com/PradhumnaPancholi/Figbot ज़रा सुनिए सभी! कुछ समय पहले, मैं सीख रहा था क्योंकि इसमें स्मार्ट कॉन्ट्रैक्ट्स को विकसित करने और ऑडिट करने के लिए शानदार टूल हैं। और हालांकि मुझे अनुभव पसंद आया, मुझे जल्द ही पता चला कि यह गुप्त विकास के चरण में है। इसका मतलब है कि आकस्मिक/व्यक्तिगत उपयोगकर्ता समर्थन और अपडेट के लिए अनुरक्षकों पर निर्भर नहीं रह सकते हैं। डैप टूल्स तब मैं पर ठोकर खाई। इसमें वह सब कुछ है जो डैप टूल्स बिल्ट-इन प्रतीकात्मक निष्पादन के अलावा प्रदान करता है (जो मेरे लिए कोई समस्या नहीं है क्योंकि मैं ट्रेल ऑफ बिट्स द्वारा ई का उपयोग करता हूं)। और यह ऑडिटिंग से संबंधित है इसलिए कल्पना के किसी भी हिस्से से स्मार्ट अनुबंध विकास में बाधा नहीं है। फाउंड्री मैन्टिकोर कुछ समय के लिए फाउंड्री के साथ काम करने के बाद, मैंने अनुभव का आनंद लिया और इसे दूसरों के साथ साझा करना चाहता था। इसलिए, यह लेख। यह लेख फाउंड्री, इंस्टॉलेशन प्रक्रिया, एनएफटी विकसित करने (क्योंकि हर कोई इसमें रुचि रखता है), अनुबंध का परीक्षण करने और इसे के साथ तैनात करने के लाभों से गुजरेगा। फिगमेंट डेटाहब फाउंड्री रस्ट में लिखे गए एथेरियम एप्लिकेशन डेवलपमेंट के लिए एक तेज, पोर्टेबल और मॉड्यूलर टूलकिट है। फाउंड्री तीन घटकों से बना है: एथेरियम टेस्टिंग फ्रेमवर्क (जैसे ट्रफल, हार्डहाट और डैप्टूल)। फोर्ज: ईवीएम स्मार्ट कॉन्ट्रैक्ट्स के साथ इंटरैक्ट करने, ट्रांजैक्शन भेजने और चेन डेटा प्राप्त करने के लिए स्विस आर्मी नाइफ। कास्ट: स्थानीय एथेरियम नोड, गनाचे के समान, हार्डहट नेटवर्क एनविल: आज का फोकस लेकिन मैं आने वाले हफ्तों में जाति और निहाई पर गहन लेख पोस्ट करूंगा। फोर्ज पर रहेगा। क्यों फाउंड्री: ट्रफल, हार्डहाट और ब्राउनी जैसे कई स्मार्ट अनुबंध विकास उपकरण हैं। लेकिन डैप टूल्स को पहली बार देखने के मेरे प्राथमिक कारणों में से एक मूल सॉलिडिटी टेस्ट था। हार्डहट और ब्राउनी जैसे ढांचे के बीच स्विच करते समय स्मार्ट अनुबंध लिखना मुश्किल नहीं है। और वे प्लगइन्स के साथ अविश्वसनीय उपकरण हैं, लेकिन परीक्षण करने के लिए जावास्क्रिप्ट/टाइपस्क्रिप्ट और पायथन में अच्छी तरह से वाकिफ होना चाहिए। फाउंड्री हमें सॉलिडिटी में मूल रूप से अपने परीक्षण लिखने की अनुमति देता है। यह नए डेवलपर्स को ऑनबोर्ड करने में बहुत समय बचाता है और प्रक्रिया को आसान बनाता है। लोगों को स्मार्ट अनुबंध विकास में अपना रास्ता बनाने में मदद करने के अपने अनुभव में, मैंने सीखा है कि जूनियर डेवलपर्स के लिए डीएओ/समुदाय-अनुरक्षित परियोजनाओं के साथ जुड़ने का सबसे अच्छा और सबसे कुशल तरीका परीक्षण लिखना और कोड-बेस के बारे में सीखना है। मुझे याद है कि एक बार उल्लेख किया था कि उन्होंने बैंकलेस पर फाइनेंस विकसित करते समय उसी दृष्टिकोण का उपयोग किया था। स्कूपी ट्रूपल्स ने अल्केमिक्स इसके अलावा, बिल्ट-इन फ़ज़िंग, चीट कोड, कास्ट और एनविल इसे स्मार्ट कॉन्ट्रैक्ट्स के परीक्षण के लिए एक ठोस सूट बनाते हैं। जल्द ही आने वाले उन घटकों पर अधिक विस्तृत लेख होंगे। [स्थिर विश्लेषक को एकीकृत करने में आसान] आइए अब एक एनएफटी परियोजना में गोता लगाएँ और निर्माण करें। स्थापना: यदि आप मैक या लिनक्स पर हैं, तो आपको केवल दो कमांड चलाने की जरूरत है: curl -L https://foundry.paradigm.xyz | bash foundryup चलाने से पहले टर्मिनल को बंद करना सुनिश्चित करें। foundryup और वोइला! आप सब कर चुके हैं। विंडोज के लिए, आपको रस्ट इंस्टॉल करना होगा और फिर: cargo install --git https://github.com/foundry-rs/foundry --locked परियोजना सेटअप: इस लेख के लिए, हम एक साधारण NFT प्रोजेक्ट बनाएंगे जिसे Figbots कहा जाता है। "फिगबॉट्स" नामक एक निर्देशिका बनाकर प्रारंभ करें। और जब आप निर्देशिका के अंदर हों तो चलाएं। यह कमांड आपके लिए इनिशियलाइज़ के साथ एक फाउंड्री प्रोजेक्ट तैयार करेगा। forge init git आइए फ़ोल्डर संरचना पर एक त्वरित नज़र डालें। आपके पास तीन प्राथमिक फ़ोल्डर हैं, अर्थात् src, lib, और परीक्षण। यहां बहुत आत्म-व्याख्यात्मक है, आप अपने अनुबंधों को में लिखते हैं, परीक्षण में करते हैं, और में आपके द्वारा स्थापित सभी पुस्तकालय शामिल हैं, उदाहरण के लिए, OpenZeppelin। इसके अलावा, आपको मिलता है जिसमें और कॉन्फिग.यामल जैसे सभी कॉन्फ़िगरेशन होते हैं यदि आपने उन ढांचे का उपयोग किया है। एक और प्यारी चीज है .github, जहां आप अपने Github Actions को लिख सकते हैं। मुझे टीम में काम करते समय परीक्षणों के लिए यह वास्तव में सहायक लगता है। src test lib foundry.toml hardhat.config.js brownie-config.yaml चलो निर्माण शुरू करें! हम एक सीमित आपूर्ति, लागत (ढलाई के लिए) और निकासी के साथ फिगबॉट नामक एक साधारण एनएफटी बनाएंगे। इस दृष्टिकोण के साथ, हम विभिन्न परीक्षणों के लिए किनारों को कवर कर सकते हैं। सबसे पहले, अनुबंध.सोल और t.sol का नाम बदलकर क्रमशः और । अब, हम Openzeppelin के बिना स्मार्ट अनुबंध नहीं लिख सकते हैं, है ना? test/Contract.t.sol Contract.sol Figbot.sol Figbot.t.sol फाउंड्री के साथ पुस्तकालय स्थापित करना हार्डहट और ब्राउनी से थोड़ा अलग है। हमारे पास npm या pip पैकेज नहीं हैं। हम फाउंड्री में सीधे स्रोत (GitHub रेपो) से पुस्तकालय स्थापित करते हैं। forge install Openzeppelin/openzeppelin-contracts अब हम अपना NFT बनाने के लिए ERC721URIStorage.sol एक्सटेंशन आयात कर सकते हैं। यह जांचने के लिए कि सब कुछ ठीक है, हम कमांड चला सकते हैं, और यह हमारी परियोजना को संकलित करेगा। अगर कुछ गड़बड़ है तो कंपाइलर आप पर चिल्लाएगा। अन्यथा, आपको एक सफल संकलन मिलेगा। forge build निर्भरता प्रबंधन किसी भी अन्य पैकेज मैनेजर की तरह, फोर्ज आपको अपनी निर्भरता को प्रबंधित करने के लिए और का उपयोग करने की अनुमति देता है। forge install <lib>, forge remove <lib> forge update <lib> आइए NFT अनुबंध पूरा करें: हम Openzeppelin के तीन अनुबंधों का उपयोग करेंगे। काउंटर, ERC721URISभंडारण, और स्वामित्व योग्य। पिनाटा का उपयोग करके अपनी को में अपलोड करने का समय आ गया है। हम स्वामित्व वाले अनुबंध का उपयोग परिनियोजन पते को सेट करने के लिए करते हैं और केवल स्वामी को धन निकालने की अनुमति देने के लिए केवल संशोधक तक पहुंच रखते हैं। एनएफटी अनुबंध को सरल रखने के लिए टोकन आईडी और के साथ हमारी मदद करने के लिए । संपत्ति आईपीएफएस owner onlyOwner ERC721URIStorage Counters राज्य चर सेट करना: से 100 MAX_SUPPLY 0.69 ईथर की COST से CID, हम पिनाटा से प्राप्त करते हैं TOKEN_URI टोकन आईडी के लिए काउंटर का उपयोग करना: using Counters for Counters.Counter; Counters.Counter private tokenIds; ERC721 कंस्ट्रक्टर: constructor() ERC721(“Figbot”, “FBT”) {} टकसाल समारोह: जांचें कि क्या से अधिक है msg.value COST जांचें कि क्या से अधिक या बराबर है tokenIds.current() MAX_SUPPLY और निष्पादित करें _safeMint _setTokenURI निकासी समारोह: function withdrawFunds() external onlyOwner { uint256 balance = address(this).balance; require(balance > 0, "No ether left to withdraw"); (bool success, ) = (msg.sender).call{value: balance}(""); require(success, "Withdrawal Failed"); emit Withdraw(msg.sender, balance); } कुल आपूर्ति समारोह: function totalSupply() public view returns (uint256) { return _tokenIds.current(); } अनुबंध का परीक्षण: जैसा कि हम सभी जानते हैं, हमारे स्मार्ट अनुबंधों का परीक्षण करना वास्तव में महत्वपूर्ण है। इस खंड में, हम की एक ठोस समझ प्राप्त करने के लिए कुछ टेस्ट लिखेंगे और देशी सॉलिडिटी में टेस्ट लिखने की आदत डालेंगे। हमारे परीक्षण परिदृश्य में फिट होने के लिए खाता राज्यों का प्रबंधन करने के लिए हम तीन (मैं उन्हें प्यार करता हूँ!) forge test फाउंड्री चीट कोड हम निम्नलिखित परिदृश्यों के लिए परीक्षण करेंगे: अधिकतम आपूर्ति सफल टकसाल अपर्याप्त संतुलन के कारण विफल टकसाल निकासी (मालिक द्वारा) भ्रामक कोड जैसा कि हमारे स्मार्ट अनुबंधों में जटिल तर्क हो सकते हैं। और उनसे राज्य के आधार पर अलग-अलग व्यवहार करने की उम्मीद की जाती है, खाता, समय, आदि का इस्तेमाल किया जाता है। ऐसे परिदृश्यों से निपटने के लिए, हम ब्लॉकचैन की स्थिति का प्रबंधन करने के लिए चीटकोड का उपयोग कर सकते हैं। हम इन चीटकोड्स का उपयोग इंस्टेंस का उपयोग करके कर सकते हैं, जो फाउंड्री की लाइब्रेरी का एक हिस्सा है। vm Test हम अपने परीक्षणों में तीन चीटकोड का उपयोग करेंगे: : बाद की सभी कॉलों के लिए सेट करता है जब तक कि को कॉल न किया जाए। startPrank msg.sender stopPrank : stopPrank द्वारा शुरू किए गए एक सक्रिय शरारत को रोकता है, startPrank को कॉल करने से पहले और को मानों पर कर देता है। startPrank msg.sender tx.origin startPrank : दिए गए पते के बैलेंस को दिए गए बैलेंस पर सेट करता है। deal स्थापित करना फाउंड्री एक अंतर्निहित परीक्षण पुस्तकालय के साथ आता है। हम इस परीक्षण पुस्तकालय, हमारे अनुबंध (जिसे हम परीक्षण करना चाहते हैं), परीक्षण को परिभाषित करने, चर सेट करने और फ़ंक्शन को आयात करके शुरू करते हैं। setUp pragma solidity ^0.8.13; import"forge-std/Test.sol"; import "../src/Figbot.sol"; contract FigbotTest is Test { Figbot figbot; address owner = address(0x1223); address alice = address(0x1889); address bob = address(0x1778); function setUp() public { vm.startPrank(owner); figbot = new Figbot(); vm.stopPrank(); } } राज्य चर के लिए, हम प्रकार का एक चर बनाते हैं। यह वह स्थान भी है जहां मैं उपयोगकर्ता खातों को परिभाषित करना पसंद करता हूं। फाउंड्री में, आप सिंटैक्स का उपयोग करके किसी पते का वर्णन कर सकते हैं। इसके लिए आप किन्हीं चार अक्षरांकीय वर्णों का प्रयोग कर सकते हैं। मैंने क्रमशः मालिक, ऐलिस और बॉब नाम के खाते बनाए हैं। Figbot figbot address(0x1243) अब हमारा फंक्शन। फाउंड्री में परीक्षण लिखने के लिए यह एक आवश्यकता है। यह वह जगह है जहां हम उस प्रकृति की सभी तैनाती और चीजें करते हैं। मैंने उपयोगकर्ता को "स्वामी" में बदलने के लिए का उपयोग किया। डिफ़ॉल्ट रूप से, फाउंड्री परीक्षण अनुबंधों को तैनात करने के लिए एक विशिष्ट पते का उपयोग करता है। लेकिन इससे फंड जैसे विशेष विशेषाधिकारों के साथ कार्यों का परीक्षण करना कठिन हो जाता है। इसलिए, हम इस परिनियोजन के लिए "स्वामी" खाते में स्विच करते हैं। setUp startPrank withdrawFunds परीक्षण अधिकतम आपूर्ति: फाउंड्री कन्वेंशन सीखने के लिए एक साधारण अभिकथन परीक्षण से शुरू करें। परंपरा के अनुसार, सभी परीक्षण कार्यों में उपसर्ग होना चाहिए। और हम यह जांचने के लिए का उपयोग करते हैं कि क्या दो मान समान हैं। test assertEq हम अपने फ़ंक्शन को कॉल करते हैं और परीक्षण करते हैं कि क्या परिणाम मान 100 है, जैसा कि हमने अपने अनुबंध में वर्णित किया है। और हम अपने परीक्षण चलाने के लिए का उपयोग करते हैं। MaxSupply forge test और वोइला !!! हमारे पास एक उत्तीर्ण परीक्षा है। टेस्ट टकसाल: अब जबकि हमने एक सरल परीक्षण लिख लिया है, आइए एक चीटकोड के साथ लिखें। हमारे अनुबंध का प्राथमिक कार्य। उपयोगकर्ता खाते को ऐलिस में बदलें। ऐलिस के संतुलन को 1 ईथर पर सेट करें टकसाल समारोह को बुलाओ जाँच करें कि क्या ऐलिस 1 . है balanceOf टेस्टफेल मिंट: हमारे पास एक और परीक्षण फ़ंक्शन है जिसका उपयोग उन परीक्षणों के लिए किया जाता है जिन्हें हम विफल होने की उम्मीद करते हैं। ऐसे परीक्षण के लिए प्रयुक्त उपसर्ग है। यदि कॉलर के पास अपर्याप्त धन है तो हम परीक्षण करेंगे कि फ़ंक्शन वापस आ जाता है या नहीं। testFail mint उपयोगकर्ता खाते को बॉब में बदलें बॉब के संतुलन को 0.5 ईथर पर सेट करें (हमारा एनएफटी 0.69 ईथर है) टकसाल समारोह को कॉल करें (पर्याप्त धन नहीं होने के कारण इसे वापस कर दिया जाएगा) जांचें कि क्या बॉब 1 . है balanceOf क्योंकि टकसाल नहीं गुजरा, बॉब का संतुलन 1 नहीं होने वाला है। इसलिए, यह विफल हो जाएगा, जो कि वास्तव में हम परीक्षण के लिए उपयोग किए हैं। तो जब आप चलाते हैं, तो यह पास हो जाएगा। testFail forge test टेस्ट वापसी: यहां हम एक ऐसे फ़ंक्शन का परीक्षण करेंगे जिसे केवल "स्वामी" ही सफलतापूर्वक कर सकता है। इस परीक्षण के लिए, हम करेंगे: उपयोगकर्ता को बॉब में बदलें बॉब के खाते में 1 ईथर का संतुलन दें बॉब के खाते से मिंट ए फिगबॉट (यह अनुबंध को 0.69 ईथर का संतुलन देगा) उपयोगकर्ता को स्वामी खाते में बदलें निधि कार्य करें (यदि सफल हो, तो इसे स्वामी का शेष 0.69 ईथर बनाना चाहिए) withdrawFunds सत्यापित करने के लिए, हम दावा करते हैं कि मालिक का शेष 0.69 ईथर है परिनियोजन: अब जब हमने अपने अनुबंध का परीक्षण कर लिया है, तो इसे लागू करने का समय आ गया है। हमें एक वॉलेट (कुछ रिंकीबी टेस्ट ईटीएच के साथ) और एक आरपीसी यूआरएल के लिए निजी कुंजी की आवश्यकता है। हमारे RPC URL के लिए, हम का उपयोग करेंगे। Figment DataHu फिगमेंट डेटाहब हमें वेब 3 पर विकसित करने के लिए बुनियादी ढांचा प्रदान करता है। यह एथेरियम, सेलो, सोलाना, टेरा इत्यादि जैसी कई श्रृंखलाओं का समर्थन करता है। फिगमेंट डेटाहब की स्थापना: पर एक अकाउंट बनाएं। Figment DataHub "नया ऐप बनाएं" पर क्लिक करें। ऐप का नाम भरें। पर्यावरण के लिए "स्टेजिंग" चुनें। दिए गए विकल्पों में से "Ethereum" चुनें। आप "प्रोटोकॉल" टैब के अंतर्गत रिंकीबी के लिए अपना आरपीसी यूआरएल प्राप्त कर सकते हैं। इन दोनों चीजों को पर्यावरण चर के रूप में दर्ज करने के लिए अपना टर्मिनल खोलें। export FIG_RINKEBY_URL=<Your RPC endpoint> export PVT_KEY=<Your wallets private key> एक बार हमारे पास पर्यावरण चर हो जाने के बाद, हम तैनाती के लिए पूरी तरह तैयार हैं forge create Figbot --rpc-url=$FIG_RINKEBY_URL --private-key=$PVT_KEY सत्यापन: हम यहाँ लगभग कर चुके हैं। अब तक, हमने फाउंड्री और फिगमेंट डेटाहब के साथ एक स्मार्ट अनुबंध लिखा, परीक्षण और तैनात किया है। लेकिन हम अभी पूरी तरह से नहीं बने हैं। अब हम अपने अनुबंध को सत्यापित करने जा रहे हैं। इसके लिए हमें अपनी एपीआई कुंजी सेट करनी होगी। इथरस्कैन export ETHERSCAN_API=<Your Etherscan API Key> और अब हम अपने स्मार्ट अनुबंध को सत्यापित कर सकते हैं। forge verify-contract --chain-id <Chain-Id> --num-of-optimizations 200 --compiler-version <Compiler Version> src/<Contract File>:<Contract> $ETHERSCAN_API बधाई हो! अब आप फाउंड्री का उपयोग करके स्मार्ट अनुबंध लिख सकते हैं, परीक्षण कर सकते हैं और तैनात कर सकते हैं। मुझे आशा है कि आपने इस लेख से आनंद लिया और सीखा। मुझे यह लिखने में वाकई बहुत अच्छा लगा। बेझिझक मुझे इसके बारे में अपने विचार बताएं।