मुख्य सामग्री पर जाएं
इस tutorial में, हम आपको दिखाएंगे कि कैसे UniswapV3Factory contract में नए pool creations की निगरानी करने के लिए Tenderly Web3 Action सेट अप करें और स्वचालित actions करें। यह project प्रदर्शित करता है कि smart contracts के साथ interact करने के लिए Web3 Actions और custom monitoring system बनाने के लिए Tenderly के features का उपयोग कैसे करें।

UniswapV3Factory monitoring Web3 Action template

Project अवलोकन

इस project का उद्देश्य एक system सेट अप करना है जो UniswapV3Factory contract में नए pool creations की निगरानी करता है और विशिष्ट शर्तें पूरी होने पर स्वचालित actions करता है। यहाँ project के flow का एक quick breakdown है:
  1. Web3 Action Ethereum mainnet पर UniswapV3Factory contract से PoolCreated events के लिए listen करता है।
  2. जब कोई event detect होता है, तो यह event data से नए pool का address extract करता है।
  3. action नए pool contract को आपके Tenderly project में जोड़ता है और आसान प्रबंधन के लिए इसे tag करता है।

पूर्वापेक्षाएँ

शुरू करने से पहले, सुनिश्चित करें कि आपके पास निम्नलिखित है:
  • Tenderly CLI स्थापित
  • Node.js (v20 वर्तमान में समर्थित)
  • npm
  • एक Tenderly account और project

Setup

