🚀 सुपर ऐप्स में सुपरफ्लुइड स्ट्रीम शुरू/बंद करने को स्वचालित करने का तरीका जानें।
वेब3 के बारे में सबसे असाधारण चीजों में से एक यह है कि हम अभी भी शुरुआती चरण में हैं और जैसा कि हम बोलते हैं, वेब 3 पारिस्थितिकी तंत्र नए प्रोटोकॉल, टूलिंग आदि के साथ बढ़ रहा है, और हमारी विशेषज्ञता के स्तर की परवाह किए बिना, हम दूसरों की मदद करने में योगदान दे सकते हैं। जैसा कि हम सीख रहे हैं। इस ब्लॉग का उद्देश्य डेवलपर्स को स्मार्ट कॉन्ट्रैक्ट्स के साथ जिलेटो नेटवर्क का उपयोग करने में मदद करना है और विशेष रूप से सुपरफ्लुइड सुपर ऐप्स के साथ गेलैटो ऑटोमेशन का उपयोग करने के लिए।
अन्य सुविधाओं के बीच सुपरफ्लुइड प्रोटोकॉल उपयोगकर्ताओं को केवल एक लेनदेन और न्यूनतम पूंजी लॉकअप के साथ उपयोगकर्ताओं/अनुबंधों को धन/टोकन स्ट्रीम करने की अनुमति देता है। चेतावनी यह है कि आपको धारा को रोकना याद रखना होगा, यदि नहीं तो धारा अंतहीन रूप से जारी रहेगी। अधिक जानकारी के लिए कृपया सुपरफ्लुइड वेबसाइट देखें https://www.superfluid.finance/home
Gelato Network आपको भविष्य के समय में कार्यों को निष्पादित करने की अनुमति देता है (पूर्व-web2 के लिए एक प्रकार के अनुसूचक के समान होगा)। मुख्य उपयोग मामला दोहराए गए कार्यों के लिए है। सुपरफ्लुइड स्ट्रीम के लिए हमें केवल एक निष्पादन (शुरू या बंद) की आवश्यकता होगी, इसलिए हमें कार्य को तैनात करना होगा और साथ ही "कार्य रद्द करें"। अधिक जानकारी के लिए कृपया जिलेटो वेबसाइट पर जाएं https://www.gelato.network/
यह परियोजना जिलेटो के साथ स्मार्ट अनुबंधों को स्वचालित करने के सामान्य-उद्देश्य के उदाहरणों के साथ-साथ सुपरफ्लुइड धाराओं के लिए एप्लिकेशन को प्रोग्राम करने योग्य नकदी प्रवाह बनाने के लिए एक बहुत ही सरल 3 + 3 चरण मार्गदर्शिका प्रस्तुत करती है।
ऐसा करने के लिए हमने https://gelato-superapp.web.app पर एक शोकेस डैप तैनात किया है। हम दो मुख्य सत्यापित और मुंबई अनुबंधों पर तैनात के साथ बातचीत करेंगे:
कोड इस रिपॉजिटरी में पाया जा सकता है
यहां आपको जिलेटो इन्फ्रास्ट्रक्चर को जोड़ने और अपने स्मार्ट अनुबंध कार्यों को बहुत आसानी से स्वचालित करने के लिए 3 + 3 सबसे आसान चरण मिलेंगे:
वायर गेलैटो इन्फ्रास्ट्रक्चर
जिलेटो फंडिंग रणनीति
Gelato व्यापार तर्क
3.1) कार्य निर्माण
3.2) चेकर कंडीशन
3.3) निष्पादन योग्य कार्य
जिलेटो नेटवर्क के साथ बातचीत करने के लिए, हमें जिलेटो अनुबंधों के साथ बातचीत करने की आवश्यकता होगी (पते यहां पाए जा सकते हैं)। हम तीन अनुबंधों के साथ बातचीत करेंगे:
ऑप्स अनुबंध: बनाने, रद्द करने, लेन-देन शुल्क, स्थानांतरण शुल्क आदि प्राप्त करने के लिए मुख्य अनुबंध। हम अनुबंध OpsReady.sol
प्राप्त करेंगे, हम कंस्ट्रक्टर में जिलेटो ऑप्स और जिलेटो ट्रेजरी पते पास करेंगे और हम जाने के लिए अच्छे हैं !
import {OpsReady} from "./gelato/OpsReady.sol"; import {IOps} from "./gelato/IOps.sol"; import {ITaskTreasury} from "./gelato/ITaskTreasury.sol"; contract PartyApp is OpsReady, Ownable { constructor(address payable _ops, address payable _treasury) OpsReady(_ops, payable(_treasury)){ }
गेलैटो ट्रेजरी अनुबंध : हमें अपनी फंडिंग रणनीति के आधार पर फंड/निकासी के लिए जिलेटो ट्रेजरी अनुबंध के साथ बातचीत करने की आवश्यकता होगी (चरण 2 देखें)
Gelato नेटवर्क : हम अपने परीक्षणों में इस अनुबंध के साथ बातचीत करेंगे… बोनस ट्रैक #2 . पर अधिक
OpsReady.sol अनुबंध, साथ ही इंटरफेस, रिपॉजिटरी के भीतर जिलेटो -फाइलों में पाया जा सकता है। आप बस उन्हें कॉपी कर सकते हैं और यह काम करता है!
Gelato भविष्य के समय में लेन-देन निष्पादित करता है, इसलिए हमें लेन-देन के वित्तपोषण का एक तरीका चुनने की आवश्यकता है जिसे Gelato हमारी ओर से निष्पादित करने जा रहा है। ऐसा करने के लिए दो विकल्प हैं:
1) जिलेटो ट्रेजरी अनुबंध को निधि दें: जब तक आपके पास ट्रेजरी अनुबंध में सकारात्मक शेष राशि है, भविष्य के लेनदेन निष्पादित किए जाएंगे। यदि हम इस विकल्प को चुनते हैं तो हमें इसके वित्तपोषण के लिए जिलेटो ट्रेजरी अनुबंध के साथ बातचीत करने की आवश्यकता है।
function fundGelato(uint256 amount) public payable { require(msg.value == amount, "NO_FUNDING"); ITaskTreasury(treasury).depositFunds{value: amount}(address(this),ETH,amount); } function withdrawGelato() public onlyOwner { uint256 maxAmount = ITaskTreasury(treasury).userTokenBalance(address(this),ETH); ITaskTreasury(treasury).withdrawFunds(payable(msg.sender), ETH, maxAmount); }
2) प्रत्येक लेन-देन को निधि दें: हमारा स्मार्ट अनुबंध भविष्य के प्रत्येक लेनदेन में शुल्क का भुगतान करने के लिए अनुरोधित राशि को स्थानांतरित करेगा। इस मामले में, हमें गेलेटो ट्रेजरी अनुबंध के साथ बातचीत करने की आवश्यकता नहीं होगी, लेकिन हमें अपने अनुबंध में सकारात्मक संतुलन बनाए रखना चाहिए ।
तीन मुख्य भाग/चरण हैं जिन्हें हमें व्यावसायिक तर्क में परिभाषित करना है:
3.1) कार्य बनाएँ: हमें गेलेटो को यह बताने के लिए एक कार्य को परिभाषित करना होगा कि हम क्या निष्पादित करना चाहते हैं।
function createTask() public { require(taskIdByUser[msg.sender] == bytes32(0), "TASK_STILL_ACTIVE"); bytes32 taskId = IOps(ops).createTask( address(this), /// Contract executing the task this.startParty.selector, /// Executable function's selector address(this), /// Resolver contract, in our case will be the same abi.encodeWithSelector(this.checkerStartParty.selector) /// Checker Condition ); taskIdByUser[msg.sender] = taskId; }
3.2) चेकर की स्थिति: भविष्य के लेन-देन को निष्पादित करने के लिए, हमें गेलैटो को यह जांचने के लिए शर्त प्रदान करनी होगी कि क्या गेलैटो निष्पादित कर सकता है या नहीं
function checkerStartParty() external view returns (bool canExec, bytes memory execPayload) { canExec = headachePresent == false; execPayload = abi.encodeWithSelector(this.startParty.selector); }
3.3) निष्पादन योग्य कार्य: वह कार्य जो शर्तों और/या समय के पूरा होने पर निष्पादित किया जाएगा।
function startParty() external onlyOps { require(headachePresent == false, "NOT_READY"); lastPartyStart = block.timestamp; headachePresent = true; }
https://gist.github.com/donoso-eth/0678b0613db36c6c332063c9f39cddfd
हमारा पहला गेलैटो ऐप बहुत आसान होने वाला है। यह जांचता है कि हमारी जिलेटो पार्टी शुरू हुई है या नहीं। पार्टी हमेशा शुरू होगी अगर हमें पिछली पार्टी से "सिरदर्द" नहीं है।
जब हमारा "सिरदर्द" खत्म हो जाता है तो हम मैन्युअल रूप से सेट कर सकते हैं और फिर गेलैटो नेटवर्क स्टार्ट पार्टी को निष्पादित करने में सक्षम होगा, एक नया स्टार्ट पार्टी टाइमस्टैम्प सेट करेगा और हमारे "सिरदर्द को सही" पर सेट करेगा।
हमारी फंडिंग रणनीति के आधार पर हमारी स्क्रीन को दो भागों में बांटा गया है।
यह अनुबंध तीन उपयोग मामलों की अनुमति देता है:
एक बार टास्क बन जाने के बाद हम जिलेटो ऑप्स वेबसाइट पर जा सकते हैं और हम देखेंगे कि हमारा टास्क एक्जीक्यूशन का इंतजार कर रहा है
और सफल निष्पादन के बाद, ऑप्स डैशबोर्ड हमें कुछ इस तरह दिखाएगा।
ट्रेजरी के साथ वित्त पोषित एक सरल कार्य बनाएं और पहले निष्पादन के बाद रद्द करें (हम बाद में इस पैटर्न का उपयोग अपने सुपरफ्लुइड स्ट्रीम के साथ करने जा रहे हैं)।
https://gist.github.com/donoso-eth/517e2dca691980de506229cbe27eee62
प्रत्येक लेन-देन का भुगतान करने वाला एक सरल कार्य बनाएं (ट्रेजरी फंडिंग नहीं)
https://gist.github.com/donoso-eth/340ca96b53005dd457defab0991a735c
हमारा गेलैटो सुपर ऐप हमें स्टॉप या स्ट्रीम की शुरुआत को स्वचालित करके सुपरफ्लुइड स्ट्रीम को प्रोग्राम करने योग्य बनाने में मदद करेगा।
हम पार्टी ऐप की तरह जिलेटो इन्फ्रास्ट्रक्चर (चरण 1) को लागू करेंगे और हम फंडिंग रणनीति के रूप में ट्रेजरी फंडिंग को चुनते हैं (चरण 2)
हम कुछ पूर्वनिर्धारित मिनटों के बाद एक स्ट्रीम को रोकने का डेमो दिखाएंगे। हमारा व्यावसायिक तर्क इस तरह दिखेगा:
https://gist.github.com/donoso-eth/e4fc0145ed75ed84309da1a467175931
अब अगर आपने खजाने को वित्त पोषित किया है, एक धारा शुरू कर दी है और जिलेटो को पहले ही उस धारा को रोक दिया गया है जिसे आपने अपना बोनस अनलॉक कर दिया है !!
अब तक हमने एक स्ट्रीम को स्वचालित रूप से रोकने के लिए हासिल किया है, लेकिन उसी तर्क का पालन करते हुए, मैं काम के पहले दिन ठीक 00:00 बजे एक नए कर्मचारी को स्ट्रीमिंग शुरू करना चाहता हूं और मैं हर दिन जागना नहीं चाहता क्योंकि उम्मीद है कि हम बहुत सारे कर्मचारियों को काम पर रखने जा रहे हैं!
.. फिर बचाव के लिए सीएफए एसीएल (सीएफए एक्सेस कंट्रोल लिस्ट), एसडीके से या सीधे अनुबंध के लिए सीएफए निरंतर समझौते के लिए एक साधारण कॉल के साथ आप हमारे सुपर ऐप को आपकी ओर से एक स्ट्रीम शुरू करने की अनुमति देना चाह सकते हैं जब एक निश्चित समय बीत चुका है और एक "जिलेटो टास्क" निष्पादित किया जाता है।
इस उपयोग के मामले में, हम दो कार्यों को जोड़ रहे हैं, जब पहले एक को निष्पादित किया जाता है, तो स्ट्रीम शुरू हो जाएगी, कार्य रद्द कर दिया जाएगा, और स्ट्रीम को रोकने के लिए दूसरा कार्य बनाया जाएगा।
https://gist.github.com/donoso-eth/5491f5f94409f9648fa196c3ed24ca3d
ब्लॉकचैन विकास में सुखद अनुभवों में से एक है ….. के एक-क्लिक निर्माण की क्षमता।
जैसे-जैसे हमारे डैप जटिलता में बढ़ते हैं, हमें मौजूदा ऑन-चेन अनुबंधों के साथ बातचीत करने की आवश्यकता होगी और यदि हम स्थानीय बने रहना चाहते हैं तो हमें प्रोटोकॉल का मजाक/तैनाती करना होगा। कुछ मामलों में यह बोझिल हो सकता है और हम विकास के लिए कीमती समय व्यतीत करेंगे । इस समस्या को दूर करने का सबसे अच्छा विकल्प एक कांटा के साथ काम करना है, हमारे hardhat.config.ts
के भीतर एक बहुत ही सरल कॉन्फ़िगरेशन के साथ (सही दिशा को इंगित करने के लिए सैम फ्लेमिनी और हिलमार एक्स को धन्यवाद)।
https://gist.github.com/donoso-eth/1dbfc57d3d40679e324048e1d7c01ab4
और फिर npx hardhat node --network "hardhat"
के साथ हम उस ब्लॉकचैन की "वर्चुअल" कॉपी बनाने में सक्षम होंगे जिसे हम लक्षित कर रहे हैं। अब से हम जो ब्लॉक बनाते हैं उन्हें स्थानीय रूप से संग्रहीत किया जाएगा और पुराने लोगों के लिए हम अपने आरपीसी प्रदाता (ऊपर हम कीमिया का उपयोग कर रहे हैं) के साथ "वास्तविक" ब्लॉकचैन को क्वेरी करेंगे।
हमारे उदाहरण में, हम मुंबई के साथ काम कर रहे हैं, सुपरफ्लुइड कॉन्ट्रैक्ट्स (होस्ट, कॉन्स्टनफ्लोएग्रींट, सुपरटोकन…), साथ ही जिलेटो कॉन्ट्रैक्ट्स (नेटवर्क, ओपीएस, और ट्रेजरी), उस राज्य के साथ मौजूद हैं जो उनके पास कांटे के ब्लॉक नंबर पर था। हमें उनके साथ बातचीत करने की इजाजत देता है क्योंकि हम "असली" ब्लॉकचैन के साथ बातचीत करेंगे।
अब, आपके पास अपना स्थानीय "मुंबई" अतिरिक्त सहायक विधियों के साथ वास्तव में श्रृंखला में महारत हासिल करने के लिए है:
https://gist.github.com/donoso-eth/148d031bbc57e6a3b6708367a52b0069
हमारे Dapp में हम Gelato अनुबंधों के साथ काम कर रहे हैं। "निष्पादक" हमारे कार्यों को स्वचालित करने का ध्यान रखेंगे, लेकिन हमारी स्थानीय "आभासी" श्रृंखला में कोई निष्पादक नहीं हैं ... हमारे कार्यों को कौन निष्पादित करेगा?। और इसका उत्तर बहुत सरल है, हम स्वयं कार्य को अंजाम देने जा रहे हैं । हम ऐसा कर सकते हैं क्योंकि हम अपने स्थानीय ब्लॉकचेन में महारत हासिल करते हैं, हम जो भी बनना चाहते हैं वह हो सकते हैं और हम निष्पादक बनना चुनते हैं। हार्डहाट हमें शानदार विधि प्रदान करता है hardhat_impersonateAcount
और हम इसका उपयोग स्थानीय रूप से "निष्पादक" बनने के लिए करेंगे।
यहां हम Gelato नेटवर्क अनुबंध का प्रतिरूपण करते हुए जिलेटो कार्यों को निष्पादित करने के लिए कार्यान्वयन का विवरण देख सकते हैं
https://gist.github.com/donoso-eth/88b3e43f5957cf1e6cdbcd326067fee0
कार्य को निष्पादित करने में सक्षम होने के लिए हमें पैरा बनाने की आवश्यकता होगी, यदि हम ऑप्स इंटरफ़ेस में देखते हैं तो हम देखते हैं कि हमें निम्नलिखित पैरा की आवश्यकता है
/// @notice Execution API called by Gelato /// @param _txFee Fee paid to Gelato for execution, deducted on the TaskTreasury /// @param _feeToken Token used to pay for the execution. ETH = 0xeeeeee... /// @param _taskCreator On which contract should Gelato check when to execute the tx /// @param _useTaskTreasuryFunds If msg.sender's balance on TaskTreasury should pay for the tx /// @param _revertOnFailure To revert or not if call to execAddress fails /// @param _execAddress On which contract should Gelato execute the tx /// @param _execData Data used to execute the tx, queried from the Resolver by Gelato function exec( uint256 _txFee, address _feeToken, address _taskCreator, bool _useTaskTreasuryFunds, bool _revertOnFailure, bytes32 _resolverHash, address _execAddress, bytes calldata _execData ) external;
पार्टी ऐप में हमारे एक उदाहरण का उपयोग करते हुए हमारे पास होगा:
https://gist.github.com/donoso-eth/bacd13ccb9718d70f618eca6c82587f7
हमारे डीएपी परीक्षणों में कार्यान्वयन कोड में देखा जा सकता है। हम अपने अनुबंध परीक्षणों में इस तकनीक का उपयोग करते हैं।
जैसा कि हमने देखा है, हमारे स्मार्ट अनुबंधों में जिलेटो नेटवर्क को तार करना और स्वचालन की पूरी क्षमता को अनलॉक करना अपेक्षाकृत सरल है। विशेष रूप से सुपरफ्लुइड स्ट्रीम के लिए जिलेटो सुपर ऐप्स को स्ट्रीम-शेड्यूलिंग करने की अनुमति दे सकता है।
आशा है कि यह लेख अन्य देवों को जिलेटो के साथ जल्दी से उठने और चलाने में मदद कर सकता है और इसे सुपरफ्लुइड धाराओं पर लागू कर सकता है।
आप मेरे साथ ट्विटर पर जुड़ सकते हैं @donoso_eth
यहाँ भी प्रकाशित हो चुकी है।.