मुख्य सामग्री पर जाएं
इस ट्यूटोरियल में, आप सीखेंगे कि bundled transactions को simulate करने के लिए Tenderly SDK का उपयोग कैसे करें। एक bundled transaction कई transactions का एक संग्रह है जिन्हें एक इकाई के रूप में simulate किया जाता है। Bundled transactions का उपयोग अक्सर DeFi protocols और अन्य एप्लिकेशन में जटिल ऑपरेशन्स करने की प्रक्रिया को simulate करने के लिए किया जाता है जिनमें कई contract इंटरैक्शन शामिल होते हैं।
एक bundle से transactions एक ही blocks पर simulate किए जाते हैं।
हम DAI की एक विशेष राशि को WETH के लिए स्वैप करने के लिए Uniswap के उपयोग को simulate करेंगे, और simulate किए गए transactions की निष्पादन स्थिति दिखाएंगे, और उपयोग की गई कुल gas की गणना करेंगे। इसे प्राप्त करने के लिए आवश्यक transactions इस प्रकार हैं:
  1. 2 DAI के minting को simulate करें ताकि स्वैपर के पास स्वैप करने के लिए कुछ संपत्ति हो। वैकल्पिक रूप से, यदि आपके पास DAI है, तो आप इसे छोड़ सकते हैं और सिर्फ transaction 2 कर सकते हैं।
  2. UniswapV3Router को DAI का उपयोग करने के लिए Approve करें
  3. स्वैप करें। स्वैप करने के लिए UniswapV2Router.exactInputSingle को कॉल करें।
पहले transaction को सफलतापूर्वक चलाने के लिए, प्रेषक को DAI stablecoin का ward होना आवश्यक है। चूंकि हम में से अधिकांश नहीं हैं, हम देखेंगे कि Bundled Simulation के संदर्भ में “ward बनने” के लिए State Overrides का उपयोग कैसे करें।

आवश्यक शर्तें

चरण 1: Project सेट अप करें

एक नया npm project बनाएं, निर्भरताएं इंस्टॉल करें, और अपने टर्मिनल में निम्नलिखित कमांड पेस्ट करके Typescript कॉन्फ़िगर करें:
example

चरण 2: Simulation API को कॉल करें

नीचे दिए गए पूर्ण चलाने योग्य उदाहरण को कॉपी करें और इसे swap.ts फ़ाइल में पेस्ट करें। Transactions को functions mint2DaiTx, approveUniswapV3RouterTx, और swapSomeDaiForWethTx द्वारा निर्धारित किया जाता है:
example.ts
ट्यूटोरियल में आगे, आप इस बात के विस्तृत स्पष्टीकरण पाएंगे कि कोड क्या कर रहा है।

चरण 3: स्क्रिप्ट चलाएं

example

कोड को समझना

पहले, हम Tenderly SDK का एक नया इंस्टेंस बना रहे हैं:
example.ts
Simulation API को कॉल करने और एक bundled simulation करने के लिए, हम Tenderly.simulator.simulateBundle() का उपयोग कर रहे हैं और निम्नलिखित फ़ील्ड्स वाला एक object पास कर रहे हैं:
  • blockNumber - वह block number जिस पर आप simulation को निष्पादित करना चाहते हैं।
  • transactions - तीन transactions रखने वाली एक array: 2 DAI का minting, Uniswap Router की approving, और WETH के लिए DAI की swapping।
  • overrides - एक object जो simulation के भीतर fakeWardAddress को DAI का ward बनाता है।
example.ts

State Overrides को समझना

हम DAI stablecoin के mint function को कॉल कर रहे हैं। simulation के दौरान, DAI contract को यह विश्वास करना होगा कि आप (प्रेषक) wards में से एक हैं। अन्यथा, यह mint करने से इंकार कर देगा। fakeWardAddressEOA द्वारा शुरू किए गए एक सफल minting के लिए DAI contract के state के लिए हमें निम्नलिखित शर्त को बनाए रखना होगा:
example.ts
इसे सक्षम करने के लिए, हम SDK को overrides पास कर रहे हैं, जहां हम DAI wards storage variable को override कर रहे हैं, ताकि simulation के दौरान fakeDaiWardAddress एक ward बन जाए।
example.ts
ध्यान दें कि overrides पूरे bundle पर लागू होते हैं और bundle के भीतर सभी simulations के लिए दृश्यमान होते हैं।
अब, आपको जटिल simulation परिदृश्यों को करने और आवश्यक परिणामों को प्रदर्शित करने के लिए Tenderly SDK का उपयोग करने की बेहतर समझ है।