आइए अपने UniswapV3Factory Monitoring system को सेट अप करने के चरणों से गुज़रें:
1
एक नया Tenderly Project बनाएँ
2
यदि आपने पहले से नहीं किया है, तो अपने Tenderly dashboard में एक नया project बनाएँ या एक मौजूदा का उपयोग करें।
3
Tenderly में एक Alert बनाएँ
4
  • अपने Tenderly Dashboard में Log इन करें
  • अपने project पर navigate करें
  • Alerts tab पर जाएँ और New Alert पर क्लिक करें
  • Alert Type को Event Emitted पर सेट करें
  • alert कॉन्फ़िगर करें:
    • Contract Address: 0x1f98431c8ad98523631ae4a59f267346ea31f984 (UniswapV3Factory contract)
    • Event Signature: PoolCreated(address,address,uint24,int24,address)
    • आसान reference के लिए अपने alert को उचित नाम दें
  • alert सहेजें और बाद में उपयोग के लिए alert का id नोट करें
  • 5
    Web3 Action Project को Initialize करें
    6
    एक terminal खोलें और एक नया Web3 Actions project initialize करने के लिए निम्न command चलाएँ:
    7
    tenderly actions init
    
    8
    prompt होने पर अपना Tenderly project चुनें और अपनी actions के लिए एक directory नाम चुनें।
    9
    tenderly.yaml कॉन्फ़िगर करें
    10
    निम्न configuration के साथ tenderly.yaml file update करें:
    11
    account_id: "<YOUR_ACCOUNT_ID>"
    actions:
      <YOUR_ACCOUNT_ID>/<YOUR_PROJECT_SLUG>:
        runtime: v2
        sources: actions
        specs:
          uniswapV3:
            description: "Monitoring UniswapV3 Factory Contract and adding Child/Pool to Contracts page with proper tag"
            function: uniswapV3Monitoring:actionFn
            trigger:
              type: alert
              alert: { <ALERT_ID> }
            execution_type: parallel
    project_slug: "<YOUR_PROJECT_SLUG>"
    
    12
    <YOUR_ACCOUNT_ID>, <YOUR_PROJECT_SLUG>, और <ALERT_ID> को अपने वास्तविक Tenderly Account Name, Project Slug, और आपके द्वारा नोट किए गए Alert ID से बदलें।
    13
    Secrets सेट अप करें
    14
    अपने Tenderly project settings में निम्न secret जोड़ें:
    15
  • ACCESS-KEY: आपकी Tenderly API access key
  • 16
    secrets जोड़ने के लिए, अपनी Tenderly project settings पर जाएँ और “Secrets” अनुभाग पर navigate करें।
    17
    Web3 Action को Implement करें
    18
    अपनी actions directory में uniswapV3Monitoring.ts नामक एक नई file बनाएँ और अपने Web3 Action logic को इस प्रकार implement करें:
    19
    const ethers = require('ethers');
    
    const actionFn = async (context: Context, alertEvent: AlertEvent) => {
      const key = await context.secrets.get('ACCESS-KEY');
    
      const accountSlug = '<YOUR_ACCOUNT_ID>';
      const projectSlug = '<YOUR_PROJECT_SLUG>';
      const tagName = 'pool';
    
      const tenderly = new Tenderly({
        accountName: accountSlug,
        projectName: projectSlug,
        accessKey: key,
        network: Number(alertEvent.network),
      });
    
      const poolCreatedSignature = ethers.utils.id("PoolCreated(address,address,uint24,int24,address)");
    
      let poolAddress = "";
      for (const log of alertEvent.logs) {
        if (log.topics[0] === poolCreatedSignature) {
          const data = log.data;
          const addressHex = data.substring(data.length - 40);
          poolAddress = ethers.utils.getAddress('0x' + addressHex).toLowerCase();
          break;
        }
      }
    
      try {
        await tenderly.contracts.add(poolAddress, {
          displayName: 'Pool'
        });
        await tenderly.contracts.update(poolAddress, { appendTags: [tagName] });
        console.log(`Pool contract is: ${poolAddress}, and has been added with tag ${tagName}`);
      } catch (error) {
        console.error('Error adding contract:', error);
      }
    };
    
    module.exports = { actionFn };
    
    20
    <YOUR_ACCOUNT_ID> और <YOUR_PROJECT_SLUG> को अपने वास्तविक Tenderly Account Name और Project Slug से बदलना सुनिश्चित करें।
    21
    Deployment
    22
    अपनी Web3 Action deploy करने के लिए, Tenderly CLI का उपयोग करें:
    23
    tenderly actions deploy
    
    24
    यह command आपकी tenderly.yaml file में परिभाषित action को deploy करेगा।

    यह कैसे काम करता है

    आपके द्वारा सेट अप की गई Web3 Action UniswapV3Factory contract द्वारा PoolCreated event के emit होने पर स्वचालित रूप से trigger होगी। यहाँ actionFn function का breakdown है:
    1. Tenderly context से ACCESS-KEY secret retrieve करें।
    2. अपने account और project विवरण के साथ एक नए Tenderly SDK instance को initialize करें।
    3. ethers.js का उपयोग करके PoolCreated event signature परिभाषित करें।
    4. PoolCreated event खोजने और नए pool का address extract करने के लिए event logs के माध्यम से Loop करें।
    5. Tenderly SDK का उपयोग करके, नए pool contract को अपने Tenderly project में Pool display name के साथ जोड़ें।
    6. आसान प्रबंधन के लिए नए pool contract को pool tag से tag करें।
    7. pool address और tagging प्रक्रिया की पुष्टि log करें।
    यह implementation स्वचालित रूप से नए Uniswap V3 pools को आपके Tenderly project में जोड़ता है और उन्हें tag करता है, जिससे इन contracts की निगरानी और प्रबंधन करना आसान हो जाता है।

    Customization

    अपनी Web3 Action के व्यवहार को modify करने के लिए:
    1. uniswapV3Monitoring.ts file में actionFn को edit करें।
    2. आप pools के लिए एक अलग tag का उपयोग करने के लिए tagName variable को बदल सकते हैं।
    3. event से अधिक जानकारी process करने या Tenderly SDK के साथ अन्य actions करने के लिए अतिरिक्त logic जोड़ें।
    उदाहरण के लिए, अधिक विस्तृत logging जोड़ने के लिए:
    console.log(`New pool created: ${poolAddress}`);
    console.log(`Network: ${alertEvent.network}`);
    console.log(`Transaction hash: ${alertEvent.hash}`);
    

    Monitoring और Troubleshooting

    यह सुनिश्चित करने के लिए कि आपकी Web3 Action सही तरीके से काम कर रही है:
    • Tenderly dashboard में अपनी Web3 Action executions की निगरानी करें
    • किसी भी error संदेशों या execution विवरण के लिए Tenderly logs की जाँच करें
    • transaction विवरण और contract interactions का निरीक्षण करने के लिए Tenderly के debugging tools का उपयोग करें
    • नए जोड़े गए और tag किए गए pool contracts देखने के लिए अपने Tenderly project के Contracts पेज की जाँच करें
    यह setup विशेष रूप से Ethereum mainnet पर UniswapV3Factory contract की निगरानी के लिए designed है।

    निष्कर्ष

    आपने अब UniswapV3Factory contract में नए pool creations को track करने के लिए Tenderly Web3 Actions का उपयोग करके एक custom monitoring system सेट अप कर लिया है। यह project प्रदर्शित करता है कि smart contracts के साथ कैसे interact करें, Tenderly के SDK का उपयोग करें, और विशिष्ट blockchain events की निगरानी और प्रतिक्रिया के लिए एक स्वचालित system कैसे बनाएँ। Uniswap V3 और इसके contracts के बारे में अधिक जानकारी के लिए, Uniswap V3 दस्तावेज़ देखें।