Transaction

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.

  1. 01Priority fee set to 0 during network congestion — validators strictly prioritize fee-paying txs.
  2. 02Submitted with `skipPreflight: false` when the simulation failed — preflight burned 500ms of your 2-minute window.
  3. 03Using a shared public RPC that took 30s to forward your submit to a leader.
  4. 04Your `sendAndConfirmTransaction` retry loop submitted the same signed tx to many endpoints, and most returned before the leader got it.

Fix steps

  1. 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. 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. 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. 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

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.