अब जब आपने हमारा solidity tutorial पूरा कर लिया है, तो आगे क्या?
अब आपके पास निम्नलिखित में से कोई भी प्रोजेक्ट बनाने के लिए पर्याप्त ज्ञान है। ज्ञान अध्ययन से आता है, लेकिन कौशल अभ्यास से आता है। यदि आप एक सफल Solidity डेवलपर बनना चाहते हैं तो आपको ज्ञान और कौशल दोनों की आवश्यकता है! आपने अब तक जो कुछ भी सीखा है उसे लागू करने के लिए आप क्या बना सकते हैं, इसके बारे में यहां कुछ सुझाव दिए गए हैं।
आपके पास वह सब कुछ है जो आपको जानने की जरूरत है, इसलिए यदि आप एक Solidity इंजीनियर बनने के बारे में गंभीर हैं तो काम में जुट जाएं!
इन प्रोजेक्ट्स को लगभग सबसे आसान से सबसे कठिन के क्रम में रखा गया है, लेकिन आपके पास इनमें से किसी को भी बनाने के लिए आवश्यक सभी बैकग्राउंड नॉलेज है।
1. ERC20 टोकन के साथ NFT खरीदें
एक क्लासिक NFT बनाएं जिसे केवल किसी विशेष ERC20 टोकन से भुगतान करके ही मिंट (mint) किया जा सकता है।
2. टाइम अनलॉक्ड (Time unlocked) ERC20 / वेस्टिंग (vesting) कॉन्ट्रैक्ट
भुगतान करने वाला व्यक्ति एक कॉन्ट्रैक्ट में एक निश्चित मात्रा में टोकन जमा करता है, लेकिन प्राप्तकर्ता n दिनों के दौरान केवल 1/n टोकन ही निकाल (withdraw) सकता है।
3. NFT स्वैप (Swap) कॉन्ट्रैक्ट
दो लोग अपने NFTs को एक ट्रस्टमलेस (trustless) तरीके से ट्रेड करना चाहते हैं। एक उपयोगकर्ता कॉन्ट्रैक्ट पर एक स्वैप बनाता है, जो address और id का एक पेयर (pair) है, जहां address NFT का स्मार्ट कॉन्ट्रैक्ट पता है और id NFT की tokenId है। एक व्यक्ति NFT केवल तभी जमा कर सकता है जब id उस address और id से मेल खाता हो। दूसरी पार्टी केवल तभी जमा कर सकती है जब उनका NFT स्वैप के address और id से मेल खाता हो।
एक बार दोनों के जमा हो जाने पर, कोई भी पार्टी swap कॉल कर सकती है।
विचार करने के लिए कुछ कॉर्नर केस:
- ट्रेडर्स को अपने NFT को कॉन्ट्रैक्ट में कब तक (यदि आवश्यक हो) रखने के लिए मजबूर किया जाना चाहिए?
4. क्राउडफंडिंग (Crowdfunding) ERC20 कॉन्ट्रैक्ट
आपके कॉन्ट्रैक्ट में एक createFundraiser() फ़ंक्शन होना चाहिए जिसमें एक लक्ष्य (goal) और एक समय सीमा (deadline) आर्ग्यूमेंट्स के रूप में हो। दानकर्ता किसी दिए गए fundraiserId पर donate() कर सकते हैं। यदि समय सीमा से पहले लक्ष्य पूरा हो जाता है, तो जिस वॉलेट ने createFundraiser() को कॉल किया था, वह उस अभियान से जुड़े सभी फंड्स को withdraw() कर सकता है। अन्यथा, यदि लक्ष्य पूरा हुए बिना समय सीमा बीत जाती है, तो दानकर्ता अपना दान वापस निकाल सकते हैं। एक ऐसा कॉन्ट्रैक्ट बनाएं जो Ether को सपोर्ट करता हो और दूसरा जो ERC20 टोकन को सपोर्ट करता हो।
विचार करने के लिए कुछ कॉर्नर केस:
- क्या होगा यदि एक ही address कई बार दान करता है?
- क्या होगा यदि एक ही address कई अलग-अलग अभियानों में दान करता है?
5. इंग्लिश ऑक्शन (English auction) कॉन्ट्रैक्ट
एक विक्रेता समय सीमा और रिज़र्व प्राइस (reserve price) के साथ NFT को कॉन्ट्रैक्ट में जमा करने के लिए deposit() कॉल करता है। खरीदार समय सीमा तक उस NFT पर बोली (bid) लगा सकते हैं, और सबसे ऊंची बोली जीतती है। यदि रिज़र्व प्राइस पूरा नहीं होता है, तो NFT नहीं बेचा जाता है। एक ही समय में कई नीलामियां (auctions) हो सकती हैं। जो खरीदार नहीं जीत पाए, वे अपनी बोली वापस ले सकते हैं। विजेता अपनी बोली वापस नहीं ले सकता है और उसे NFT खरीदने के लिए ट्रेड पूरा करना होगा। विक्रेता sellerEndAuction() कॉल करके भी नीलामी समाप्त कर सकता है, जो केवल समय सीमा समाप्त होने के बाद काम करता है, और यदि रिज़र्व पूरा हो गया हो। विजेता को NFT ट्रांसफर कर दिया जाएगा और विक्रेता को ETH प्राप्त होगा।
6. सिंपल NFT मार्केटप्लेस
विक्रेता मूल्य और समय सीमा (expiration) निर्दिष्ट करते हुए अपने NFT को sell() कर सकते हैं। NFT को कॉन्ट्रैक्ट में जमा करने के बजाय, वे कॉन्ट्रैक्ट को उनसे इसे वापस लेने (withdraw) की मंजूरी (approval) देते हैं। यदि कोई खरीदार आता है और समय सीमा से पहले निर्धारित मूल्य का भुगतान करता है, तो NFT विक्रेता से खरीदार को ट्रांसफर कर दिया जाता है और खरीदार का ether विक्रेता को ट्रांसफर कर दिया जाता है।
विक्रेता किसी भी समय बिक्री को cancel() कर सकता है।
कॉर्नर केस:
- क्या होगा यदि विक्रेता एक ही NFT को दो बार लिस्ट करता है? सैद्धांतिक रूप से ऐसा हो सकता है क्योंकि वे मार्केटप्लेस में NFT को ट्रांसफर नहीं करते हैं।
7. स्टेक टुगेदर (Stake Together)
एक कॉन्ट्रैक्ट के पास 1,000,000 cloud coins हैं। कोई भी व्यक्ति जो beginDate से शुरू होकर कॉन्ट्रैक्ट में cloud coin स्टेक (stake) करता है और उसे 7 दिनों तक रखता है, उसे समाप्ति (expiration) पर कुल स्टेक में उसके हिस्से के अनुपात में इनाम मिलेगा। उदाहरण के लिए, मान लें कि एलिस 5,000 cloud coin स्टेक करती है, लेकिन समाप्ति पर कुल स्टेक की गई राशि 25,000 cloud coin है। तब एलिस 200,000 इनाम की हकदार होगी, क्योंकि उसने सभी उपयोगकर्ताओं का 20% हिस्सा दिया है।
चेतावनी: अनजाने में इनामों की गणना इस तरह से करना बहुत आसान है कि कोई दुर्भावनापूर्ण (malicious) व्यक्ति सिस्टम का दुरुपयोग कर सके। कॉर्नर केस के बारे में ध्यान से सोचें!
8. साधारण लॉटरी (Simple lottery)
कोई भी उपयोगकर्ता createLottery कॉल कर सकता है और अगले 24 घंटों के लिए टिकट खरीद विंडो के साथ एक लॉटरी बनाई जाएगी। एक बार 24 घंटे पूरे हो जाने पर, 1 घंटे की देरी होती है, फिर लॉटरी खत्म हो जाती है। random numbers safely on Ethereum जनरेट करना मुश्किल है, लेकिन इसके उद्देश्य के लिए, भविष्य के blockhash पर निर्भर रहना (जिसकी खिलाड़ी भविष्यवाणी नहीं कर सकते), इस प्रोजेक्ट के लिए पर्याप्त है। createLottery कॉल होने के बाद लोग किसी विशेष lotteryId के लिए purchaseTicket कर सकते हैं। लॉटरी में टिकटों की खरीद कब बंद होती है इसकी एक समय सीमा होनी चाहिए, और उसके बाद का समय जब भविष्य का blockhash विजेता का निर्धारण करता है। विजेता को फिर 256 ब्लॉक (blockhash फ़ंक्शन का अधिकतम लुकबैक) के भीतर अपनी जीत का दावा (claim) करना होगा, अन्यथा, सभी को अपने टिकट वापस मिल सकते हैं।
9. ERC1155 बिंगो (Bingo)
एक ताश की गड्डी को सिमुलेट (simulate) करने के लिए ERC1155 टोकन का उपयोग करें जो 1 से 25 तक (सहित) कोई भी मूल्य ले सके। प्रत्येक खिलाड़ी 1-25 तक की संख्याओं के 5x5 2D ऐरे (array) के साथ यादृच्छिक (randomly) रूप से व्यवस्थित होकर शुरू करता है। हर n ब्लॉक्स के बाद, खिलाड़ी एक नया कार्ड मिंट कर सकते हैं जिसमें एक रैंडम नंबर होता है। जो भी सबसे पहले एक पंक्ति में 5 प्राप्त करता है (बिंगो), वह जीत जाता है।
10. ऑन-चेन ब्लैकजैक (On-chain blackjack)
सामान्य ब्लैकजैक के विपरीत, डीलर के कार्ड को छिपाना बेहद मुश्किल है, इसलिए सभी को पूरी तरह से खुला हाथ (open hand) रखने दें। असली ब्लैकजैक आमतौर पर कार्ड काउंटिंग (card counting) को कम प्रभावी बनाने के लिए कई डेक (decks) के साथ खेला जाता है, इसलिए आप एक रैंडम नंबर जनरेटर का उपयोग कर सकते हैं जो [2-10] से एक रैंडम नंबर उत्पन्न करे, लेकिन ध्यान रखें कि टेन (ten), जैक (jack), क्वीन (queen), और किंग (king) सभी 10 होते हैं, इसलिए आपको संभावनाओं (probabilities) को आनुपातिक (proportional) बनाने की आवश्यकता है। इसी तरह, ऐस (Ace) 1 या 11 हो सकता है। डीलर को तब तक हिट (hit) करना चाहिए जब तक कि वे कम से कम 21 पर न पहुंच जाएं।
चूंकि स्मार्ट कॉन्ट्रैक्ट्स अपने आप स्टेट (state) को आगे नहीं बढ़ा सकते हैं, इसलिए कोई भी गेम को आगे बढ़ाने के लिए dealerNextMove() कॉल कर सकता है यदि यह डीलर की बारी है। एक वास्तविक एप्लिकेशन में, डीलर को जारी रखने के लिए आपको एक ऑफचेन (offchain) कंप्यूटर की आवश्यकता होगी, लेकिन अभी के लिए इसकी चिंता न करें।
आपको खिलाड़ियों को किसी के भी गेम को रोके रखने (holding up) से बचने के लिए 10 ब्लॉक के भीतर अपनी चाल चलने के लिए मजबूर करना चाहिए।
अभ्यास से ही पूर्णता आती है
हमारे learn solidity संसाधन के साथ Solidity exercises होने का कारण यह है कि केवल अध्ययन करके कोडिंग सीखना एक धोखा है। कोडिंग करना अधिक महत्वपूर्ण है! अब आप छोटे-छोटे अभ्यासों को हल करने की तुलना में थोड़ा अधिक चुनौतीपूर्ण काम कर सकते हैं।
वास्तव में, ट्यूटोरियल पढ़ना बंद करें, प्रोजेक्ट बनाना शुरू करें! यदि आप कहीं फंस जाते हैं, तो हमारी discord कम्युनिटी से संपर्क करें, Google पर खोजें, या मदद के लिए किसी आधुनिक AI चैटबॉट से पूछें।
क्वालिटी एश्योरेंस: यूनिट टेस्ट लिखें और गैस लागत मापें
हमने आपको पहले ही foundry framework for writing solidity unit tests का उपयोग करना सिखाया है। अन्य लोगों के पैसे को संभालने वाले अनटेस्टेड कोड को डिप्लॉय करना बिल्कुल स्वीकार्य नहीं है। हालांकि ये केवल शैक्षिक कॉन्ट्रैक्ट्स हैं, फिर भी आपको अपनी यात्रा की शुरुआत में ही टेस्ट लिखने की आदत डाल लेनी चाहिए।
एक हमलावर (attacker) की तरह भी सोचने की कोशिश करें। यदि कोई हमलावर सिस्टम के साथ छेड़छाड़ करने की कोशिश कर रहा हो, तो वह किस प्रकार के अजीब इनपुट का प्रयास करेगा?
अंत में, Foundry द्वारा रिपोर्ट की जाने वाली गैस लागत पर ध्यान दें। आप हमारे Ethereum gas price calculator का उपयोग करके गैस इकाइयों को डॉलर की लागत में बदल सकते हैं और यह कैलकुलेटर कैसे काम करता है, यह जानने के लिए हमारा आर्टिकल convert eth gas to dollars पढ़ सकते हैं।
फिर Solidity gas optimization tips सीखने और उन्हें अपने प्रोजेक्ट पर लागू करने पर विचार करें।
यदि आप वास्तव में एक कदम आगे जाना चाहते हैं, तो इन कॉन्ट्रैक्ट्स से जुड़ने के लिए एक साधारण फ्रंटएंड (frontend) ऐप बनाएं। हम इसके लिए wagmi js लाइब्रेरी का उपयोग करने का सुझाव देते हैं।
उसके बाद क्या?
पूरा कर लिया? हमारा सुझाव है कि आप हमारी gas optimization book पढ़कर और उसमें लिंक किए गए कोर्सेज को लेकर अपने कॉन्ट्रैक्ट्स को गैस-ऑप्टिमाइज़ (gas optimize) करना सीखें। फिर आपके द्वारा बनाए गए कॉन्ट्रैक्ट्स को गैस-ऑप्टिमाइज़ करने का प्रयास करें!
RareSkills के साथ और जानें
यदि आपने उपरोक्त सभी को पूरा कर लिया है और एक कम्युनिटी के साथ और भी आगे बढ़ने की सोच रहे हैं, तो शायद हमारे एडवांस Solidity bootcamp को लेने पर विचार करें।
मूल रूप से 10 सितंबर, 2023 को प्रकाशित