paint-brush
फाउंड्री और फिगमेंट डेटाहब के साथ एनएफटी प्रोजेक्ट कैसे बनाएं?द्वारा@pnpancholi
2,005 रीडिंग
2,005 रीडिंग

फाउंड्री और फिगमेंट डेटाहब के साथ एनएफटी प्रोजेक्ट कैसे बनाएं?

द्वारा Pradhumna Pancholi2022/05/30
Read on Terminal Reader
Read this story w/o Javascript

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

ट्विटर यकीनन पृथ्वी पर सबसे शक्तिशाली सोशल मीडिया नेटवर्क है, भले ही यह उपयोगकर्ताओं के मामले में वैश्विक शीर्ष दस में रैंक नहीं करता है। साइट का उन्नत खोज फ़ंक्शन उपयोगकर्ताओं को हर बोधगम्य शब्द की खोज करने की अनुमति देता है, इसलिए भले ही आप केवल एक ट्वीट के कुछ शब्दों को याद कर सकें, जिसे आप ढूंढ रहे हैं, ट्विटर आपको इसे खोजने में मदद करेगा। Twitter ऐप के अंदर और बाहर सूचियों का उपयोग करने के कई तरीके हैं, या आप इस तरह के ब्राउज़र एक्सटेंशन का उपयोग कर सकते हैं[ ](https://www.google.com/webstore/detail/twitter-bookmarks-search/flkokionhgagpmnhlngldhbfnblmenen)

Companies Mentioned

Mention Thumbnail
Mention Thumbnail

Coins Mentioned

Mention Thumbnail
Mention Thumbnail
featured image - फाउंड्री और फिगमेंट डेटाहब के साथ एनएफटी प्रोजेक्ट कैसे बनाएं?
Pradhumna Pancholi HackerNoon profile picture


GitHub रेपो:- https://github.com/PradhumnaPancholi/Figbot


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


तब मैं फाउंड्री पर ठोकर खाई। इसमें वह सब कुछ है जो डैप टूल्स बिल्ट-इन प्रतीकात्मक निष्पादन के अलावा प्रदान करता है (जो मेरे लिए कोई समस्या नहीं है क्योंकि मैं ट्रेल ऑफ बिट्स द्वारा मैन्टिकोर ई का उपयोग करता हूं)। और यह ऑडिटिंग से संबंधित है इसलिए कल्पना के किसी भी हिस्से से स्मार्ट अनुबंध विकास में बाधा नहीं है।


कुछ समय के लिए फाउंड्री के साथ काम करने के बाद, मैंने अनुभव का आनंद लिया और इसे दूसरों के साथ साझा करना चाहता था। इसलिए, यह लेख।


यह लेख फाउंड्री, इंस्टॉलेशन प्रक्रिया, एनएफटी विकसित करने (क्योंकि हर कोई इसमें रुचि रखता है), अनुबंध का परीक्षण करने और इसे फिगमेंट डेटाहब के साथ तैनात करने के लाभों से गुजरेगा।




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


फाउंड्री तीन घटकों से बना है:


  1. फोर्ज: एथेरियम टेस्टिंग फ्रेमवर्क (जैसे ट्रफल, हार्डहाट और डैप्टूल)।
  2. कास्ट: ईवीएम स्मार्ट कॉन्ट्रैक्ट्स के साथ इंटरैक्ट करने, ट्रांजैक्शन भेजने और चेन डेटा प्राप्त करने के लिए स्विस आर्मी नाइफ।
  3. एनविल: स्थानीय एथेरियम नोड, गनाचे के समान, हार्डहट नेटवर्क


आज का फोकस फोर्ज पर रहेगा। लेकिन मैं आने वाले हफ्तों में जाति और निहाई पर गहन लेख पोस्ट करूंगा।


क्यों फाउंड्री:

ट्रफल, हार्डहाट और ब्राउनी जैसे कई स्मार्ट अनुबंध विकास उपकरण हैं। लेकिन डैप टूल्स को पहली बार देखने के मेरे प्राथमिक कारणों में से एक मूल सॉलिडिटी टेस्ट था। हार्डहट और ब्राउनी जैसे ढांचे के बीच स्विच करते समय स्मार्ट अनुबंध लिखना मुश्किल नहीं है। और वे प्लगइन्स के साथ अविश्वसनीय उपकरण हैं, लेकिन परीक्षण करने के लिए जावास्क्रिप्ट/टाइपस्क्रिप्ट और पायथन में अच्छी तरह से वाकिफ होना चाहिए।


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


इसके अलावा, बिल्ट-इन फ़ज़िंग, चीट कोड, कास्ट और एनविल इसे स्मार्ट कॉन्ट्रैक्ट्स के परीक्षण के लिए एक ठोस सूट बनाते हैं। जल्द ही आने वाले उन घटकों पर अधिक विस्तृत लेख होंगे। [स्थिर विश्लेषक को एकीकृत करने में आसान]


आइए अब एक एनएफटी परियोजना में गोता लगाएँ और निर्माण करें।


स्थापना:

यदि आप मैक या लिनक्स पर हैं, तो आपको केवल दो कमांड चलाने की जरूरत है:

 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, और परीक्षण। यहां बहुत आत्म-व्याख्यात्मक है, आप अपने अनुबंधों को src में लिखते हैं, परीक्षण में test करते हैं, और lib में आपके द्वारा स्थापित सभी पुस्तकालय शामिल हैं, उदाहरण के लिए, OpenZeppelin। इसके अलावा, आपको foundry.toml मिलता है जिसमें hardhat.config.js और brownie-config.yaml कॉन्फिग.यामल जैसे सभी कॉन्फ़िगरेशन होते हैं यदि आपने उन ढांचे का उपयोग किया है। एक और प्यारी चीज है .github, जहां आप अपने Github Actions को लिख सकते हैं। मुझे टीम में काम करते समय परीक्षणों के लिए यह वास्तव में सहायक लगता है।


चलो निर्माण शुरू करें! हम एक सीमित आपूर्ति, लागत (ढलाई के लिए) और निकासी के साथ फिगबॉट नामक एक साधारण एनएफटी बनाएंगे। इस दृष्टिकोण के साथ, हम विभिन्न परीक्षणों के लिए किनारों को कवर कर सकते हैं। सबसे पहले, अनुबंध.सोल और test/Contract.t.sol Contract.sol t.sol का नाम बदलकर क्रमशः Figbot.sol और Figbot.t.sol । अब, हम Openzeppelin के बिना स्मार्ट अनुबंध नहीं लिख सकते हैं, है ना?


फाउंड्री के साथ पुस्तकालय स्थापित करना हार्डहट और ब्राउनी से थोड़ा अलग है। हमारे पास 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


  1. राज्य चर सेट करना:

    1. MAX_SUPPLY से 100
    2. 0.69 ईथर की COST
    3. TOKEN_URI से CID, हम पिनाटा से प्राप्त करते हैं
  2. टोकन आईडी के लिए काउंटर का उपयोग करना:

    1. using Counters for Counters.Counter;
    2. Counters.Counter private tokenIds;
  3. ERC721 कंस्ट्रक्टर:

    1. constructor() ERC721(“Figbot”, “FBT”) {}
  4. टकसाल समारोह:

    1. जांचें कि क्या msg.value COST से अधिक है
    2. जांचें कि क्या tokenIds.current() MAX_SUPPLY से अधिक या बराबर है
    3. _safeMint और _setTokenURI निष्पादित करें
  5. निकासी समारोह:

    1. 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); }
  6. कुल आपूर्ति समारोह:

    1. function totalSupply() public view returns (uint256) { return _tokenIds.current(); }


