docs: correct the v0.8.0 insufficient-balance RPC error-text matrix - #291
Open
osr21 wants to merge 1 commit into
Open
docs: correct the v0.8.0 insufficient-balance RPC error-text matrix#291osr21 wants to merge 1 commit into
osr21 wants to merge 1 commit into
Conversation
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.
This was referenced Aug 31, 2026
kutluhaneth46
added a commit
to kutluhaneth46/arc-node
that referenced
this pull request
Aug 31, 2026
Address review on circlefin#297: scope application-facing notes to v0.7.2 (v0.8.0 error-text matrix is tracked in circlefin#291) and document the gas required exceeds allowance string collision. Co-authored-by: Cursor <cursoragent@cursor.com>
3 tasks
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
The v0.8.0
[Format]entry describing the insufficient-balance JSON-RPC error-text change (in bothBREAKING_CHANGES.mdandCHANGELOG.md) doesn't match the behavior observable on Arc Testnet post-upgrade on two points, and omits a string collision that tooling authors need to know about. Since the entry's explicit audience is "tooling that matches JSON-RPC error text", the details matter — a matcher updated to follow the current wording breaks on the most common request shape.All claims below were verified against
rpc.testnet.arc.network(post-v0.8.0) on 2026-08-29, and each one is also consistent with this repo's own localdev test expectations.1. The previous
insufficient funds…text is still live — on the most common request shapeThe entry says value-exceeds-balance errors "now reflect revm 38's
OutOfFundsvariant". Measured:eth_estimateGas/eth_call, value > balance)gasPriceormaxFeePerGaspresent-32003insufficient funds for gas * price + value: have 0 want 1000000000000000000-32003EVM error: OutOfFundsethers and viem populate fee fields automatically, so most real traffic still gets the previous text. A tooling author who follows the current entry and replaces their
insufficient fundspattern withOutOfFundsbreaks. The localdev suite already expects both:tests/localdev/evm_compatibility.test.tsasserts/OutOfFunds|insufficient funds/on this path.2.
gas required exceeds allowancefires on contract/precompile targets — plain EOA-to-EOA transfers never surface itThe entry attributes the new
gas required exceeds allowancetext to "simple (EOA-to-EOA) transfer with insufficient balance". Measured, with fee fields present:0x5208)insufficient funds for gas * price + value…-32000gas required exceeds allowance (0)This is exactly what the
disable_fee_chargemechanism the entry describes implies: the basic-transfer shortcut bypasses the caller gas-allowance cap, so EOA-to-EOA estimation now succeeds regardless of gas affordability — the allowance error is reachable only on non-shortcut (contract/precompile) targets. The localdev test agrees: thebalance check if gas price is providedcase deliberately targets a contract "to skip Reth's basic-transfer shortcut" before expecting/insufficient funds for transfer|gas required exceeds allowance/.3. The allowance string is shared with
--rpc.gascapclampinggas required exceeds allowance (<limit>)is the same string emitted when estimation is clamped by--rpc.gascap— only the parenthesized bound distinguishes a balance-derived allowance from the configured cap. Worth one line here since this is the entry tooling authors will read when their matchers break; it also covers part of the "document how a developer can recognize the RPC-cap error specifically" request in #271.Changes
BREAKING_CHANGES.md: rewrote the three sub-bullets of the v0.8.0[Format]entry to state the request-shape-dependent text matrix, the correct target class for the allowance error, and the--rpc.gascapstring collision.CHANGELOG.md: mirrored the same corrections in the corresponding one-paragraph bullet.No taxonomy changes (that discussion belongs to #270) and no new files — this only makes the existing entry match observable behavior.
Context
Surfaced while working through the error-classification discussion in #203, where a downstream SDK consumer's matcher broke on exactly this upgrade. Related: #270 (application-facing breaking-change taxonomy), #271 (RPC gas cap vs protocol limits distinction).
Happy to adjust wording if maintainers prefer to keep the mechanism explanation (
disable_fee_charge) out of the operator-facing doc.