मुख्य सामग्री पर जाएं
इस guide में, हम transaction विफलता के मूल कारण की जाँच करेंगे और fix को सत्यापित करेंगे। हम एक Uniswap transaction देखेंगे। यह transaction swapExactTokensForTokens का प्रयास करता है।
1
Tenderly dashboard के search में transaction hash पेस्ट करें
2
Transaction hash: 0xbe082dcc8ae59868f5b2330173902bb88c6643b5c2fdf0d8a9f43d03dbca0c36
3
error का पता लगाएँ
4
Revert swapExactTokensForTokens में हुआ, amountOutMin से संबंधित एक condition की जाँच करते हुए जो एक input parameter है। यह निम्नलिखित error message के साथ revert हुआ: Error message: UniswapV2Router: INSUFFICIENT_OUTPUT_AMOUNT
5
Inputs section से, हम देख सकते हैं कि amountOutMin का मान 1102820622890207119 था।
6
7
revert condition का पता लगाएँ
8
debugger view में जाएँ। ध्यान दें कि require में amounts[amounts.length - 1] शामिल है।
9
10
expression का मूल्यांकन करें
11
इस expression का मान प्राप्त करने के लिए, आप Evaluate का उपयोग कर सकते हैं:
12
  • सुनिश्चित करें कि debugger revert की line पर है,
  • expression `amounts[amounts.length - 1] पेस्ट करें,
  • “Evaluate” बटन दबाएँ।
  • 13
    मान है: मान 1029855063181377015 है।
    14
    15
    call जानकारी से मान प्राप्त करें
    16
    आप उस function का विश्लेषण करके भी प्रश्न में expression का मान निकाल सकते हैं जिसने मान उत्पन्न किया:
    17
  • बाईं ओर के Execution trace से debugger को getAmountsOut पर move करें
  • निचले pane में output खोजें
  • चूँकि expression amounts[amounts.length - 1] array का अंतिम element प्राप्त करता है, हम यह निष्कर्ष निकालते हैं कि प्रश्न में मान 1029855063181377015 है।
  • 18
    19
    संभावित समाधान
    20
    यह transaction सफल हो जाती अगर amountOutMin का मान 1029855063181377015 होता।
    21
    समाधान का सत्यापन
    22
    समाधान सत्यापित करने के लिए, “Re-Simulate” बटन पर क्लिक करें:
    23
  • दूसरे argument में मान 1029855063181377015 पेस्ट करें
  • Simulate पर क्लिक करें।
  • 24
    Simulation सफल हो गई है, इसका मतलब है कि हमें सही argument मान मिल गया है।
    25
    Swap transactions समय-संवेदनशील होती हैं, वे block.timestamp मान को ध्यान में रखती हैं। Simulations डिफ़ॉल्ट रूप से मूल block पर और मूल timestamp पर execute होती हैं। केवल यदि आपको custom block और timestamp मानों की आवश्यकता हो, तो आप उस उद्देश्य के लिए block header overrides का उपयोग कर सकते हैं।