מערכת הגנה מפני התקפות סנדוויץ' ב-DeFi
ההפסד הממוצע מהתקפת סנדוויץ' הוא 100–200 דולר לעסקה, ובעסקאות גדולות הוא יכול להגיע ל-10,000 דולר. הטמעת הגנה יכולה לחסוך עד 20,000 דולר בחודש בהפסדי MEV. לצוות שלנו יש 5 שנות ניסיון בפיתוח בלוקצ'יין והוא סיפק מעל 50 פרויקטים להגנה על פרוטוקולי DeFi. צרו קשר להערכה חינמית של הפרויקט שלכם.
התקפת סנדוויץ' היא צורה של MEV שבה תוקף מציב עסקאות לפני ואחרי החלפה של משתמש ב-mempool הציבורי. ב-AMMs דמויי Uniswap, זה גורם להפסד של עד 5% מסכום ההחלפה עבור משתמשים רגילים. אנחנו עוזרים לפרויקטים לחסל את הפגיעות הזו ברמת החוזה החכם וברמת התשתית. אם הפרויקט שלכם סובל מ-MEV, קבלו ייעוץ מומחה עוד היום.
איך פועלת התקפת סנדוויץ' ולמה היא בעיה?
כדי להבין הגנה, בואו נפרק את מנגנון ההתקפה. ה-mempool הציבורי מאפשר לבוטים של MEV לראות את כל העסקאות הממתינות. הבוט מנתח את פרמטרי ההחלפה (כתובת הטוקן, סכום, סובלנות החלקה) ומחשב כמה לקנות לפני הקורבן ולמכור אחריו כדי להרוויח. ככל שההחלקה המותרת גבוהה יותר, כך חלון ההתקפה רחב יותר. לפי EigenPhi, בוטי סנדוויץ' גדולים ב-Ethereum הרוויחו מאות אלפי דולרים בשבוע על חשבון משתמשים רגילים. לפי ויקיפדיה (קישור), התקפות סנדוויץ' מהוות עד 30% מכלל עסקאות ה-MEV. מחקר משנת 2023 מצא שהתקפות סנדוויץ' עלו למשתמשים 1.3 מיליארד דולר ב-MEV.
הפגיעות טמונה בהשפעת המחיר הדטרמיניסטית: עבור AMM עם הנוסחה x*y=k, התוקף יכול לחשב במדויק את נפח ההחלפה המקדימה שמניב רווח מקסימלי. נקודות תורפה הן החלקה גבוהה והאופי הציבורי של ה-mempool.
אילו שיטות הגנה אנחנו מיישמים?
אנחנו משתמשים בשלוש שכבות הגנה: ברמת העסקה, ברמת החוזה החכם וברמת ארכיטקטורת הפרוטוקול. להלן השוואה בין הגישות העיקריות:
| שיטה | יעילות | מורכבות הטמעה | חוויית משתמש |
|---|---|---|---|
| RPC פרטי (Flashbots Protect) | מפחית סיכון ב-95% | נמוכה (1–2 שבועות) | ללא שינויים |
| חוזה Commit-reveal | חוסם 99% מההתקפות | בינונית (2–3 שבועות) | שני שלבים (חוויית משתמש כבדה) |
| מכירה פומבית בקבוצות (CoW Protocol) | מבטל לחלוטין | גבוהה (2–4 חודשים) | ללא שינויים |
| החלקה דינמית | מפחית ב-50–70% | בינונית (2–3 שבועות) | אוטומטי |
לדוגמה, commit-reveal יעיל פי שניים מהחלקה דינמית נגד התקפות ממוקדות עם החלקה גבוהה.
RPC פרטי וספקי הגנת MEV
ההגנה המהירה ביותר היא לשלוח עסקאות לא ל-mempool הציבורי אלא ישירות לבוני בלוקים. Flashbots Protect מנתב עסקאות ל-bundles של Flashbots—התוקף לא יכול לראות אותן. MEV Blocker של CoW Protocol מבצע את ההחלפה באופן תחרותי דרך מספר מחפשים ומחזיר חלק מה-MEV למשתמש. Bloxroute מציעה ערוצים מוגנים בתשלום. להלן השוואה בין הספקים:
| ספק | סוג | עלות | תכונות נוספות |
|---|---|---|---|
| Flashbots Protect | ממסר פרטי | חינם (גז) | תמיכה ב-bundles, תאימות ל-ethers.js |
| MEV Blocker (CoW) | מכירה פומבית של מחפשים | ללא עמלה | מחזיר MEV למשתמש |
| Bloxroute | ערוץ מוגן | בתשלום | זמן אחזור נמוך, סטרים פרטי |
// Использование Flashbots Protect через ethers.js
const { FlashbotsBundleProvider } = require('@flashbots/ethers-provider-bundle');
const { ethers } = require('ethers');
async function protectedSwap(swapParams, wallet, provider) {
// Подключаемся к Flashbots relay
const flashbotsProvider = await FlashbotsBundleProvider.create(
provider,
wallet,
'https://relay.flashbots.net'
);
// Собираем swap транзакцию как обычно
const swapTx = await buildSwapTransaction(swapParams);
// Отправляем через Flashbots
const bundleSubmission = await flashbotsProvider.sendPrivateTransaction(
{
signer: wallet,
transaction: swapTx
},
{
maxBlockNumber: (await provider.getBlockNumber()) + 10
}
);
const receipt = await bundleSubmission.wait();
return receipt;
} דוגמת הטמעה של חוזה commit-reveal
contract CommitRevealSwap {
mapping(bytes32 => Commitment) public commitments;
struct Commitment {
address user;
uint256 blockNumber;
bool revealed;
}
uint256 public constant MIN_BLOCKS_BEFORE_REVEAL = 1;
uint256 public constant MAX_BLOCKS_BEFORE_REVEAL = 10;
function commit(bytes32 commitHash) external {
commitments[commitHash] = Commitment({
user: msg.sender,
blockNumber: block.number,
revealed: false
});
}
function reveal(
uint256 amountIn,
uint256 amountOutMin,
address[] calldata path,
bytes32 salt
) external {
bytes32 commitHash = keccak256(abi.encodePacked(
msg.sender,
amountIn,
amountOutMin,
keccak256(abi.encode(path)),
salt
));
Commitment storage commitment = commitments[commitHash];
require(commitment.user == msg.sender, "Not your commit");
require(!commitment.revealed, "Already revealed");
require(
block.number >= commitment.blockNumber + MIN_BLOCKS_BEFORE_REVEAL,
"Too early"
);
require(
block.number <= commitment.blockNumber + MAX_BLOCKS_BEFORE_REVEAL,
"Expired"
);
commitment.revealed = true;
_executeSwap(amountIn, amountOutMin, path, msg.sender);
}
} מכירות פומביות בקבוצות: הפתרון הארכיטקטוני של CoW Protocol
CoW Protocol פותר את הבעיה ברמת הארכיטקטורה. הזמנות נאספות על פני תקופה (מספר בלוקים), פותר off-chain מוצא את הביצוע האופטימלי עבור כל הקבוצה, ועסקת סילוק אחת מתפרסמת עם מחיר אחיד. במכירה פומבית בקבוצות, אין מקום לסנדוויץ': התוקף לא יכול להשתלב בין הזמנה לביצוע כי הן מופרדות בזמן.
Обычный AMM:
Block N: frontrun_buy → user_swap → backrun_sell
CoW Batch Auction:
Block N: submit_order(user1), submit_order(user2), ...
Block N+3: solver publishes settlement_tx с uniform price איך אנחנו מתכננים את מערכת ההגנה
התהליך מורכב מחמישה שלבים:
- אנליטיקה — לימוד הפרוטוקול שלכם, החוזים החכמים, עסקאות המשתמשים האופייניות, רמת פעילות ה-MEV הנוכחית.
- עיצוב — בחירת שילוב של שיטות הגנה לפי הדרישות שלכם (אבטחה, חוויית משתמש, תקציב).
- הטמעה — כתיבת חוזים חכמים (Solidity), אינטגרציה של RPCs פרטיים, הגדרת החלקה דינמית.
- בדיקות — כיסוי בבדיקות יחידה ו-fuzzing (Echidna), הרצה על testnet, סימולציה של התקפות סנדוויץ'.
- פריסה וניטור — פריסה על mainnet, חיבור לניטור פעילות MEV (Tenderly, דשבורדים מותאמים).
אנחנו מבטיחים שקיפות: כל שלב מלווה בתיעוד, אנחנו מספקים גישה למאגר הקוד והדרכה לצוות שלכם.
מה כלול
- ביקורת של הארכיטקטורה הנוכחית וזיהוי פגיעויות להתקפות סנדוויץ'.
- פיתוח והטמעה של שיטות ההגנה הנבחרות.
- קוד מקור של חוזים חכמים (Solidity) עם כיסוי בדיקות.
- הגדרת RPCs פרטיים (Flashbots, MEV Blocker) — התקנה ואינטגרציה.
- תיעוד תפעולי והוראות למשתמשים.
- מערכת ניטור עם התראות על עליות חריגות בפעילות MEV.
- תמיכה טכנית למשך 3 חודשים לאחר הפריסה.
לוח זמנים ועלות
לוחות הזמנים תלויים במורכבות: אינטגרציית RPC פרטי — משבוע; חוזה commit-reveal — משבועיים; מערכת מלאה עם ניטור — מארבעה שבועות; פרוטוקול מכירה פומבית בקבוצות — מחודשיים. העלות מחושבת באופן אישי לפרויקט שלכם — צרו קשר, ונעריך את המשימה תוך 2 ימי עסקים.
ניטור וזיהוי התקפות
להגנה מתמשכת, אנחנו מיישמים רכיב ניטור שעוקב אחר פעילות בוטי MEV, מנתח הפסדי משתמשים ושולח התראות בזמן עליות חריגות של סנדוויץ'. הטמעת מערכת כזו יכולה לחסוך עד 15,000 דולר בחודש.
async function detectSandwichInBlock(blockNumber, provider, uniswapAddress) {
const block = await provider.getBlock(blockNumber, true);
const uniswapTxs = block.transactions.filter(
tx => tx.to?.toLowerCase() === uniswapAddress.toLowerCase()
);
const sandwiches = [];
for (let i = 1; i < uniswapTxs.length - 1; i++) {
const prev = uniswapTxs[i - 1];
const current = uniswapTxs[i];
const next = uniswapTxs[i + 1];
if (prev.from === next.from && prev.from !== current.from) {
const prevDecoded = decodeSwap(prev.data);
const nextDecoded = decodeSwap(next.data);
if (prevDecoded && nextDecoded && prevDecoded.tokenIn === nextDecoded.tokenOut) {
sandwiches.push({
attacker: prev.from,
victim: current.from,
frontrunTx: prev.hash,
victimTx: current.hash,
backrunTx: next.hash,
estimatedProfit: calculateSandwichProfit(prevDecoded, nextDecoded)
});
}
}
}
return sandwiches;
}קבלו ייעוץ מומחה על הגנת DeFi עוד היום. צרו קשר להערכה חינמית של הפרויקט שלכם.







