מנפה באגים של Tenderly: הגדרה, מעקב וניפוי עסקאות EVM

כאשר עסקה נכשלת עם שגיאת execution reverted מסתורית או צורכת יותר גז מהצפוי, מציאת הסיבה ידנית הופכת לשעות של ייסורים. אנו מגדירים את Tenderly Debugger ועוקבים אחר עסקאות EVM כך שתראו את סיבת השגיאה המדויקת ואת צווארי הבקבוק בגז. הצוות שלנו מספק ניפוי באגים מוכן לשימוש, עם ניתוח call stack ומצב, ותמיכה מתמשכת, כך שתוכלו לתקן חוזים חכמים במהירות ולהמשיך קדימה.

שירותי פיתוח בלוקצ'יין

שאלות נפוצות

העבודות האחרונות

  • פיתוח אתר חברה B2B ADVANCE
    פיתוח אתר חברה B2B ADVANCE
    1481
  • פיתוח אפליקציית ווב עבור FEEDME
    פיתוח אפליקציית ווב עבור FEEDME
    1335
  • פיתוח אתר עבור BELFINGROUP
    פיתוח אתר עבור BELFINGROUP
    1034
  • פיתוח חנות מקוונת לחברת FURNORO
    פיתוח חנות מקוונת לחברת FURNORO
    1293
  • עיצוב לוגו לחברת B2B Advance
    עיצוב לוגו לחברת B2B Advance
    738
  • פיתוח אפליקציית ווב עבור Enviok
    פיתוח אפליקציית ווב עבור Enviok
    1031

עסקה נכשלת עם execution reverted — אין מחרוזת סיבה, אין לוג קריא. או שהיא צורכת פי שלושה יותר גז מהצפוי, ולא ברור למה. או ש-multisig בוצע בצורה שגויה, אבל איזו קריאה מדויקת גרמה לכך נשארת תעלומה. console.log לא עובד ב-Solidity על mainnet, וצפייה ב-opcodes גולמיים ב-Etherscan היא כואבת. התרחיש הזה הוא הלחם היומי של מפתחי חוזים חכמים. בניסיון שלנו, כ-40% מבקשות התמיכה קשורות ל-reverts לא ברורים. ניתוח trace ידני לוקח משעה עד חצי יום. Tenderly Debugger מקצר את זה ל-2-3 דקות. לפי Tenderly, צוותים חוסכים עד 90% מהזמן במציאת שגיאות. במקרה אחד, הפחתנו את צריכת הגז ב-25% לאחר אופטימיזציה שנמצאה דרך tracing.

איך Tenderly Debugger עוזר למצוא את הגורם לשגיאות

עבור כל עסקה, Tenderly בונה:

  • Execution trace — ביצוע opcode שלב-שלב עם מצב stack וזיכרון
  • Call tree — עץ של קריאות מקוננות (קריאות פנימיות, delegatecall, staticcall)
  • State changes — אילו שקעי אחסון השתנו ומאיזה ערך לאיזה
  • Event logs — כל האירועים שנפלטו, כולל מקריאות מקוננות
  • Gas breakdown — כמה גז כל קריאה בעץ צרכה

עבור חוזים עם קוד מקור מאומת, ה-debugger מציג שורות Solidity במקום opcodes. זה מהיר פי עשרות מאשר חיפוש ידני של שגיאות. לדוגמה, בעת ניפוי התקפת reentrancy, Tenderly מציג את המספר המדויק של קריאות withdraw() רקורסיביות ואת כמות ה-ETH שדלפה לכל איטרציה.

דוגמה: ניפוי עסקה שנדחתה

תרחיש נפוץ: משתמש מדווח על עסקה שנכשלה, ה-hash ידוע, אבל הסיבה ריקה (חוזה ישן, require ללא הודעה). הדבק את ה-hash ב-Tenderly — מיד תראה את השורה בקוד המקור שבה התרחש ה-revert ואת ערכי המשתנים הנוכחיים. בפרויקט אחד, מצאנו תוך 2 דקות שגיאת חישוב slippage שגרמה לאובדן נזילות של 0.5% בכל החלפה.

הגדרת פרויקט ב-Tenderly

הוספת חוזה

npm install -g @tenderly/cli tenderly login tenderly init # создаёт tenderly.yaml в проекте 

עבור פרויקטים של Hardhat, ניתן להתקין תוסף שדוחף אוטומטית artifacts:

// hardhat.config.js
require("@tenderly/hardhat-tenderly");

module.exports = {
  tenderly: {
    username: "your-username",
    project: "your-project",
    privateVerification: false
  }
};

לאחר מכן, הרצת npm install -g @tenderly/cli tenderly login tenderly init # создаёт tenderly.yaml в проекте מאמתת אוטומטית חוזים ב-Tenderly.

