Transaction Errors Your RPC Logs Actually Mean
Simulation errors arrive as terse strings, yet each maps to a small set of root causes once you know the vocabulary.
Blockhash not found almost always means you fetched the hash too early or your client clock drifted. Refresh the blockhash and rebuild the transaction rather than resubmitting the stale payload.
Insufficient funds for rent often masks a missing account creation step. Check whether your instruction expects an init_if_needed that never ran because a PDA seed was wrong by one byte.
Custom program errors require the IDL or source to interpret. Keep error codes in a shared spreadsheet during onboarding so junior developers learn to correlate codes with account states.
When an error persists across providers, capture the serialized transaction in base64 and compare simulation results locally with solana confirm. Divergence between local and remote simulation points to account data differences, not network mysticism.