अनुबंध का परीक्षण:

जैसा कि हम सभी जानते हैं, हमारे स्मार्ट अनुबंधों का परीक्षण करना वास्तव में महत्वपूर्ण है। इस खंड में, हम forge test की एक ठोस समझ प्राप्त करने के लिए कुछ टेस्ट लिखेंगे और देशी सॉलिडिटी में टेस्ट लिखने की आदत डालेंगे। हमारे परीक्षण परिदृश्य में फिट होने के लिए खाता राज्यों का प्रबंधन करने के लिए हम तीन फाउंड्री चीट कोड (मैं उन्हें प्यार करता हूँ!)


हम निम्नलिखित परिदृश्यों के लिए परीक्षण करेंगे:

  1. अधिकतम आपूर्ति
  2. सफल टकसाल
  3. अपर्याप्त संतुलन के कारण विफल टकसाल
  4. निकासी (मालिक द्वारा)


भ्रामक कोड

जैसा कि हमारे स्मार्ट अनुबंधों में जटिल तर्क हो सकते हैं। और उनसे राज्य के आधार पर अलग-अलग व्यवहार करने की उम्मीद की जाती है, खाता, समय, आदि का इस्तेमाल किया जाता है। ऐसे परिदृश्यों से निपटने के लिए, हम ब्लॉकचैन की स्थिति का प्रबंधन करने के लिए चीटकोड का उपयोग कर सकते हैं। हम इन चीटकोड्स का उपयोग vm इंस्टेंस का उपयोग करके कर सकते हैं, जो फाउंड्री की Test लाइब्रेरी का एक हिस्सा है।


