Security·10 min का पठन·Solingo द्वारा

Front-Running और MEV — Ethereum का Dark Forest

Front-running और MEV (Maximal Extractable Value) से billions drain होते हैं। Transaction ordering manipulation, sandwich attacks, और protection techniques को समझें।

# Front-Running और MEV — Ethereum का Dark Forest

Ethereum mempool एक "dark forest" है जहां sophisticated bots हर pending transaction को scan करते हैं, profitable opportunities खोजते हैं, और users से value extract करते हैं। Front-running, sandwich attacks, और MEV extraction DeFi में billions में measure होता है।

इस comprehensive guide में, हम explore करेंगे कि transaction ordering manipulation कैसे काम करता है, common attack patterns, और protection techniques।

Front-Running क्या है?

Front-running तब होता है जब कोई attacker आपके pending transaction को देखता है और अपना transaction पहले execute करवाने के लिए higher gas price pay करता है।

Traditional Finance में Front-Running

Stock markets में, broker आपका buy order देखता है और आपसे पहले खरीद लेता है, फिर आपको higher price पर बेचता है। यह illegal है।

Blockchain में Front-Running

Ethereum पर, mempool public है — हर कोई pending transactions देख सकता है। Front-running technically legal है (controversial है, लेकिन protocol level पर allowed है)।

MEV (Maximal Extractable Value)

MEV वह maximum value है जो miners/validators transaction ordering, inclusion, या exclusion को manipulate करके extract कर सकते हैं।

