mirror of
https://github.com/luxfi/node.git
synced 2026-10-30 15:24:05 +00:00
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]>