हम अपने परीक्षणों में तीन चीटकोड का उपयोग करेंगे:

  1. startPrank : बाद की सभी कॉलों के लिए msg.sender सेट करता है जब तक कि stopPrank को कॉल न किया जाए।

  2. stopPrank :

    startPrank द्वारा शुरू किए गए एक सक्रिय शरारत को रोकता है, startPrank को कॉल करने से पहले msg.sender और tx.origin को मानों पर startPrank कर देता है।

  3. 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 का उपयोग करते हैं कि क्या दो मान समान हैं।

हम अपने MaxSupply फ़ंक्शन को कॉल करते हैं और परीक्षण करते हैं कि क्या परिणाम मान 100 है, जैसा कि हमने अपने अनुबंध में वर्णित किया है। और हम अपने परीक्षण चलाने के लिए forge test का उपयोग करते हैं।


और वोइला !!! हमारे पास एक उत्तीर्ण परीक्षा है।

टेस्ट टकसाल:

अब जबकि हमने एक सरल परीक्षण लिख लिया है, आइए एक चीटकोड के साथ लिखें। हमारे अनुबंध का प्राथमिक कार्य।

  1. उपयोगकर्ता खाते को ऐलिस में बदलें।
  2. ऐलिस के संतुलन को 1 ईथर पर सेट करें
  3. टकसाल समारोह को बुलाओ
  4. जाँच करें कि क्या balanceOf ऐलिस 1 . है

टेस्टफेल मिंट:

हमारे पास एक और परीक्षण फ़ंक्शन है जिसका उपयोग उन परीक्षणों के लिए किया जाता है जिन्हें हम विफल होने की उम्मीद करते हैं। ऐसे परीक्षण के लिए प्रयुक्त उपसर्ग testFail है। यदि कॉलर के पास अपर्याप्त धन है तो हम परीक्षण करेंगे कि mint फ़ंक्शन वापस आ जाता है या नहीं।

  1. उपयोगकर्ता खाते को बॉब में बदलें
  2. बॉब के संतुलन को 0.5 ईथर पर सेट करें (हमारा एनएफटी 0.69 ईथर है)
  3. टकसाल समारोह को कॉल करें (पर्याप्त धन नहीं होने के कारण इसे वापस कर दिया जाएगा)
  4. जांचें कि क्या balanceOf बॉब 1 . है

क्योंकि टकसाल नहीं गुजरा, बॉब का संतुलन 1 नहीं होने वाला है। इसलिए, यह विफल हो जाएगा, जो कि वास्तव में हम परीक्षण के लिए उपयोग किए testFail हैं। तो जब आप forge test चलाते हैं, तो यह पास हो जाएगा।

टेस्ट वापसी:

यहां हम एक ऐसे फ़ंक्शन का परीक्षण करेंगे जिसे केवल "स्वामी" ही सफलतापूर्वक कर सकता है। इस परीक्षण के लिए, हम करेंगे:

  1. उपयोगकर्ता को बॉब में बदलें
  2. बॉब के खाते में 1 ईथर का संतुलन दें
  3. बॉब के खाते से मिंट ए फिगबॉट (यह अनुबंध को 0.69 ईथर का संतुलन देगा)
  4. उपयोगकर्ता को स्वामी खाते में बदलें
  5. withdrawFunds निधि कार्य करें (यदि सफल हो, तो इसे स्वामी का शेष 0.69 ईथर बनाना चाहिए)
  6. सत्यापित करने के लिए, हम दावा करते हैं कि मालिक का शेष 0.69 ईथर है

परिनियोजन:

अब जब हमने अपने अनुबंध का परीक्षण कर लिया है, तो इसे लागू करने का समय आ गया है। हमें एक वॉलेट (कुछ रिंकीबी टेस्ट ईटीएच के साथ) और एक आरपीसी यूआरएल के लिए निजी कुंजी की आवश्यकता है। हमारे RPC URL के लिए, हम Figment DataHu का उपयोग करेंगे।



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


फिगमेंट डेटाहब की स्थापना:

  1. Figment DataHub पर एक अकाउंट बनाएं।
  2. "नया ऐप बनाएं" पर क्लिक करें।
  3. ऐप का नाम भरें।
  4. पर्यावरण के लिए "स्टेजिंग" चुनें।
  5. दिए गए विकल्पों में से "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

बधाई हो! अब आप फाउंड्री का उपयोग करके स्मार्ट अनुबंध लिख सकते हैं, परीक्षण कर सकते हैं और तैनात कर सकते हैं। मुझे आशा है कि आपने इस लेख से आनंद लिया और सीखा। मुझे यह लिखने में वाकई बहुत अच्छा लगा। बेझिझक मुझे इसके बारे में अपने विचार बताएं।