MEV के Types

  • DEX Arbitrage — prices differences को exploit करना across DEXes
  • Liquidation — collateralized positions को liquidate करना
  • Sandwich Attacks — user trades के आगे-पीछे trades place करना
  • NFT Sniping — underpriced NFTs को grab करना
  • Oracle Manipulation — price oracles को manipulate करके profit कमाना
  • Sandwich Attack — सबसे Common MEV Attack

    Kaise काम करता है

    User का trade: Buy 10 ETH worth of TOKEN at current price
    
    

    Attacker देखता है pending transaction:

  • Front-run: Attacker खरीदता है TOKEN (price बढ़ता है)
  • User का trade executes (higher price पर)
  • Back-run: Attacker बेचता है TOKEN (profit!)
  • Result:

    • User को worse price मिलता है
    • Attacker profit करता है
    • यह हर swap पर हो सकता है

    Code Example

    // User's swap transaction (in mempool)
    

    function swap() external {

    uniswap.swapExactETHForTokens{value: 10 ether}(

    0, // No minimum output (VULNERABLE!)

    path,

    msg.sender,

    block.timestamp

    );

    }

    // Attacker's sandwich attack

    function sandwich(address token) external {

    // 1. FRONT-RUN: Buy token before user

    uniswap.swapExactETHForTokens{value: 50 ether}(

    0,

    path,

    address(this),

    block.timestamp

    );

    // User's transaction executes here (higher price)

    // 2. BACK-RUN: Sell token after user

    uint256 balance = IERC20(token).balanceOf(address(this));

    uniswap.swapExactTokensForETH(

    balance,

    0,

    reversePath,

    address(this),

    block.timestamp

    );

    }

    Real Numbers

    मान लें:

    • Initial TOKEN price: 1 ETH = 1000 TOKEN
    • User swap करना चाहता है: 10 ETH → TOKEN

    Without attack:

    • User receives: ~10,000 TOKEN (minus fees)

    With sandwich attack:

    • Attacker buys 50 ETH worth → price pumps to 1 ETH = 950 TOKEN
    • User buys 10 ETH worth → receives only ~9,100 TOKEN
    • Attacker sells → pockets ~5-10 ETH profit
    • User loss: 900+ TOKEN (~10% slippage!)

    Transaction Ordering के Types

    1. Priority Gas Auctions (PGA)

    Attacker higher gas price bid करता है।

    User transaction: 50 gwei gas price
    

    Attacker sees it in mempool

    Attacker transaction: 100 gwei gas price → mines first

    2. Time-Bandit Attacks

    Validators पुराने blocks को reorganize करते हैं MEV extract करने के लिए।

    3. Uncle Bandit Attacks

    Attackers uncle blocks में transactions submit करते हैं।

    Common MEV Opportunities

    1. DEX Arbitrage

    // Price difference exploit
    

    function arbitrage() external {

    // Buy on DEX A (lower price)

    uint256 amount = uniswap.swapExactETHForTokens{value: 100 ether}(...);

    // Sell on DEX B (higher price)

    sushiswap.swapExactTokensForETH(amount, ...);

    // Profit!

    }

    2. Liquidation Front-Running

    // Bot watches for undercollateralized positions
    

    function liquidate(address user) external {

    require(vault.isLiquidatable(user), "Not liquidatable");

    // Liquidate और collateral claim करें

    vault.liquidate(user);

    // Bots compete in gas auctions to liquidate first

    }

    3. NFT Sniping

    // Bot sees underpriced NFT listing
    

    function snipe(uint256 tokenId) external {

    // Front-run buyer with higher gas

    nft.buy{value: 1 ether}(tokenId);

    // Resell for profit

    nft.sell(tokenId, 1.5 ether);

    }

    Protection Techniques

    1. Slippage Protection (Minimum Output)

    // VULNERABLE
    

    uniswap.swapExactETHForTokens{value: 10 ether}(

    0, // No minimum! Attacker can sandwich

    path,

    msg.sender,

    block.timestamp

    );

    // PROTECTED

    uniswap.swapExactETHForTokens{value: 10 ether}(

    9500, // Minimum 9500 tokens (5% slippage tolerance)

    path,

    msg.sender,

    block.timestamp

    );

    How it helps: अगर price बहुत ज़्यादा move होती है (sandwich attack से), transaction revert होगी।

    2. Commit-Reveal Scheme

    दो-step process: पहले commit करें, बाद में reveal करें।

    contract CommitReveal {
    

    mapping(address => bytes32) public commits;

    mapping(address => bool) public revealed;

    // Step 1: Commit (hide your trade details)

    function commit(bytes32 hash) external {

    commits[msg.sender] = hash;

    }

    // Step 2: Reveal (execute trade after some blocks)

    function reveal(uint256 amount, bytes32 secret) external {

    require(!revealed[msg.sender], "Already revealed");

    bytes32 hash = keccak256(abi.encodePacked(amount, secret));

    require(commits[msg.sender] == hash, "Invalid reveal");

    revealed[msg.sender] = true;

    // Execute trade

    _executeTrade(amount);

    }

    }

    How it helps: Attacker को पता नहीं चलता कि आप क्या trade करने वाले हैं (committed hash decrypt नहीं कर सकता)।

    3. Flashbots Protect

    Flashbots एक private mempool है जहां transactions publicly visible नहीं होते।

    // Send transaction via Flashbots RPC
    

    const tx = await wallet.sendTransaction({

    to: contractAddress,

    data: calldata,

    // Special Flashbots fields

    flashbots: {

    maxBlockNumber: currentBlock + 5, // Expire after 5 blocks

    }

    });

    How it helps:

    • Transaction public mempool में नहीं जाता
    • Directly validators को भेजा जाता है
    • Front-running से protected

    Limitations:

    • अभी भी validators देख सकते हैं
    • सभी validators Flashbots support नहीं करते

    4. Time Locks

    Critical operations को delay करें।

    contract TimeLocked {
    

    mapping(address => uint256) public withdrawalRequests;

    function requestWithdrawal() external {

    withdrawalRequests[msg.sender] = block.timestamp;

    }

    function withdraw() external {

    require(

    block.timestamp >= withdrawalRequests[msg.sender] + 1 days,

    "Too early"

    );

    // Execute withdrawal

    }

    }

    How it helps: Attacker को immediate execution से benefit नहीं मिलता — users को react करने का time मिलता है।

    5. Batch Auctions (Gnosis Auction)

    सभी orders को एक साथ collect करें, फिर single clearing price निकालें।

    How it helps: Transaction ordering irrelevant हो जाती है — सभी को same price मिलता है।

    6. Private Transactions (Aztec, Railgun)

    Zero-knowledge proofs के साथ transactions को fully hide करें।

    How it helps: Attacker को transaction details नहीं दिखते।

    MEV-Boost और PBS (Proposer-Builder Separation)

    Ethereum post-Merge में MEV extraction को democratize करने के लिए:

    • Builders transactions order करते हैं (MEV extract करते हैं)
    • Proposers (validators) highest-paying block select करते हैं
    • Searchers MEV opportunities खोजते हैं

    Idea: MEV को centralize होने से रोकना, validators को bribe करने की बजाय market mechanism use करना।

    MEV के Positive Use Cases

    सभी MEV bad नहीं होता:

    1. Arbitrage (Price Efficiency)

    Arbitrage bots different DEXes के बीच prices sync करते हैं — यह markets को efficient बनाता है।

    2. Liquidations (Protocol Health)

    Liquidation bots lending protocols को healthy रखते हैं — bad debt को clear करते हैं।

    3. Oracle Updates

    Bots price oracles को up-to-date रखते हैं।

    Controversy: ये activities users को directly harm नहीं करते, लेकिन ecosystem से value extract करते हैं।

    Real-World MEV Statistics

    2023 MEV Data (Flashbots):

    • Total MEV extracted: $500+ million
    • Sandwich attacks: 40-50% of all MEV
    • Arbitrage: 30-40%
    • Liquidations: 10-15%

    Biggest single MEV profit: $9.5 million (atomic arbitrage)

    Detection Tools

    1. MEV-Inspect

    Flashbots tool जो historical MEV को analyze करती है।

    git clone https://github.com/flashbots/mev-inspect-py
    

    cd mev-inspect-py

    python3 -m mev_inspect inspect-block 15000000

    2. EigenPhi

    MEV analytics platform — sandwich attacks, arbitrage, liquidations track करता है।

    3. Etherscan MEV Labels

    Recent Etherscan transactions में "MEV Bot" labels दिखाई देते हैं।

    Best Practices Checklist

    • ✅ हमेशा slippage tolerance set करें DEX swaps में
    • ✅ Large trades को multiple smaller transactions में break करें
    • ✅ Flashbots Protect use करें sensitive transactions के लिए
    • ✅ Commit-reveal patterns consider करें critical operations में
    • ✅ Private transaction protocols explore करें (Aztec, etc.)
    • ✅ Time locks implement करें large withdrawals/transfers के लिए
    • ✅ Batch auctions use करें token sales/distributions के लिए
    • ✅ MEV-aware designing करें — assume attackers सब देख सकते हैं
    • ✅ Educate users slippage settings के बारे में
    • ✅ Monitor करें अपने protocol को MEV extraction के लिए

    Conclusion

    MEV Ethereum का एक fundamental aspect है — यह गायब नहीं होगा। जैसे-जैसे DeFi grow करता है, MEV extraction भी sophisticated होता जाता है।

    Key takeaways:

    • Public mempool = सब कुछ visible है
    • Sandwich attacks सबसे common user harm है
    • Slippage protection basic defense है
    • Flashbots Protect immediate solution है
    • Long-term: encrypted mempools, PBS, account abstraction
    • MEV extraction annually billions में है
    • कुछ MEV beneficial है (arbitrage, liquidations)
    • Users को aware होना चाहिए और protect करना चाहिए

    Solingo पर, आप MEV attacks को simulate करेंगे, protection mechanisms implement करेंगे, और MEV-resistant protocols design करना सीखेंगे। Dark forest को navigate करें knowledge के साथ।

    अभी शुरू करें: solingo.io/security/mev

    Practice में लगाने के लिए तैयार हैं?

    Solingo पर interactive exercises के साथ इन concepts को apply करें।

    मुफ्त में शुरू करें