वेब3 बिगिनर सीरीज़: कॉन्ट्रैक्ट डेवलपमेंट टिप्स जो मैंने यूनिस्वैप कोड से सीखे
मैंने हाल ही में विकेन्द्रीकृत एक्सचेंज विकास पर एक ट्यूटोरियल लिखा है https://github.com/WTFAcademy/WTF-Dapp , Uniswap V3 के कोड कार्यान्वयन का जिक्र करते हुए, और बहुत सारे ज्ञान बिंदु सीखे। मैंने पहले भी सरल NFT अनुबंध विकसित किए हैं, और यह पहली बार है जब मैंने डेफी अनुबंध विकसित करने की कोशिश की है। मेरा मानना है कि ये टिप्स उन नौसिखियों के लिए बहुत मददगार होंगे जो अनुबंध विकास सीखना चाहते हैं।
अनुबंध डेवलपर्स सीधे जा सकते हैं https://github.com/WTFAcademy/WTF-Dapp कोड में योगदान देना और Web3~ के लिए बदलाव लाना
अब, आइए इन छोटी-छोटी तरकीबों पर नजर डालें, जिनमें से कुछ को दिखावटी तरकीबें भी कहा जा सकता है।
अनुबंध परिनियोजन का अनुबंध पता पूर्वानुमान योग्य बनाया जा सकता है
जब हम कोई अनुबंध तैनात करते हैं, तो हमें आमतौर पर एक यादृच्छिक पता मिलता है। क्योंकि यह नॉन्स से संबंधित है, इसलिए अनुबंध पते का अनुमान लगाना मुश्किल है। हालाँकि, Uniswap में, हमारे पास ऐसी आवश्यकता है: हमें लेनदेन जोड़ी और संबंधित जानकारी के माध्यम से अनुबंध पते का अनुमान लगाने की आवश्यकता है। यह कई मामलों में बहुत उपयोगी है, जैसे कि लेनदेन प्राधिकरण का निर्धारण करना या पूल का पता प्राप्त करना।
Uniswap में, अनुबंध pool = address(new Uniswap V3 Pool{salt: keccak 256(abi.encode(token 0, token 1, fee))}()); जैसे कोड का उपयोग करके बनाए जाते हैं। नमक जोड़कर अनुबंध बनाएं 2 बनाएं ( https://github.com/AmazingAng/WTF-Solidity/blob/main/25_Create2/readme.md ), इसका लाभ यह है कि बनाया गया अनुबंध पता पूर्वानुमान योग्य है। पता निर्माण का तर्क नया पता = हैश (0x FF, निर्माता पता, नमक, initcode) है।
आप इसके बारे में WTF-DApp पाठ्यक्रम में अधिक जान सकते हैं https://github.com/WTFAcademy/WTF-Dapp/blob/main/P103_Factory/readme.md पर .
कॉलबैक फ़ंक्शन का अच्छा उपयोग करें
सॉलिडिटी में, कॉन्ट्रैक्ट एक दूसरे को कॉल कर सकते हैं। एक परिदृश्य है जहाँ A किसी निश्चित विधि में B को कॉल करता है, और B कॉल की गई विधि में A को वापस कॉल करता है, जो कुछ परिदृश्यों में बहुत उपयोगी भी है।
Uniswap में, जब आप Uniswap V3 Pool अनुबंध की स्वैप विधि को कॉल करते हैं, तो यह swapCallback को वापस कॉल करेगा, और कॉलबैक गणना की गई विधि में पास होगा। टोकन वास्तव में इस लेनदेन के लिए आवश्यक है। कॉल करने वाले को कॉलबैक में यूनिस्वैप V3 पूल में लेनदेन के लिए आवश्यक टोकन को स्थानांतरित करने की आवश्यकता होती है, बजाय इसके कि कॉल करने वाले को कॉल करने के लिए स्वैप विधि को दो भागों में विभाजित किया जाए। यह स्वैप विधि की सुरक्षा सुनिश्चित करता है और यह सुनिश्चित करता है कि सुरक्षा सुनिश्चित करने के लिए बोझिल चर रिकॉर्ड की आवश्यकता के बिना संपूर्ण तर्क पूरी तरह से निष्पादित हो।
कोड स्निपेट इस प्रकार है:
You can learn more about the trading part of the course https://github.com/WTFAcademy/WTF-Dapp/blob/main/P106_PoolSwap/readme.md पर .
जानकारी पास करने के लिए अपवादों का उपयोग करें और लेनदेन अनुमानों को लागू करने के लिए try catch का उपयोग करें
यूनिस्वैप कोड का जिक्र करते समय, हमने पाया कि इसमें https://github.com/Uniswap/v3-periphery/blob/main/contracts/lens/Quoter.sol अनुबंध में, Uniswap V3 Pool की स्वैप विधि को try catch में लपेटा गया और निष्पादित किया गया:
ऐसा क्यों है? क्योंकि हमें लेन-देन के लिए आवश्यक टोकन का अनुमान लगाने के लिए स्वैप विधि का अनुकरण करने की आवश्यकता है, लेकिन चूंकि अनुमान के दौरान टोकन एक्सचेंज वास्तव में नहीं होगा, इसलिए एक त्रुटि की सूचना दी जाएगी। यूनिस्वैप में, यह लेन-देन के कॉलबैक फ़ंक्शन में एक विशेष त्रुटि फेंकता है, फिर त्रुटि को कैप्चर करता है और त्रुटि संदेश से आवश्यक जानकारी को पार्स करता है।
यह एक हैक की तरह दिखता है, लेकिन यह बहुत व्यावहारिक भी है। इस तरह, अनुमानित लेनदेन की जरूरतों के अनुसार स्वैप विधि को संशोधित करने की आवश्यकता नहीं है, और तर्क सरल है। हमारे पाठ्यक्रम में, हम अनुबंध को लागू करने के लिए इस तर्क का भी उल्लेख करते हैं https://github.com/WTFAcademy/WTF-Dapp/blob/main/demo-contract/contracts/wtfswap/SwapRouter.sol .
परिशुद्धता समस्याओं को हल करने के लिए बड़ी संख्याओं का उपयोग करना
यूनिस्वैप कोड में बहुत सारे गणना तर्क हैं, जैसे कि मौजूदा कीमत और तरलता के अनुसार एक्सचेंज किए गए टोकन की गणना करना। इस प्रक्रिया में, हमें विभाजन संचालन के दौरान सटीकता खोने से बचना चाहिए। यूनिस्वैप में, गणना प्रक्रिया अक्सर उपयोग करती है
कोड इस प्रकार है (मूल्य और तरलता के माध्यम से लेनदेन के लिए आवश्यक टोकन की संख्या की गणना):
जैसा कि आप देख सकते हैं, सबसे पहले, Uniswap में कीमत 2 ^ 96 के वर्गमूल से गुणा की जाती है (ऊपर दिए गए कोड में sqrtRatioAX 96 और sqrtRatioBX 96 के अनुरूप), और फिर अंश 1 की गणना करने के लिए तरलता तरलता को बाईं ओर स्थानांतरित कर दिया जाएगा। निम्नलिखित गणना में, अंतिम परिणाम प्राप्त करने के लिए गणना प्रक्रिया में 2 ^ 96 को समाप्त कर दिया जाएगा।
बेशक, चाहे कुछ भी हो, सिद्धांत रूप में परिशुद्धता की हानि तो होगी ही, लेकिन इस मामले में सबसे छोटी इकाई की हानि हुई है, जो स्वीकार्य है।
अधिक जानकारी के लिए, आप इस पाठ्यक्रम से अधिक सीख सकते हैं https://github.com/WTFAcademy/WTF-Dapp/blob/main/P106_PoolSwap/readme.md पर .
शेयर का उपयोग करके आय की गणना करें
यूनिस्वैप में, हमें एलपी (तरलता प्रदाता) की शुल्क आय रिकॉर्ड करने की आवश्यकता है। जाहिर है, हम प्रत्येक लेनदेन में प्रत्येक एलपी के लिए शुल्क रिकॉर्ड नहीं कर सकते हैं, जो बहुत अधिक गैस की खपत करेगा। तो इससे कैसे निपटें?
यूनिस्वैप में, हम देख सकते हैं कि निम्नलिखित संरचना है defiस्थिति में ned:
इसमें feeGrowthInside0LastX128 और feeGrowthInside1LastX128 शामिल हैं, जो उस शुल्क को रिकॉर्ड करते हैं जो प्रत्येक लिक्विडिटी को तब प्राप्त होना चाहिए जब प्रत्येक स्थिति (स्थिति) ने पिछली बार शुल्क वापस ले लिया हो।
इसे सरल भाषा में कहें तो, मुझे केवल कुल शुल्क और प्रत्येक लिक्विडिटी को कितना शुल्क आवंटित किया जाना चाहिए, यह रिकॉर्ड करने की आवश्यकता है, ताकि जब एलपी शुल्क वापस ले, तो वह गणना कर सके कि उसके हाथ में मौजूद लिक्विडिटी के अनुसार वह कितना शुल्क वापस ले सकता है। यह ऐसा है जैसे कि यदि आप किसी कंपनी के शेयर रखते हैं, तो जब आप शेयर आय वापस लेना चाहते हैं, तो आपको केवल कंपनी की प्रति शेयर ऐतिहासिक आय और पिछली बार वापस लेने पर आय जानने की आवश्यकता होती है।
इससे पहले, हमने लेख में stETH लाभ गणना पद्धति पेश की थी सरल अनुबंध डिजाइन, देखें कि कैसे stETH स्वचालित रूप से दैनिक आधार पर लाभ वितरित करता है? स्थिर ब्याज प्राप्त करने के लिए अपने ETH को स्टेकिंग में भाग लेने दें , और सिद्धांत समान है.
सभी जानकारी श्रृंखला से प्राप्त करने की आवश्यकता नहीं है
ऑन-चेन स्टोरेज अपेक्षाकृत महंगा है, इसलिए हमें सभी जानकारी को ऑन-चेन स्टोर करने या चेन से प्राप्त करने की आवश्यकता नहीं है। उदाहरण के लिए, Uniswap फ्रंट-एंड वेबसाइट द्वारा कॉल किए जाने वाले कई इंटरफ़ेस पारंपरिक Web2 इंटरफ़ेस हैं।
लेन-देन पूल की सूची, लेन-देन पूल के बारे में जानकारी आदि सभी को साधारण डेटाबेस में संग्रहीत किया जा सकता है। कुछ को नियमित रूप से चेन से सिंक्रनाइज़ करने की आवश्यकता हो सकती है, लेकिन हमें प्रासंगिक डेटा प्राप्त करने के लिए वास्तविक समय में चेन या नोड सेवा द्वारा प्रदान किए गए RPC इंटरफ़ेस को कॉल करने की आवश्यकता नहीं है।
बेशक, कई ब्लॉकचेन पीआरसी आपूर्तिकर्ता अब कुछ उन्नत इंटरफेस प्रदान करते हैं, आप कुछ डेटा को तेज़ और सस्ते तरीके से प्राप्त कर सकते हैं, जो समान है। उदाहरण के लिए, ZAN एक निश्चित उपयोगकर्ता के तहत सभी NFT प्राप्त करने के समान इंटरफ़ेस प्रदान करता है। यह जानकारी स्पष्ट रूप से प्रदर्शन और दक्षता में सुधार करने के लिए कैश की जा सकती है। आप यहाँ जा सकते हैं https://zan.top/service/advance-api अधिक पाने के लिए.
बेशक, प्रमुख लेनदेन ऑन-चेन ही किए जाने चाहिए।
जानें कि अनुबंधों को कैसे विभाजित करें और ERC 721 जैसे मौजूदा मानक अनुबंधों का उपयोग कैसे करें
एक प्रोजेक्ट में कई वास्तविक रूप से तैनात अनुबंध हो सकते हैं। भले ही वास्तव में केवल एक ही अनुबंध तैनात हो, हमारा कोड विरासत के माध्यम से रखरखाव के लिए अनुबंध को कई अनुबंधों में विभाजित कर सकता है।
उदाहरण के लिए, यूनिस्वैप में, https://github.com/Uniswap/v3-periphery/blob/main/contracts/NonfungiblePositionManager.sol अनुबंध कई अनुबंधों को विरासत में प्राप्त करता है, और कोड इस प्रकार है:
और जब आप ERC 721 परमिट अनुबंध के कार्यान्वयन को देखते हैं, तो आप पाएंगे कि यह सीधे @openzeppelin/contracts/token/ERC 721/ERC 721.sol अनुबंध का उपयोग करता है। इससे NFT के माध्यम से पदों का प्रबंधन करना सुविधाजनक हो जाता है, और दूसरी ओर, यह अनुबंध विकास की दक्षता में सुधार करने के लिए मौजूदा मानक अनुबंधों का भी उपयोग कर सकता है।
हमारे पाठ्यक्रम में आप सीख सकते हैं https://github.com/WTFAcademy/WTF-Dapp/blob/main/P 108 _PositionManager /readme.md और पदों का प्रबंधन करने के लिए एक सरल ईआरसी 721 अनुबंध विकसित करने का प्रयास करें।
संक्षेप
चाहे आप कितने भी लेख पढ़ लें, यह उतना व्यावहारिक नहीं है जितना इसे स्वयं विकसित करना। विकेंद्रीकृत एक्सचेंज के सरलीकृत संस्करण को स्वयं लागू करने की कोशिश करने की प्रक्रिया में, आप यूनिस्वैप कोड कार्यान्वयन की गहरी समझ प्राप्त कर सकते हैं और अधिक ज्ञान बिंदु सीख सकते हैं जो आपको वास्तविक परियोजनाओं में अनुभव होंगे।
WTF-DApp कोर्स एक ओपन सोर्स कोर्स है जिसे ZAN डेवलपर समुदाय और WTF अकादमी डेवलपर समुदाय द्वारा संयुक्त रूप से पूरा किया जाता है। यदि आप Web3 और Defi प्रोजेक्ट डेवलपमेंट में भी रुचि रखते हैं, तो आप हमारे व्यावहारिक पाठ्यक्रम का संदर्भ ले सकते हैं https://github.com/WTFAcademy/WTF-Dapp और चरण दर चरण एक्सचेंज का एक सरल संस्करण पूरा करें। मुझे विश्वास है कि यह निश्चित रूप से आपकी मदद करेगा~
यह लेख फिशर (X अकाउंट) द्वारा लिखा गया था @युदाओ 1024 ) ZAN टीम (X खाता) @zan_team ).
यह लेख इंटरनेट से लिया गया है: Web3 बिगिनर सीरीज़: कॉन्ट्रैक्ट डेवलपमेंट टिप्स जो मैंने Uniswap कोड से सीखे
संबंधित: अगला 100x रत्न ढूँढना: ChatGPT के साथ Pump.fun पर पैसे कैसे कमाएँ
मूल लेखक: CMed संपादकों का नोट: पंप मार्केट में, हर पल नए टोकन लॉन्च किए जा रहे हैं। जबकि बाजार में अन्य लोग अभी भी एक मेमेकॉइन खोजने के लिए घास के ढेर में सुई की तलाश कर रहे हैं जो अतिरिक्त रिटर्न कमा सकता है, @AlphaBatcher ने पहले से ही स्वचालित सटीक ट्रेडिंग को प्राप्त करने के लिए Chatgpt का उपयोग किया है। इस पद्धति के लिए बड़ी मात्रा में पूंजी या मजबूत प्रोग्रामिंग कौशल की आवश्यकता नहीं होती है। हम अपने मेमेकॉइन निवेश को सशक्त बनाने के लिए AI का उपयोग कर सकते हैं। निम्नलिखित मूल पाठ है (आसान पढ़ने और समझने के लिए, मूल सामग्री को हटा दिया गया है और पुनर्गठित किया गया है): मैंने अभी ChatGPT और PumpFun का उपयोग करके 1 मिनट में $2300 बनाया है। जबकि अन्य लोग अभी भी मेमेकॉइन में अवसरों की तलाश कर रहे थे, मैं पहले से ही सटीक ट्रेडिंग को स्वचालित कर रहा था। आपको आरंभ करने के लिए केवल 0.2 SOL की आवश्यकता है, और कोई प्रोग्रामिंग कौशल नहीं है…