Maximizing Solana Transaction Landing Rates with Jito Bundles
Low landing rates kill profitable strategies before they start. This guide covers Jito bundle construction, tip sizing relative to MEV opportunity, retry logic, and how to benchmark landing rate against raw RPC submission.
Solana's throughput is impressive on paper, but in practice your bot competes with thousands of other transactions for the same block space. During volatile markets — exactly when your edge is largest — raw RPC submission can drop to 30–50% landing rates on contested slots. Jito bundles give you a deterministic path to the top of the block, but only if you construct them correctly and price them honestly against your expected PnL.
How Jito Bundles Actually Work
Jito runs a block-engine layer on top of standard Agave (formerly Validator Client). Searchers submit bundles — ordered lists of up to five transactions — to Jito's block engine via the sendBundle RPC method. The block engine auctions bundle placement; the winning bundle lands atomically at the top of the slot, before standard mempool transactions are processed.
The critical mechanic: bundles are all-or-nothing. If any transaction in the bundle fails, the entire bundle is dropped — no partial execution, no fee leakage. That atomicity is the feature. It means your arbitrage or liquidation either completes cleanly or it doesn't touch the chain at all.
Tip goes in the last transaction of the bundle, paid to one of Jito's tip accounts. The tip is separate from priority fees — you still set computeUnitPrice on each transaction normally. Think of the tip as your auction bid for slot position; compute unit price is your bid for inclusion within a slot.
Sizing Tips Against MEV Opportunity
The single most common mistake: treating the tip as a fixed cost. It isn't. It's a variable that should track your expected gross profit on the opportunity.
A workable heuristic: bid between 50–70% of expected gross profit in tip, keeping the remainder as floor profit. At 60% tip-to-gross, you're competitive in most non-contested auctions while still capturing value. During high-volatility events — token launches, large oracle updates, liquidation cascades — competing searchers will push into the 75–85% range. You need real-time gross profit estimates feeding your tip calculator, not a hardcoded lamport value.
In practice, maintain a tip oracle: track the 50th and 90th percentile of winning tips for your opportunity type over a rolling 5-minute window. If your estimated gross is below the 50th-percentile tip, skip the bundle rather than submit a losing bid. Chasing losing auctions wastes RPC quota and adds latency to your feedback loop.
A concrete example: if an arb opportunity is worth 0.05 SOL gross, a tip in the 0.028–0.035 SOL range is sensible. If your circuit-breaker math says the opportunity is worth 0.012 SOL, a minimum viable tip of 0.001 SOL is probably uncompetitive — don't send it.
Bundle Construction Mechanics
Each bundle transaction must be signed independently and have a valid recent blockhash. Use the same blockhash across all transactions in the bundle — the block engine validates them together. A common source of silent failures is stale blockhashes when your signing pipeline has latency.
Key construction checklist:
- Pre-build compute budget instructions first.
SetComputeUnitLimitandSetComputeUnitPricemust be the first instructions in each transaction, not appended after. - Simulate before submitting. Call
simulateTransactionon each transaction individually against a fresh slot. Bundle submission with a failing simulation is a wasted round-trip to Jito's block engine. - Use versioned transactions (V0) with address lookup tables where possible. Reduced transaction size gives you more room for instructions and lowers compute cost per operation.
- Set the tip transaction compute limit tightly. A tip-only transaction to Jito's tip account uses roughly 2,400 compute units — cap it there, not at the default 200,000.
Retry Logic Without Hammering the Network
Bundles that miss their slot expire silently. Unlike standard transactions which can be rebroadcast, an unconfirmed bundle is simply gone — the block engine drops it after one slot attempt. Your retry loop needs to account for this.
The correct pattern: after submitting a bundle, poll getBundleStatuses with the returned bundle UUID every 400ms. If status is not Landed within 2 slots (~1.6 seconds on average), rebuild the bundle with a fresh blockhash and resubmit. Do not resubmit the same bundle object — the blockhash is stale and it will fail validation.
Cap retries at three attempts per opportunity. After three misses, the opportunity window has almost certainly closed or a competitor has taken it. Continuing to retry burns rate limits and can cause downstream state confusion in your position tracking.
Benchmarking Bundle Landing Rate vs. Raw RPC
You should be measuring this continuously, not just at deploy time. The comparison requires a controlled experiment: for a class of low-competition transactions (routine rebalances, for example), split submissions 50/50 between Jito bundle and standard sendTransaction with skipPreflight: true and maxRetries: 3. Track confirmed landing rate and time-to-confirmation over 24-hour windows.
In our own trading bot infrastructure, the delta during quiet periods is modest — Jito bundles land at roughly 94–97% vs. 88–93% for raw RPC on well-connected validators. During high-congestion periods (major token launches, network stress), that gap widens dramatically: bundles hold above 90% while raw RPC can crater to 40–60%. Build your benchmarking infrastructure before you need it, not after a bad week of missed fills triggers a post-mortem.
Monitor bundle landing rate as a first-class metric alongside PnL. A degrading landing rate with stable PnL-per-landed-transaction often signals a competitor improving their tip strategy, not an infrastructure problem on your end.
Operational Pitfalls Worth Knowing
Jito tip accounts rotate periodically. Hard-coding a single tip account address will eventually cause silent failures — pull the current tip account list from Jito's getTipAccounts RPC method at startup and refresh every 30 minutes.
Regional block engine endpoints matter. Jito operates block engines in multiple regions; latency to the engine directly affects your position in the auction. Measure round-trip time to each endpoint and route to the closest one. On AWS us-east-1 to Jito's NY endpoint, typical RTT is 2–5ms — that gap relative to a co-located competitor running at 0.3ms is meaningful in a tight auction.
Finally, Jito's block engine is not the only path. During periods of low validator adoption, some slots are produced by non-Jito validators and your bundle lands via fallback standard propagation. Track which validators are producing slots in real time and adjust your submission strategy accordingly — pure bundle-only submission has non-trivial miss rate on non-Jito slots.
If you want landing-rate infrastructure like this running on your strategy without building it from scratch, talk to us — this is what we do.
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