Okay, so most folks jumping into Solana MEV as a searcher? They fire up some basic bot script from GitHub, point it at a public RPC, and wonder why they're losing every race. Transactions spam out, 90% fail, and they're burning like 0.000005 SOL per flop. That's the wrong way. The right way? Get your infrastructure locked in first-low latency RPC, Jito bundles from day one. I usually start there because without speed, you're just donating fees to validators.
Why does this happen? Solana's no mempool chain. Transactions hit the leader slot direct, and with stake weighted QoS, public endpoints lag. Your arb opportunity? Gone in 50ms. Fix it by grabbing a dedicated RPC node. Cuts latency by 15-20%, bumps success to over 60%. In my experience, that's when profits start stacking.
Solana MEV is about snagging value by ordering transactions smart-arbitrage, backruns, liquidations. But it's wilder than Ethereum. No public mempool waiting around. Instead, Proof of History slots leaders predictably, parallel processing via Sealevel lets you atomic flash loan across DEXes like Orca and Raydium in one go.
Picture this: Price skew on Jupiter vs Raydium? Your bot flash borrows from Solend, buys low, sells high, repays-all in the same transaction. Fail? Rolls back, zero loss. Priority fees tip validators to slot you first, like 0.0001-0.001 SOL extra per tx. That's your edge.
Sound familiar? It's faster, cheaper. Tx fees base at 0.000005 SOL, but spam wars mean you optimize or die.
| Solana | Ethereum | |
|---|---|---|
| Mempool | No-direct to leader | Public, gas races |
| Execution | Parallel, atomic bundles | Sequential, reordering |
| Fees | Priority ~0.0001 SOL | Gas tips variable |
| Speed Edge | 50ms wins | Seconds matter |
sh -c "$(curl -sSfL https://release.solana.com/stable/install)"cargo install --git https://github.com/coral xyz/anchor anchor cli --lockedNow, test a simple swap. Use Jupiter SDK for quotes. Here's a snippet I tweak all the time:
rust use solana_sdk::pubkey::Pubkey; use jupiterswapapi::JupiterSwapApi; let api = JupiterSwapApi::new("https://your fast rpc.com"); let quote = api.getquote(inputmint, output_mint, amount).await?;Run it. See the flow? That's your base for spotting arbs.
Arbitrage is king on Solana. DEX prices drift-Orca SOL/USDC at 95, Raydium at 96? Boom, cycle it.
But here's the thing: Opportunities last microseconds. Your bot subscribes to Geyser plugins or WebSockets for program logs. Spot a big trade on Orca? Calc the arb path via Jupiter aggregator.
rpc.accountsubscribe(programid)postbundle([frontruntx, arbtx, backruntx])In my experience, triangular arbs crush it-like SOL/USDC, BONK/USDC, BONK/SOL. One case netted 0.5 SOL profit in a block. Fees ate 0.00002 SOL total.
60% txs fail from congestion. Solution? Simulate first: simulateTransaction(tx). If compute units over 1.4M, trim instructions. Add retries with escalating priority fees: start 0.00005 SOL, double up to 0.001.
Big user dumps 10k USDC on Raydium? Price tanks. You backrun-buy low right after, ride rebound.
Okay, steps:
Pro tip: Jito bundles atomic. All or nothing. Bids via tips: 0.01-0.1 SOL per bundle for Q1 2025 levels. Over 22% validator rewards from this.
What's next? Competition's fierce. Co locate nodes near validators. OVHcloud or similar-shaves 18% latency, success jumps.
Lending protocols like Mango, Solend-positions go underwater? Liquidate for 5-10% bonus.
Your bot watches health factors via account subs. Oracle twitch (Pyth price drop)? Race to liq tx.
Issues? Multiple bots spam. Win by speed: Private RPC + own validator stake helps QoS.
I usually pair this with arbs. Spot liq, arb the token dump after.
Jito's the game changer. Off chain auction: Submit bundles (up to 5 txs), bid tip lamports. Block engine sims, picks winners, feeds leader.
No more spam. Guaranteed if you outbid. For sandwich? Bundle front buy, user tx (if private), back sell. But sandwich less now-bundles private.
npm i @jito/jsbundleProvider.sendBundle(bundles)Failed bundles? Check sim errors. Common: Insufficient funds post fees. Buffer 0.1 SOL always.
Public RPC? Trash for MEV. 50ms delay = lost arb.
Go dedicated:
- RPC Fast/Helius: 15% better success. - Run validator: Stake 10 SOL min, get QoS priority. - Geyser: Real time logs, no polling lag.Costs? RPC ~$100/mo pro tier. Validator hardware $500/mo. Pays back in weeks if you're hitting 10% opps.
Table of setups I recommend:
| Level | Setup | Cost/mo | Success Rate |
|---|---|---|---|
| Beginner | Helius Dev + Jito | $50 | 40% |
| Pro | RPC Fast + Co lo | $300 | 70% |
| Whale | Own Val + Custom Geyser | $2k | 90%+ |
Solana flash loans via Solend/Mango. Borrow millions USDC, arb, repay same tx.
Example flow: Borrow 10k USDC, swap Raydium to SOL (cheap), Orca back to USDC (expensive), repay + profit.
Code bit:
rust invokesigned( &flashloanix, &[borrowaccount], seeds )?; invokesigned(&swapix1, &ctx.accounts, seeds)?; invokesigned(&repayix, &ctx.accounts, seeds)?; // Profit left in vaultCatch: Compute limits. Chain under 1.4M CUs. Split bundles if mega.
Pit 1: Tx expiry. Recent blockhash dies in 150 slots (~1min). Refresh every loop.
Pit 2: Slippage. Big trades move prices. Use Jupiter for best routes, assert min out.
Pit 3: Validator schedule. getLeaderSchedule() predicts next leader. Route direct via QUIC.
Honestly, log everything. Prometheus + Grafana for metrics. See win rates drop? Upgrade infra.
One bot good. Ten bots? Scatter strategies-some arb Orca, some Mango liqs.
Searcher builder? Advanced: Build bundles for others, take cut. Yoink style, 18 ETH equiv per block. But start simple.
Monitor profits: Track deltas-input USDC out minus fees/tips. Aim 0.5%+ per opp.
In my experience, consistent 5-10 SOL/day once tuned. Network congestion spikes Fridays? Dial back.
Building a DEX bot? Users hate sandwiches. Use private mempools or RFQ like JupiterZ. Route off Jito if paranoid.
Optimize txs: Priority fee API for dynamic tips. Compute exact: setComputeUnitLimit(500k).