RPC error -32000: insufficient funds for gas * price + value
Last updated:
At a glance
| Property | Value |
|---|---|
| Applies to | Ethereum, Polygon, BNB Smart Chain, Base and Robinhood Chain |
| JSON-RPC code | -32000 (upstream) |
| Checked against | value + gasLimit × maxFeePerGas |
| Gas spent | None — rejected before broadcast |
| Gas currency | ETH on Ethereum, Base and Robinhood Chain; POL on Polygon; BNB on BNB Smart Chain |
Cause
A node admits a transaction only if the balance covers value + gasLimit × maxFeePerGas — the worst case, not the fee you expect to pay. A transaction that would succeed at the current base fee is still refused when the limit multiplied by the cap exceeds the balance. Triport relays the refusal unchanged.
Solution
- Compute the requirement as value + gasLimit × maxFeePerGas and compare it with eth_getBalance; the reservation uses the cap, not the expected price.
- Lower maxFeePerGas towards the current base fee, or lower gasLimit to the value eth_estimateGas returns plus a margin.
- On an L2, remember that gas is paid in the chain's native currency — on Base and Robinhood Chain that is ETH, on Polygon POL, on BNB Smart Chain BNB.
- Top up the sender before retrying: the check is arithmetic, so an unchanged retry is refused identically.
Example
{
"jsonrpc": "2.0",
"id": 1,
"error": {
"code": -32000,
"message": "insufficient funds for gas * price + value"
}
}FAQ
- Why is it refused when the fee would actually be lower?
- The node reserves the worst case: gasLimit multiplied by maxFeePerGas, plus value. Lowering the cap or the limit changes the reservation.
- Does a failed check cost gas?
- No. The transaction never enters the pool, so nothing is charged.