पूरा code इस Github repo में उपलब्ध है। ध्यान दें कि यह इस समय एक अलग branch में है।
Project अवलोकन
इस project का लक्ष्य आपको सिखाना है कि जब भी Uniswap Pool बनाया जाता है तो Discord message भेजने के लिए Web3 Actions का उपयोग कैसे करें। हम आपको दो दृष्टिकोण दिखाएंगे - अधिक सुविधाजनक हमारे Web3 Action के लिए trigger के रूप मेंPoolCreated event का उपयोग करना है (देखें functions, events, और triggers और Uniswap docs)।
योजना
- अपने Tenderly project में contracts जोड़ें - UniswapV3ContractFactory। यह पहले से ही verified है और Tenderly में मौजूद है, इसलिए आपको बस उन्हें अपने project में जोड़ने की आवश्यकता है।
- Discord Webhook URL को अपने Web3 Action Secrets में store करें।
- एक Web3 Action बनाएँ जो
[PoolCreated](<https://developers.uniswap.org/protocol/reference/core/interfaces/IUniswapV3Factory#poolcreated>)event पर प्रतिक्रिया देगा।
1: अपने Tenderly Project में Uniswap Contracts जोड़ें
Web3 Actions को यह आवश्यक है कि triggers निर्दिष्ट करने के लिए उपयोग किए जाने वाले smart contracts Tenderly में verified हों। Web3 Actions को यह आवश्यक है कि triggers निर्दिष्ट करने के लिए उपयोग किए जाने वाले smart contracts Tenderly में verified हों। चूंकि हम मौजूदा contracts का उपयोग कर रहे हैं, आप contract name या address type करके search bar का उपयोग करके उन्हें ढूंढ सकते हैं। वैकल्पिक रूप से, UniswapV2ContractFactory पर जाएँ और “Add to Project” पर क्लिक करें। UniswapV2Pair के लिए भी ऐसा ही करें।2: PoolCreated Event के लिए Web3 Action बनाएँ
नीचे आपको हमारी Web3 Action के लिए code के साथ-साथ यह भी मिलेगा कि यह कैसे काम करता है इसकी व्याख्या:example.ts
getEventLog function में transaction logs के माध्यम से search करने की आवश्यकता है। हम Ethers और contract के ABI का उपयोग कर रहे हैं: UniswapV3FactoryAbi। UniswapV3Factory Tenderly में contract पर जाएँ, “View ABI” पर क्लिक करें और इसे actions directory में एक local file में copy/paste करें।
अनिवार्य रूप से, हम topic PoolCreate में log entry की तलाश कर रहे हैं। पहले, हम उस topic का reference ले रहे हैं (poolCreatedTopic = ifc.getEventTopic("PoolCreated")) और फिर हम वास्तविक logs (tx.logs) को filter कर रहे हैं जब तक कि हमें उस topic का reference देने वाली entry नहीं मिल जाती। अंत में, हम Ethers का उपयोग करके पाए गए log (poolCreatedEventLog) को decode कर रहे हैं। यह वह event है जिसकी हम तलाश कर रहे हैं, और इसमें tokens के addresses हैं: token0 और token1।
TheGraph पर Uniswap के Graph API का उपयोग करके Token Data प्राप्त करें। Uniswap TheGraph के माध्यम से अपने data तक पहुँच का खुलासा करता है। हम TheGraph को query करने और पहले चरण के PoolCreated event में मौजूद token0 और token1 IDs के लिए कई fields प्राप्त करने के लिए getTokensData function का उपयोग कर रहे हैं।
Discord Community को सूचित करें। सभी प्रासंगिक जानकारी एकत्र करने के बाद, हम अपने Discord channel को message भेजने के लिए तैयार हैं। notifyDiscord function के साथ, हमें secrets से Webhook URL प्राप्त करने की आवश्यकता है। हम Webhook चलाने और content पास करने के लिए HTTP post request बनाने हेतु Axios का उपयोग कर रहे हैं।
3: अपनी Web3 Action कॉन्फ़िगर करें
tenderly.yaml file में, हमें यह निर्दिष्ट करना होगा कि हम uniswapActions:onPoolCreatedEventEmitted को तब चलाना चाहते हैं जब Mainnet (network 1) पर mine किए गए transaction के भीतर UniswapV3Factory contract (0xd849b2af570ffa3033973ea11be6e01b7ba661d9 address पर) से एक event fire होता है।
example.yaml
4: Discord Webhook URL को Secrets में Store करें
Tenderly में हमारी Web3 Action चलाने से पहले, हमें Discord Webhook के लिए value सेट करना होगा। Tenderly Dashboard में, अपने project के Actions पेज पर जाएँ और Secrets पर क्लिक करें।discord.uniswapChannelWebhook नामक एक नया secret जोड़ें और अपने Discord channel का Webhook paste करें।
5: अपनी Web3 Action Deploy और Try Out करें
इस command को चलाकर अपनी Web3 Action deploy करें:example.yaml