How to Fix Failed Flashbots Bundles: The Complete Technical Guide 2026
**Answer first** — A failed Flashbots bundle is rarely a single problem; in 2026 it's almost always one of seven specific causes with distinct symptoms. The diagnostic order: **(1)

Answer first — A failed Flashbots bundle is rarely a single problem; in 2026 it's almost always one of seven specific causes with distinct symptoms. The diagnostic order: (1) simulation drift (sim green, real revert) — re-simulate against the target block's expected state, not current head; (2) hint mismatch (relay returns 400 / "unsupported parameter") — most often missing revertingTxHashes or wrong target block format; (3) fee staleness (sim profitable, no inclusion) — re-query fees pre-sign, not at strategy entry; (4) latency to relay (correlates with time of day) — measure p95 RTT and rotate if over 150 ms on mainnet; (5) builder coverage gap (relay accepted, no builder included) — fan-out to at least four relays; (6) priority-fee uncompetitiveness (silent non-inclusion during high-MEV blocks) — model fee against current congestion; (7) payload encoding error (relay returns 422) — wrong chainId, malformed RLP, or legacy-vs-EIP-1559 confusion. The trap is treating "the bundle didn't land" as one issue — different symptoms map to different fixes, and tackling the wrong one wastes weeks.
Mastery path
- What is MEV?
- Private vs public mempool
- Backrun vs sandwich
- Inclusion probability 101
- Fixing failed bundles (current)
- Mempool scanning 101
- Private bundle debugging: common failure modes
The diagnostic flow
When a bundle misses, walk the flow in this order. Wrong order wastes time:
1. Did the relay return an error?
Loud failures map directly to causes:
| Error | Cause | Fix |
|---|---|---|
| 400 / "invalid hint" | Hint mismatch | Verify hint schema for the relay; common: revertingTxHashes |
| 422 / "malformed bundle" | Payload encoding error | Decode bundle with cast tx --decode, verify chainId, EIP-1559 type |
| 429 | Rate limit | Upgrade tier, batch submissions, fan-out across relays |
| 503 | Relay-side outage | Failover; retry against different relay |
2. No relay error but no inclusion?
Re-simulate via eth_callBundle against the actual block that was mined.
- Sim now reverts → simulation drift (cause 1). Your earlier sim was against state that moved before signing. Fix: simulate against expected target-block state, not current head.
- Sim still says profit → either fee was uncompetitive (cause 6), latency too high (cause 4), or builder coverage gap (cause 5).
3. Latency histogram for the failed bundles
Plot p95 RTT to relay vs included/not-included. If failed bundles cluster in high-latency windows, latency is the cause. Fix: move sender closer to relay region, or switch to a closer relay.
4. Inclusion rate by relay over the last N bundles
If one relay's contribution has collapsed while others are flat, that relay's builder coverage has slipped. Drop or down-weight it in your fan-out.
If all relays' rates have dropped together, the issue is upstream (your fee model, your latency, your strategy logic) — not the relays.
5. Priority fee analysis
For each failed bundle, what was the priority fee? What was the cleared price for that block (visible in the included block's transactions)? If your fee was below the cleared price, your bundle was uncompetitive — model is wrong. Re-calibrate.
The seven causes, in detail
Simulation drift
Most common cause. Sim is green at T=0, you sign and send at T=300ms, by inclusion at T=12s the pool state has moved. Fix: simulate against the target block's expected state, applying any in-flight trigger txs to your sim base. The naive eth_callBundle against current head is misleading for backrun strategies.
Hint mismatch
Common offenders: missing revertingTxHashes for txs that may revert; targetBlockNumber in decimal instead of hex; replacementUuid with a relay that doesn't support it; missing refundRecipient on MEV-Share bundles. Fix: maintain a per-relay schema spec; canary every relay before relying on it.
Fee staleness
Cached fee scalars during regime shifts (post-fork, blob-fee era starts) lose contested blocks. Fix: re-query eth_feeHistory and L1 fee state immediately before signing, never against a cached value seconds old.
Latency to relay
Sub-150 ms RTT to your bundle relay is plenty on mainnet's 12-second slots. Above 300 ms is broken. Common causes: cross-region failover that adds 80+ ms each direction without alarming; ISP routing issues; cloud-provider quirks. Fix: measure p95 daily, rotate sender if a regression appears.
Builder coverage gap
Single-relay submission leaves 30–60% of block share unreachable. Fan-out to Flashbots + Titan + beaverbuild + rsync-builder simultaneously and let the first inclusion win. The FRB Agent does this automatically with weight tuning.
Priority-fee uncompetitiveness
During high-MEV blocks the cleared priority fee can spike above your strategy's bid. Fix: model fee dynamically against current per-block congestion, not a static value.
Payload encoding error
Wrong chainId, malformed RLP, EIP-1559 vs legacy mismatch. Fix: decode your serialised bundle with cast tx --decode and inspect; the error is almost always trivially visible once you look.
Working configuration
Bundle pipeline that minimises preventable failures:
- Build bundle with strategy txs + appropriate hints (
revertingTxHashesfor any tx that may revert). - Simulate against expected target-block state (not current head).
- Re-query fees immediately before signing.
- Fan-out via
eth_sendBundleto four+ relays simultaneously. - Track per-bundle outcome with full attribution (which relay, what latency, what fee, included or not).
- Daily roll-up of inclusion rate by relay, by time-of-day, by strategy. Action threshold at 20%+ deviation from baseline.
What "successful debugging" looks like
A team that has wired this in sees:
- Each bundle failure attributed to one of the seven causes within minutes.
- Per-cause counts on a weekly dashboard so trends emerge.
- Strategy iterations focused on the cause that's actually losing the most PnL.
Without this attribution, debugging is guesswork — you tweak gas, then strategy, then relays, then back. With it, a week's failures point at the one or two real fixes that recover most of the lost PnL.
References
Step after reading
Launch FRB dashboard
Connect your wallet, pair the node client with a 6-character PIN, and assign the contract mentioned above.
Need the signed build?
Download & verify FRB
Grab the latest installer, compare SHA‑256 to Releases, then follow the Safe start checklist.
Check Releases & SHA‑256Related Articles
Further reading & tools
Discussion
No notes yet. Add the first observation, or share the link with your team on X (@MCFRB).