Jito Bundles vs Public Mempool: Solana MEV Protection Explained
Jito bundles vs public mempool on Solana: atomic execution, tip auctions, and when a trading bot actually needs bundle logic for MEV protection.
{"excerpt":"Jito bundles vs public mempool on Solana: atomic execution, tip auctions, and when a trading bot actually needs bundle logic for MEV protection.","tags":["Solana","MEV","Jito","Trading Bots","Smart Contracts"],"cover":"nodes","content":"Solana doesn't have a mempool in the Ethereum sense, and that single fact trips up more bot developers than anything else in this space. There's no public txpool where everyone can see pending transactions and race to reorder them. What Solana has instead is a gossip network that propagates transactions to the current and next leader, plus a scheduling window where that leader — a single validator — decides what goes into the block and in what order. That difference is why "public mempool" on Solana is really shorthand for "whatever the leader's RPC and gossip layer happen to see," and it's why Jito bundles exist at all.\n\n## How public transaction submission actually works\n\nWhen you send a transaction through a standard RPC endpoint, it gets forwarded to the current leader's Transaction Processing Unit (TPU) via UDP, and if there's room left over it might also reach the next couple of leaders in the rotation. There's no atomicity guarantee across multiple transactions. If your bot fires three sequential transactions — open a position, adjust a hedge, close an arb leg — each one lands independently, in whatever order the leader's scheduler picks, competing with everyone else's traffic on priority fees alone.\n\nThat creates two concrete problems for anything trading-related:\n\n- Partial execution risk. Transaction 1 succeeds, transaction 2 fails or lands three slots late, and now your bot is holding an unhedged position it never wanted.\n- Sandwich exposure. Searchers running validator-adjacent infrastructure (or just fast RPC relationships) can see your transaction before it lands, insert their own buy ahead of it and a sell after, and extract the price impact you were about to cause. This is well documented on pools with thin liquidity on Raydium and Orca, and it's the direct analogue of Ethereum mempool sandwiching, just without a visible mempool to point at.\n\n## What Jito bundles actually change\n\nJito's block engine lets you submit up to five transactions as a single bundle with a guarantee: either all of them land, in the exact order you specified, in the same block, or none of them do. There's no partial execution. You attach a tip — a separate transfer to one of Jito's designated tip accounts — and that tip is what you're bidding into an off-chain auction run by the block engine, which forwards winning bundles to the current Jito-Solana validator.\n\nThis solves the partial-execution problem outright, and it meaningfully reduces (though doesn't eliminate) sandwich risk, because your bundle is atomic and ordered — an attacker can't slot a transaction between your two legs. It doesn't make you invisible; searchers running their own bundle infrastructure can still see the auction and outbid you, or front-run at the bundle level with their own higher-tip bundle. What it removes is the trivial case: naive mempool sniping bots watching gossip traffic.\n\n### A minimal bundle example\n\nUsing the Jito searcher client, a swap-plus-tip bundle looks roughly like this:\n\nts\nimport { SearcherClient } from 'jito-ts/dist/sdk/block-engine/searcher';\nimport { Bundle } from 'jito-ts/dist/sdk/block-engine/types';\n\nconst tipAccount = new PublicKey('96gYZGLnJYVFmbjzopPSU6QiEV5fGqZNyN9nmNhvrZU5');\n\nconst tipIx = SystemProgram.transfer({\n fromPubkey: payer.publicKey,\n toPubkey: tipAccount,\n lamports: 100_000, // tune against recent win rate, not a fixed number\n});\n\nconst bundle = new Bundle([swapTx, tipTx], 5); // max 5 txs per bundle\nawait searcherClient.sendBundle(bundle);\n\n\nThe part that catches people out: if any single transaction in the bundle would fail simulation, the whole bundle gets dropped before it's ever forwarded. You need to simulate locally first (simulateBundle on the block engine RPC) or you'll burn tip lamports and cycles on bundles that were dead on arrival — no failure is on-chain, but you've wasted a slot's worth of latency for nothing.\n\n## Comparison\n\n| Dimension | Public mempool (RPC/gossip) | Jito bundles |\n|---|---|---|\n| Atomicity across txs | None — each tx lands independently | Guaranteed — all or nothing |\n| Ordering guarantee | No | Yes, exact order you submit |\n| Sandwich exposure | High on thin-liquidity pools | Low, but not zero (bundle-level competition exists) |\n| Cost model | Priority fee per tx | Tip per bundle, auction-based, variable |\n| Landing rate | High but unordered | Depends on tip competitiveness and validator adoption |\n| Failure mode | Partial fills, orphaned positions | Clean drop, no partial state |\n| Best suited for | Simple transfers, non-competitive interactions | Arbs, liquidations, sniping, multi-leg trades |\n\n## When to actually build bundle logic into a bot\n\nDon't reach for Jito by default. Bundle infrastructure adds real complexity: tip accounts, auction dynamics, simulation before submit, and a dependency on Jito-Solana validators holding enough stake share to matter (historically well over half of stake-weighted leader slots run Jito-Solana, but that share moves and you should monitor it rather than assume it). For a bot that just needs to place a single swap with generous slippage tolerance, plain RPC submission with a reasonable priority fee is simpler and cheaper.
Build bundle logic in when any of these apply:
- You're running multi-leg arbitrage where legs must land together or the position is worse than doing nothing.
- You're doing liquidations where being first matters more than being cheap, and a partial liquidation is a bug, not a feature.
- You're sniping new pool launches or mints, where mempool visibility means every competent bot sees your intent instantly.
- You're executing large single swaps on illiquid pairs where the sandwich math clearly favors an attacker.
If your trading logic touches any of those cases, this is the kind of protocol-level decision worth getting reviewed before it goes live with real capital — it's exactly the sort of thing we cover in smart contract audits and in the broader code review and audit work we do for bot teams. We've also written about the tradeoffs in adjacent execution environments, including how Polymarket's UMA oracle compares to Chainlink for market resolution and the architectural split in HyperCore vs HyperEVM on Hyperliquid, both of which run into similar atomicity and ordering questions outside the EVM mempool model.\n\n## The verdict\n\nFor anything that isn't trivial, build the bundle path. Public RPC submission is fine for low-value, non-competitive transactions where a partial failure costs you nothing, but the moment a bot's profitability depends on ordering or atomicity, Jito bundles aren't an optimization, they're the correct execution model — the public path is structurally unsafe for that use case, not just slower. Budget engineering time for tip strategy and bundle simulation the same way you'd budget for gas estimation on an EVM chain; treat it as core trading logic, not a bolt-on. If you're evaluating tooling for the contract side of that stack, our comparison of Foundry vs Hardhat for 2026 smart contract audit workflows is a useful companion read, and if the bot is driving on-chain program logic rather than just RPC calls, that's smart contract development territory, not scripting.\n\nIf you're building or hardening a Solana trading bot and need someone to pressure-test the execution path before mainnet capital touches it, talk to us about smart contract development."}
Need a bot like this built?
We design, build and run trading bots on Solana, Hyperliquid and Polymarket.
Start a projectMore from the blog
Public vs Paid RPC: How to Run a Fair Benchmark
A fair comparison of public and paid RPC endpoints must account for quotas, workload, freshness and support guarantees.
Read articleRPC Benchmark Percentiles Explained: p50, p95 and p99
Why averages hide the latency spikes that break trading bots, wallets and production blockchain applications.
Read articleHyperliquid REST vs WebSocket Benchmark: What to Measure
A benchmark plan for Hyperliquid market data that separates request latency from streaming freshness and recovery.
Read article