From ca320927e1f02e906f427de9ee5ead02b27dc9e8 Mon Sep 17 00:00:00 2001 From: osr21 Date: Sat, 29 Aug 2026 11:37:06 +0100 Subject: [PATCH] docs: correct the v0.8.0 insufficient-balance RPC error-text matrix The v0.8.0 [Format] entry says value-exceeds-balance errors now surface revm 38's OutOfFunds text and attributes the new allowance error to EOA-to-EOA transfers. Verified against the post-upgrade testnet endpoint: the previous "insufficient funds for gas * price + value" text still fires whenever gas-price/fee fields are present (the shape ethers/viem always send), and the allowance error is only reachable on contract or precompile targets -- plain EOA-to-EOA transfers whose balance covers value now estimate successfully regardless of gas affordability. Also notes that the allowance string is shared with --rpc.gascap clamping, distinguishable only by the parenthesized bound. Matches the localdev expectations in tests/localdev/evm_compatibility.test.ts. --- BREAKING_CHANGES.md | 5 +++-- CHANGELOG.md | 2 +- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/BREAKING_CHANGES.md b/BREAKING_CHANGES.md index 81f831c..8fcb278 100644 --- a/BREAKING_CHANGES.md +++ b/BREAKING_CHANGES.md @@ -19,8 +19,9 @@ Compare and release-notes links resolve once the corresponding tag is published ### For Node Operators - **[Format] JSON-RPC error text on insufficient-balance `eth_call` / `eth_estimateGas` changed with the reth 2.2 / revm 38 upgrade.** - - Value exceeds balance: the error previously read `insufficient funds for gas * price + value`; it now reflects revm 38's `OutOfFunds` variant. - - Simple (EOA-to-EOA) transfer with insufficient balance: reth 2.2 runs these RPC paths with `disable_fee_charge`, so the basic-transfer shortcut no longer applies the caller gas-allowance cap. The surfaced error shifted from `Missing or invalid parameters` to `gas required exceeds allowance`. + - Value exceeds balance: the surfaced text depends on the request shape. Requests that omit gas-price/fee fields reflect revm 38's `OutOfFunds` variant (`EVM error: OutOfFunds`); requests that set `gasPrice` or `maxFeePerGas` still fail the pre-execution balance check with the previous `insufficient funds for gas * price + value: have want ` text. Client libraries such as ethers and viem populate fee fields automatically, so tooling must keep matching both strings. + - Calls whose sender balance cannot cover gas (contract or precompile targets): the surfaced error shifted from `Missing or invalid parameters` to `gas required exceeds allowance ()`. Because reth 2.2 runs these RPC paths with `disable_fee_charge`, the basic-transfer shortcut bypasses the caller gas-allowance cap entirely: a plain EOA-to-EOA transfer whose balance covers `value` now estimates successfully regardless of gas affordability. + - `gas required exceeds allowance ()` is the same string emitted when a request is clamped by `--rpc.gascap`; only `` distinguishes the sender's balance-derived allowance from the configured cap. - Neither string is a stable API contract, but tooling that matches JSON-RPC error text on these paths must update its patterns. No consensus-affecting behavior changed; only the RPC error surface. - **[CLI] `arc-node-consensus` admin RPC routes are disabled by default.** - The unauthenticated `POST` and `DELETE /persistent-peers` routes are no longer mounted unless `--rpc.admin` is provided. diff --git a/CHANGELOG.md b/CHANGELOG.md index 3955663..5c634c5 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -12,7 +12,7 @@ All notable changes to arc-node are documented in this file. ### For Node Operators -- **[Format] JSON-RPC error text for insufficient-balance `eth_call` and `eth_estimateGas` calls changed with the reth 2.2 / revm 38 upgrade.** Transactions whose value or gas cost exceeds the sender balance now surface revm 38's `OutOfFunds` text (previously `insufficient funds for gas * price + value`); simple EOA-to-EOA transfers with insufficient balance now surface `gas required exceeds allowance` (previously `Missing or invalid parameters`). Tooling that matches on these strings must update its patterns. No consensus-affecting behavior changed; only the RPC error surface. See [BREAKING_CHANGES.md](./BREAKING_CHANGES.md#v080) for migration details. +- **[Format] JSON-RPC error text for insufficient-balance `eth_call` and `eth_estimateGas` calls changed with the reth 2.2 / revm 38 upgrade.** Requests without gas-price/fee fields now surface revm 38's `OutOfFunds` text, while requests that set `gasPrice` or `maxFeePerGas` retain the previous `insufficient funds for gas * price + value` text; calls whose sender balance cannot cover gas surface `gas required exceeds allowance ()` (previously `Missing or invalid parameters`), the same string emitted when a request is clamped by `--rpc.gascap`. Tooling that matches on these strings must match both balance texts and disambiguate the allowance message by its numeric bound. No consensus-affecting behavior changed; only the RPC error surface. See [BREAKING_CHANGES.md](./BREAKING_CHANGES.md#v080) for migration details. - **[CLI] `arc-node-consensus` admin RPC routes are disabled by default.** The new `--rpc.admin` flag enables the unauthenticated `POST` and `DELETE /persistent-peers` routes; read-only RPC routes remain available without it. Enable admin routes only on a trusted interface. See [BREAKING_CHANGES.md](./BREAKING_CHANGES.md#v080) for migration details. - **[Config] Explicit invalid CL environment values now fail startup.** Eleven value-sync, consensus-queue, discovery, and remote-signing tunables can now be overridden through `ARC_*` environment variables. Unset or empty variables retain their defaults; malformed values and zero values for settings that must be positive abort startup. See [BREAKING_CHANGES.md](./BREAKING_CHANGES.md#v080) for migration details. - **[CLI] Arc denylist checks are mandatory and their contract configuration is chain-derived.** Remove `--arc.denylist.enabled`, `--arc.denylist.address`, and `--arc.denylist.storage-slot`; `--arc.denylist.addresses-exclusions` remains available. See [BREAKING_CHANGES.md](./BREAKING_CHANGES.md#v080) for migration details.