Files
zeekayandHanzo Dev a188c756dc A refused call has a price; ask for it
The Rust evaluator declined the gas column on every refusal by a stock
precompile -- six of 705 fields, printed SKIPPED and never compared. revm
computes a precompile's price inside the function that does the work, so its
error carries no charge, and Go and cevm both report one.

The charge is recoverable without a second table. A price is the smallest
offer a precompile accepts, so bisect the offer: below the price the answer
is out of gas, at it the answer is the refusal. It reads the price off the
implementation under test rather than off a copy of revm's numbers, which
revm keeps private anyway -- blake2's round cost is a bare const.

It recovers what the other two report: 0 for the four blake2 length errors,
because revm rejects the length before reading the round count and demands
nothing, which is the 0 geth's RequiredGas returns; 12 for the malformed
final flag; 50000 for the KZG blob, where revm checks the offer before the
length. SKIPPED still exists for a precompile that cannot run at all, where
no offer produces an answer and no price can be measured.

Co-authored-by: Hanzo Dev <[email protected]>
2026-09-08 00:11:04 -07:00
..