TransactionExpiredBlockheightExceededError
Your transaction was submitted but not included before its blockhash expired. Either the network is congested and the validator dropped your tx for lack of priority fee, or your submit path is slow enough that 150 slots elapsed between fetch and inclusion.
Root causes
Ranked by frequency. First cause is the one to check first.
- 01Priority fee set to 0 during network congestion — validators strictly prioritize fee-paying txs.
- 02Submitted with `skipPreflight: false` when the simulation failed — preflight burned 500ms of your 2-minute window.
- 03Using a shared public RPC that took 30s to forward your submit to a leader.
- 04Your `sendAndConfirmTransaction` retry loop submitted the same signed tx to many endpoints, and most returned before the leader got it.
Fix steps
- 1
Set a priority fee
Include a `ComputeBudgetProgram.setComputeUnitPrice({ microLamports: 100_000 })` instruction. Even a small priority fee gets you prioritized over fee-zero transactions. For sniping, use 500k-2M microlamports; for normal trading, 10k-100k.
- 2
Use skipPreflight for speed
In production, `skipPreflight: true` shaves 300-500ms. Preflight is a convenience for dev — in prod, validate off the hot path.
- 3
Use a dedicated sendTransaction path
Subglow's sendTransaction has its own daily bucket so heavy reads never starve submits. Credit-metered providers share read and submit pools — during high read load your submit queues up.
- 4
Consider Jito bundles for atomic guarantees
For MEV-sensitive workloads (copy trading, snipes), submit via Jito bundles. The bundle either fully lands same-slot or fully rejects — there's no 'expired mid-flight' state.
Related errors
- BlockhashNotFound on sendTransactionYour transaction failed with `BlockhashNotFound`. You used a blockhash the validator that received your submit no longer has in its recent cache — either stale, or you got it from a different node in a load-balanced pool.
- InsufficientFundsForRentYour transaction created an account or ATA but didn't fund it above the rent-exempt minimum. Solana requires every account to pre-pay rent for two years — currently 890,880 lamports (~$0.03) for the smallest useful account.
- Node is behind (slot lag on RPC)Your RPC endpoint is lagging behind the tip of the chain. Symptoms: `getSlot` returns a number much lower than Solana Explorer, `getAccountInfo` returns stale data, `getLatestBlockhash` gives expired blockhashes. Usually a shared-endpoint issue.
Want an endpoint that just works?
Subglow is flat-priced Solana gRPC + JSON-RPC on a single API key. Pre-parsed JSON, dedicated sendTransaction bucket, 99.9% latency SLA on Dedicated. No credit juggling, no surprise bills.