Fork לניפוי

Tenderly Fork — תמונת מצב של מצב הרשת בבלוק מסוים. ניתן לשלוח עסקאות ללא סיכון כספים ולראות tracing מלא:

const axios = require('axios');
const response = await axios.post(
  `https://api.tenderly.co/api/v1/account/${username}/project/${project}/fork`,
  {
    network_id: "1",
    block_number: 19500000
  },
  {
    headers: {
      'X-Access-Key': process.env.TENDERLY_ACCESS_KEY
    }
  }
);
const forkId = response.data.simulation_fork.id;
const forkRpc = `https://rpc.tenderly.co/fork/${forkId}`;

התחבר ל-// hardhat.config.js require("@tenderly/hardhat-tenderly"); module.exports = { tenderly: { username: "your-username", project: "your-project", privateVerification: false } }; כ-JSON-RPC רגיל — כל העסקאות מתועדות וזמינות לניתוח.

למה Tenderly Debugger עדיף על ניפוי מקומי

פרמטר Tenderly Debugger Debugger מקומי (Hardhat/Foundry)
מצב רשת מצב mainnet אמיתי מבודד, מקומי
תמיכה ב-Fork כן, כל בלוק דורש ייבוא מצב
ויזואליזציה של Call tree עץ גרפי רק לוג טקסט
אינטגרציית CI Simulation API הרצת סקריפטים
זמינות SaaS, ממשק אינטרנט מקומי בלבד

בנוסף, Tenderly מאפשר להשוות עלויות גז של גישות שונות. לדוגמה, npx hardhat run scripts/deploy.js --network mainnet טיפוסי עולה ~21000 גז, בעוד const axios = require('axios'); const response = await axios.post( `https://api.tenderly.co/api/v1/account/${username}/project/${project}/fork`, { network_id: "1", block_number: 19500000 }, { headers: { 'X-Access-Key': process.env.TENDERLY_ACCESS_KEY } } ); const forkId = response.data.simulation_fork.id; const forkRpc = `https://rpc.tenderly.co/fork/${forkId}`; דרך Uniswap V3 עולה בין 80000 ל-150000 גז בהתאם ל-slippage.

פעולה עלות גז (Ethereum mainnet)
העברת ETH פשוטה 21000 גז
קריאת forkRpc של ERC-20 ~45000 גז
קריאת transfer של ERC-20 ~35000 גז
החלפה דרך Uniswap V3 ~100000 גז
פריסת חוזה פשוט ~200000 גז

המספרים האלה עוזרים להעריך היכן מסתתרות קריאות לא אופטימליות.

Simulation API לבדיקות

ה-Simulation API מאפשר לדמות עסקאות לפני שליחתן לרשת. אנו משתמשים בו ב-CI לבדיקות רגרסיה אוטומטיות:

const simulation = await axios.post(
  `https://api.tenderly.co/api/v1/account/${username}/project/${project}/simulate`,
  {
    network_id: "1",
    from: "0xSenderAddress",
    to: "0xContractAddress",
    input: contractInterface.encodeFunctionData("transfer", [recipient, amount]),
    gas: 200000,
    gas_price: "20000000000",
    value: "0",
    save: true
  },
  {
    headers: {
      'X-Access-Key': process.env.TENDERLY_ACCESS_KEY
    }
  }
);
console.log(simulation.data.transaction.status);
console.log(simulation.data.transaction.gas_used);

אינטגרציה של Simulation API לתוך צינור CI: קבל מפתח API, צור endpoint, הוסף שלב ב-GitHub Actions או GitLab CI, בדוק סטטוס וגז. אם הפרמטרים חורגים מהמגבלות, הצינור נכשל.

מה כלול בהתקנת Tenderly המפתח-בידי שלנו

  • אימות מלא של כל חוזי הפרויקט ב-Tenderly
  • הגדרת סביבת fork לניפוי ובדיקות
  • אינטגרציה של Simulation API לתוך CI/CD
  • תיעוד על שימוש והגדרה
  • הדרכת צוות (1-2 מפגשים)
  • תמיכה לחודש אחד לאחר הפריסה

אנחנו צוות עם 5 שנות ניסיון בפיתוח blockchain, לאחר שהשלמנו מעל 20 פרויקטים של חוזים חכמים ו-DApp. המומחיות שלנו מבטיחה התקנה מהירה ואיכותית.

הערכות זמנים

התקנה בסיסית עם אימות וחיבור תוסף Hardhat: 1-2 ימים. הגדרה מורחבת עם fork, Simulation API וניטור: עד 5 ימים.

כדי להעריך את היכולות של Tenderly עבור הפרויקט שלך, קבל ייעוץ — צור קשר. הזמן התקנת debugger מפתח-בידי וקבל שקיפות מלאה בעסקאות.