MEV Extraction Strategies: Sandwich, Arbitrage, Liquidations

MEV Extraction Strategies: Sandwich, Arbitrage, Liquidations
Photo by www.kaboompics.com on Pexels
Quick Answer: MEV (Maximal Extractable Value) extraction in 2026 is dominated by three core strategies: (1) DEX Arbitrage — ~45% of all MEV, profit from price differences across AMM pools; (2) Liquidations — ~30% of MEV on lending protocols, claim liquidation bonuses; (3) Sandwich Attacks — ~20% of MEV, front-run and back-run user trades to extract slippage. The remaining ~5% comes from JIT liquidity, backrunning, and time-bandit attacks. Total MEV extracted across all chains in 2026: ~$2.5B/year on Ethereum, ~$800M on Solana, ~$300M on L2s. The searcher landscape has professionalized: top 10 searchers capture ~40% of all MEV, deploying sophisticated algorithms and custom low-latency infrastructure. PBS (Proposer-Builder Separation) has reduced but not eliminated MEV — it has redistributed it from miners/validators to block builders and searchers.
MEV Landscape 2026: By the Numbers
Total MEV Extracted (Annual, All Chains)
| Chain | 2024 | 2025 | 2026 (est.) | Trend |
|---|---|---|---|---|
| Ethereum | $1.8B | $2.2B | $2.5B | ↑ Growing |
| Solana | $400M | $600M | $800M | ↑↑ Fast growing |
| Arbitrum | $80M | $120M | $150M | ↑ Growing |
| Optimism | $40M | $60M | $75M | ↑ Growing |
| Base | $30M | $55M | $75M | ↑↑ New MEV market |
| BSC | $200M | $250M | $280M | → Stable |
MEV Distribution by Strategy (Ethereum, 2026)
DEX Arbitrage: 45% ────────────────────────────── $1.125B
Liquidations: 30% ───────────────────── $750M
Sandwich Attacks: 20% ────────────── $500M
JIT Liquidity: 3% ──── $75M
Other (backrunning, 2% ── $50M
time-bandit, etc.)
Who Gets the MEV?
Pre-PBS (2022): Post-PBS (2026):
Miners: 80% Block Builders: 45%
Searchers: 15% Searchers: 30%
Users (loss): -5% Validators: 20%
Users (loss): -5%
Protocol treasuries: 5% (via MEV burn)
Key change: PBS redistributed MEV from validators to builders.
Searchers still compete, but builders capture the spread.
Strategy 1: DEX Arbitrage
How It Works
The most basic and most profitable MEV strategy. Exploit price discrepancies between different AMM pools.
Arbitrage opportunity:
Pool A (Uniswap V3): 1 ETH = 3,200 USDC
Pool B (Curve): 1 ETH = 3,215 USDC
Profit: 15 USDC per ETH arbitraged
Arbitrage bot:
1. Buy ETH on Pool A for 3,200 USDC
2. Sell ETH on Pool B for 3,215 USDC
3. Profit: 15 USDC (minus gas: ~$2-5)
Net: ~$10-13 per arbitrage
Advanced Arbitrage: Multi-Pool and Multi-Hop
Modern arbitrage bots don't just trade between 2 pools — they find the optimal path across multiple pools:
Example: ETH → USDC → DAI → ETH
Uniswap V3 (ETH/USDC): 1 ETH = 3,200 USDC
Sushiswap (USDC/DAI): 1 USDC = 0.98 DAI
Balancer (DAI/ETH): 1 DAI = 0.00031 ETH
Net: 1 ETH → 3,200 USDC → 3,136 DAI → 0.972 ETH
Profit: 0.028 ETH (~$90) minus gas (~$30)
Net profit: ~$60
Arbitrage Detection
// On-chain example of an arbitrage transaction
// Tx: 0xabcd... on block 19,500,000
// 1. Flash loan 5,000 ETH from Aave
// 2. Swap on Uniswap V3: 5,000 ETH → 16,000,000 USDC
// 3. Swap on Curve: 16,000,000 USDC → 5,050 ETH
// 4. Repay flash loan: 5,000 ETH + 0.1 ETH fee
// 5. Profit: 49.9 ETH (~$160K)
// Gas used: 350,000
// Gas price: 50 gwei
// Gas cost: 0.0175 ETH ($56)
// Net profit: $159,944
Searcher Competition
| Factor | Impact on Profit | 2026 Data |
|---|---|---|
| Number of searchers | More searchers = thinner margins | ~500 active on Ethereum |
| Gas price auctions | Bids drive costs up to near-profit | Avg bid: 60% of profit |
| Bundle competition | First to submit wins | Winning time: ~200ms |
| Flashbots vs public | Private = higher win rate | Flashbots: 80% of bundles |
Monthly Revenue for an Average Arbitrage Searcher
| Tier | Monthly Arbitrage Profit | Hardware Cost | Net |
|---|---|---|---|
| Retail (1 searcher, basic setup) | $2K-$8K | $100 (VPS) | $1.9K-$7.9K |
| Mid-tier (3 searchers, optimized) | $15K-$50K | $2K (dedicated server) | $13K-$48K |
| Elite (custom algorithms, low latency) | $200K-$1M+ | $50K (colo + custom hardware) | $150K-$950K+ |
Strategy 2: Liquidations
How Liquidations Work
When a borrower's health factor drops below 1, anyone can liquidate them and claim a bonus.
Lending protocol (Aave):
Borrower deposits 100 ETH as collateral ($320K)
Borrows 75 ETH ($240K) → Health factor: 1.33
ETH price drops 25% → Collateral now worth $240K
Loan is $240K → Health factor: 1.0
Anyone can liquidate:
1. Repay $48K of the loan (20% of debt)
2. Receive $48K worth of collateral + liquidation bonus
3. Bonus: 5-10% on Aave = $2,400-$4,800 profit
Liquidation Strategies
| Strategy | Description | Typical Profit |
|---|---|---|
| Direct liquidation | Liquidate when health factor < 1 | 5-10% bonus on liquidated amount |
| Oracle-frontrun | Liquidate before price oracle updates | 5-10% bonus (first mover advantage) |
| Gas war | Bid gas high to get priority inclusion | Variable (winner takes all) |
| Flash loan | Use flash loan for large-scale liquidation | Higher scale = higher absolute profit |
Liquidation Bots: How They Win
# Simplified liquidation bot logic
def monitor_positions():
while True:
# Scan all lending protocols for positions near liquidation
for protocol in ["aave", "compound", "morpho", "spark"]:
positions = protocol.get_risky_positions(health_factor < 1.05)
for position in positions:
if position.health_factor < 1.0:
# Calculate profitability
gas_cost = estimate_gas(protocol)
bonus = position.debt * protocol.liquidation_bonus
profit = bonus - gas_cost
if profit > 0:
# Submit liquidation bundle
send_bundle_to_builders(
txs=[protocol.liquidate(position)],
tip=profit * 0.3, # Bid 30% of profit to builder
)
Liquidation Competition
The liquidation market is EXTREMELY competitive:
Ethereum: ~200 professional liquidation bots
- Top 10 bots capture 70% of all liquidations
- Average time to liquidate after price change: 3-5 seconds
- Profit per liquidation: $500-$50,000 (depends on loan size)
Solana: ~50 liquidation bots
- Faster execution (400ms block time)
- Higher competition due to no mempool
- Profit per liquidation: $100-$10,000
Key advantage: Low-latency oracle price feeds
- Chainlink price updates are the trigger
- First bot to detect new price and submit wins
- Latency matters: 100ms = 20% lower win rate
Strategy 3: Sandwich Attacks
Anatomy of a Sandwich
User transaction: Swap 10 ETH for USDC on Uniswap
Sandwich attack:
1. FRONT-RUN: Attacker swaps 5 ETH for USDC
→ Price moves: 1 ETH = 3,200 → 3,180 USDC
2. VICTIM: User's swap executes at worse price
→ User gets 31,800 USDC instead of 32,000
→ User loses: 200 USDC (0.6% slippage)
3. BACK-RUN: Attacker sells USDC back for ETH at better price
→ Price recovers after user's trade
→ Attacker profits: ~180 USDC (minus gas)
Attacker profit: ~$180 on a single sandwich
Gas cost: ~$30 (high priority gas)
Net profit: ~$150
Sandwich Profitability by DEX
| DEX | AMM Type | Avg Sandwich Profit | Sandwich Frequency |
|---|---|---|---|
| Uniswap V2 | Constant product | $50-$500 | Very high |
| Uniswap V3 | Concentrated liquidity | $100-$2,000 | High (but harder) |
| Curve | Stable swap | $20-$100 | Low (stable pairs) |
| Balancer | Weighted pools | $100-$1,000 | Medium |
Why Sandwiches Are Controversial
Arguments FOR sandwiches:
- They're "tax" on uninformed traders
- They provide profit to searchers who secure blocks
- Slippage protection is the user's responsibility
Arguments AGAINST sandwiches:
- They're extractive (not value-creating like arbitrage)
- They harm retail users
- They increase gas costs for everyone
- They're the reason for MEV-Burn proposals
Sandwich Detection in the Wild
Etherscan transaction analysis:
Original user tx: 0xswap...
Gas price: 20 gwei
Slippage: 5%
Front-run tx: 0xsandwich_front...
From: 0xMEVBot
Gas price: 30 gwei (higher = priority)
Same block, same pool, opposite direction
Back-run tx: 0xsandwich_back...
From: 0xMEVBot (same address)
Gas price: 25 gwei
Same block, reverses the front-run
Classic signature: Same address, same block,
opposite trades around user transaction.
Photo by Mahmut Zeytin on Pexels
Strategy 4: JIT Liquidity and Backrunning
JIT (Just-In-Time) Liquidity
JIT liquidity involves adding concentrated liquidity to a Uniswap V3 pool right before a large swap, earning fees on the swap, then removing liquidity immediately after.
1. Searcher detects large pending swap (e.g., 1,000 ETH → USDC)
2. Adds concentrated liquidity at the expected swap price range
3. Large swap executes, paying fees to the liquidity position
4. Searcher removes liquidity immediately
Profit: Fee tier × swap volume
Fee tier: 0.01%, 0.05%, 0.30%, 1.00%
Swap volume: 1,000 ETH ($3.2M)
At 0.05% fee: $1,600 in fees for a single swap
Better than sandwiching:
- Less harmful to users (no price manipulation)
- Legitimate value-add (provides liquidity)
- Lower risk of being front-run
Backrunning
Backrunning means executing a trade immediately after a known event:
Types of backrunning:
1. Post-arb: Back-run an arbitrageur's trade
→ If arbitrage corrects price, follow with a small trade
2. Oracle update backrun: Trade after oracle price update
→ Chainlink updates price → trade on the new price
3. Transaction backrun: Execute after a known trader
→ Some whales signal trades (large approvals, etc.)
→ Trade in the same direction after they move the market
PBS Architecture: How Blocks Are Built
Proposer-Builder Separation
Pre-PBS:
Validator: [Mempool] → Select txs → [Block]
Post-PBS:
┌────────────────────┐
│ User / Searcher │
│ Submit bundle │
└─────────┬──────────┘
│
┌──────────▼──────────┐
│ Block Builder │
│ (Optimized, MEV │
│ extraction engine)│
└──────────┬──────────┘
│ Block bid
┌──────────▼──────────┐
│ Relay (e.g., │
│ Flashbots, bloxR) │
└──────────┬──────────┘
│ Best block
┌──────────▼──────────┐
│ Validator │
│ (Proposer) │
│ Select best block │
└─────────────────────┘
Block Builder Market (2026)
| Builder | Market Share | MEV Captured | Strategy |
|---|---|---|---|
| beaverbuild | ~25% | Highest win rate | Aggressive searcher relationships |
| Flashbots | ~20% | Pioneer, open source | Largest searcher network |
| Titan Builder | ~15% | High | Vertical integration |
| Rsync Builder | ~12% | Medium | Low latency infrastructure |
| EigenPhi | ~8% | Medium | Data-driven optimization |
How Searchers Submit Bundles
# Using Flashbots SDK (or mev-geth)
from flashbots import flashbots
# 1. Create your bundle of transactions
bundle = [
{"to": "0x...", "data": "0x...", "gas": 100000},
{"to": "0x...", "data": "0x...", "gas": 50000},
]
# 2. Bundle must be valid (simulate first)
sim_result = flashbots.simulate_bundle(bundle, block_number=19500000)
if sim_result.success:
profit = sim_result.profit
# 3. Bundle pays builder a tip (bribe)
tip = int(profit * 0.3) # 30% of profit to builder
bundle[0]["maxPriorityFeePerGas"] = tip
# 4. Submit to builder via relay
result = flashbots.send_bundle(
bundle,
target_block=19500000,
min_timestamp=current_time,
)
# 5. Compete: submit to MULTIPLE builders simultaneously
for builder in ["flashbots", "beaverbuild", "titan"]:
flashbots.send_to_builder(builder, bundle, tip)
MEV on Solana vs Ethereum vs L2s
Key Differences
| Factor | Ethereum | Solana | L2s (Arbitrum, Optimism) |
|---|---|---|---|
| Block time | 12 seconds | 400ms | 0.25-1 second |
| Mempool | Public | No mempool (but there's a "mempool-like" pattern) | Public (on L1) |
| MEV opportunity | High (slow blocks, public mempool) | Medium (fast blocks, no mempool) | Low (fast finality, sequencer control) |
| Searcher speed requirement | Moderate (12s to react) | Extreme (400ms) | Low (sequencer orders txs) |
| Dominant strategy | Sandwich + Arbitrage | Arbitrage (no sandwich due to no mempool) | Arbitrage (sequencer-controlled) |
Solana MEV: Different Challenges
Solana has no public mempool — validators see transactions immediately.
MEV on Solana:
1. Arbitrage: Same as Ethereum but faster
- 400ms block time = must react in <100ms
- Requires colocation with validators
2. Liquidations: Very fast
- Oracle price changes → immediate liquidation opportunity
- First to detect wins (no mempool = no gas war)
3. Sandwich: Much harder (no mempool)
- But: Jito (Solana's MEV platform) enables "mempool-like" features
- Searchers can pay validators for "priority" access
- More difficult but still possible
Solana MEV market: Jito Labs handles ~80% of Solana MEV
- Top searchers: pay validators directly via "tips"
- Total MEV: ~$800M/year and growing
L2 MEV: Limited by Sequencer
L2s have centralized sequencers that control transaction ordering:
Arbitrum:
- Sequencer processes txs in order received
- MEV possible during "sequencer delay" (10 min)
- Most MEV is cross-L2 arbitrage (Arbitrum ↔ Ethereum)
Optimism:
- Similar to Arbitrum
- MEV primarily from interop between OP Stack chains
Base:
- Coinbase-operated sequencer
- Minimal MEV (Coinbase's policy limits it)
- Most MEV is from bridging/arbing with Ethereum
Total L2 MEV: ~$300M/year (growing as L2 TVL grows)
MEV Mitigation: What Actually Works
Protocol-Level Solutions
| Solution | Description | Effectiveness | Adopted By |
|---|---|---|---|
| CowSwap | Batch auctions, settle at clearing price | ★★★★★ (eliminates sandwich) | Cow Protocol |
| UniswapX | Dutch auctions, filler competition | ★★★★☆ (reduces MEV significantly) | Uniswap |
| MEV-Burn (EIP-1559 style) | Burn MEV profits | ★★★☆☆ (redistributes, not eliminates) | Ethereum research |
| Flow (consensus) | Shutter-style encrypted mempool | ★★★★☆ (prevents front-running) | Gnosis |
| Threshold encryption | Txs encrypted until inclusion | ★★★★★ (theoretical ideal) | Shutter, Chainlink FSS |
| Slink (MEV reduction) | Coincidence of wants | ★★★☆☆ | Various chains |
User-Level Protection
| Method | How | Effectiveness |
|---|---|---|
| Set slippage to 0.5% | Limits sandwich profit | ★★★★☆ (most practical) |
| Use MEV protection RPC | Flashbots Protect, BloxRoute | ★★★★☆ (80%+ sandwich reduction) |
| Use CowSwap | Batch auction = no sandwich | ★★★★★ |
| Trade in private mempool | Skip public mempool entirely | ★★★★☆ |
| Use limit orders | Not sandwichable | ★★★★★ |
| Trade L2s | Less MEV on L2s | ★★★☆☆ (less liquidity) |
Does MEV Protection Actually Work?
Flashbots Protect RPC:
- Sends txs directly to builders (not mempool)
- 80-90% of sandwiches prevented
- However: some builders still sandwich
- Cost: free ($0 for basic protection)
CowSwap:
- 100% sandwich protection (batch auctions)
- Best price across all DEXes
- No gas cost (solver pays)
- Recommended for all traders >$1K
UniswapX:
- Dutch auction protects against sandwich
- Fillers compete = best execution
- Partial fills possible
- Built into Uniswap interface
Becoming a Searcher: Infrastructure Guide
Minimum Viable Searcher Setup
| Component | Budget Option | Pro Option |
|---|---|---|
| Server | AWS c6g.xlarge ($60/mo) | Dedicated bare metal ($500/mo) |
| Node | Alchemy/Infura ($0-50/mo) | Self-hosted full node ($200/mo) |
| MEV relay | Flashbots (free) | Flashbots + beaverbuild + Titan |
| Monitoring | Basic (homegrown) | Grafana + PagerDuty |
| Backtesting | Simple Python simulations | Historical bundle simulation |
| Gas optimization | Standard | Custom gas estimation ML model |
Code: Basic Arbitrage Monitor
from web3 import Web3
import json
class ArbitrageFinder:
def __init__(self, w3: Web3):
self.w3 = w3
self.pools = self._load_pools()
def find_arbitrage(self):
"""Scan all tracked pools for arbitrage opportunities."""
opportunities = []
for pool_a in self.pools:
for pool_b in self.pools:
if pool_a.address == pool_b.address:
continue
price_a = pool_a.get_price()
price_b = pool_b.get_price()
if price_a < price_b:
profit_pct = (price_b - price_a) / price_a * 100
if profit_pct > 0.3: # Min 0.3% profit
opportunities.append({
"buy_pool": pool_a,
"sell_pool": pool_b,
"profit_pct": profit_pct,
"estimated_profit": self._estimate_profit(
pool_a, pool_b
),
})
return sorted(opportunities, key=lambda x: -x["profit_pct"])
def build_bundle(self, opportunity, amount):
"""Build a Flashbots bundle for the arbitrage."""
return [
# 1. Flash loan from Aave
self._flash_loan(amount),
# 2. Swap on buy pool
opportunity["buy_pool"].build_swap(amount, direction="buy"),
# 3. Swap on sell pool
opportunity["sell_pool"].build_swap(
self._expected_output(opportunity), direction="sell"
),
# 4. Repay flash loan
self._repay_flash_loan(amount),
]
Becoming Profitable: Key Metrics
| Metric | Retail Searcher | Professional Searcher |
|---|---|---|
| Win rate (bundles accepted) | 5-15% | 40-60% |
| Average profit per bundle | $20-$100 | $200-$2,000 |
| Bundles submitted per day | 1,000-5,000 | 10,000-100,000+ |
| Latency to builder | 500ms | <50ms |
| Number of strategies | 1-3 | 5-20+ |
| Monthly profit | $1K-$10K | $50K-$500K+ |
Related Reads
- MEV Mitigation at Protocol Level: PBS, Auctions, and MEV Tax
- TEEs and Confidential Computing in Blockchain
- Real-Time Machine Learning on Blockchain Data
Key Takeaways
- Prioritize DEX arbitrage (45% of MEV) with multi-pool paths (e.g., ETH→USDC→DAI→ETH) and flash loans to maximize profit per trade—target $10–$150 net profit after gas costs, but expect thinner margins as competition grows (500+ active searchers on Ethereum).
- For liquidations, focus on low-latency oracle feeds (Chainlink) and colocation with validators to win the 3–5 second window post-price drop—top 10 bots capture 70% of profits, with $500–$50K per liquidation depending on loan size.
- Sandwich attacks remain profitable ($50–$2K per trade) but are high-risk due to regulatory scrutiny and user backlash—mitigate by targeting Uniswap V3 (concentrated liquidity) and using private relays like Flashbots to avoid mempool exposure.
- Leverage PBS (Proposer-Builder Separation) by submitting bundles to multiple builders (e.g., Flashbots, beaverbuild) with 30% of profit as tips—builders capture 45% of MEV, so optimizing for their preferences (e.g., high-value bundles) is critical.
- On Solana, arbitrage dominates MEV due to 400ms block times—require <100ms reaction times and direct validator payments via Jito (80% of Solana MEV), while L2s (Arbitrum/Optimism) offer limited MEV opportunities (sequencer-controlled ordering).
- Use MEV protection tools like CowSwap (100% sandwich protection) or Flashbots Protect RPC (80–90% reduction) for user trades, and adopt protocol-level solutions (e.g., UniswapX Dutch auctions) to minimize extractive MEV while retaining profitability.
Frequently Asked Questions
Is MEV extraction still profitable in 2026?
Yes — total MEV across chains is ~$3.5B/year and growing. But competition is fierce. Retail searchers with basic setups still make $1K-$10K/month. Professional operations with custom hardware, colocation, and ML-driven strategies make $50K-$500K+/month. The barrier to entry is higher than in 2022 but still accessible.
Is sandwiching illegal?
In most jurisdictions: unclear. Sandwich attacks exploit blockchain design (public mempool, MEV), not fraud. However, regulatory trends suggest sandwiches may be classified as market manipulation in the future (especially in the EU under MiCA). In the US, the CFTC has signaled interest in MEV cases. Many searchers operate from jurisdictions with no clear regulation.
How do searchers compete on speed?
Colocation (servers next to validators), custom hardware (FPGAs for signature verification), optimized networking (kernel bypass), and competitive gas/priority fee bidding. At the top level, 10ms speed differences determine who captures a $100K+ arbitrage opportunity.
Does MEV hurt Ethereum as a whole?
Debated. MEV increases validator revenue (making ETH staking more attractive), incentivizes block building efficiency, and provides profit for sophisticated actors. But it also increases gas costs for average users, creates negative externalities (sandwich attacks), and contributes to centralization concerns (professional searchers dominate).
What's the future of MEV?
Three trends: (1) Encrypted mempools (threshold encryption) will eliminate front-running and sandwiches, (2) MEV-Burn proposals will redistribute MEV to protocol treasuries or ETH holders, (3) Intent-based architecture (ERC-7683, CowSwap, Across) will abstract away MEV from users entirely.


Comments
Sign in to join the conversation
No comments yet. Be the first to share your thoughts!