Where does it stop?
The node checks the balance before it accepts the transaction. If the check fails, the transaction never enters the mempool: no hash, no block, and no gas spent.
What does the node check?
EIP-1559 says the signer must be able to afford gas_limit * max_fee_per_gas. Clients add the value you send, which is why the message reads gas * price + value.
The check uses the limits you set, not what the transaction will end up using. A high gas limit or max fee reserves more than the transaction may need.
Why does it happen?
- The balance is too low. The account simply does not hold the value plus the fees.
- You send the whole balance. The value equals everything the account has, and nothing is left for gas.
- The limits are set too high. A generous gas limit or
maxFeePerGasraises the amount the node wants to see. - The funds are on another chain. A balance belongs to one network, and the transaction is for another.
How do I fix it?
- Read the balance on the chain you send to.
getBalanceon a client for that chain shows what the node sees. - Fund the account, or send less. Leave room for the fees: value plus gas limit times max fee must fit in the balance.
- Lower the limits if they are generous. A smaller gas limit or
maxFeePerGaslowers the amount reserved, but amaxFeePerGasbelow the block’s base fee is refused as well. - In an agent, check the balance before the tool sends, and return a clear message to the model instead of a raw transaction error.
What does it look like in a trace?
Like every refusal by the node, it is a send span that ends with an error and no hash:
- error.type
- InsufficientFundsError
- exception.message
- The total cost (gas * gas fee + value) of executing this transaction exceeds the balance of the account.
- blockchain.tx.hash
- not set
By default only the error type is recorded, and for this refusal it is InsufficientFundsError. See nonce too low for how to read the node’s wording in a trace. If you want the gas side of a transaction that did run, the L1 data fee explains the second part of its cost on OP-stack chains.