Files
zeekayandHanzo Dev 2f1bfcd0f9 Let the precompile differential build, and say what it finds
The C++ evaluator named bls12_g1mul_analyze and bls12_g2mul_analyze. EIP-2537
folded multiplication into the multi-exponentiation precompiles before it was
finalised, so cevm carries neither symbol and the file had not compiled since.
A table that does not compile reports nothing, and this one was hiding a
second error underneath the first: it priced 0x0b through 0x11, cevm serves
nothing in that range at Cancun because EIP-2537 lands at Prague, and
check_table() exists to catch exactly that disagreement.

Nothing is priced there now, for the reason the file already gives for
p256verify: the revision has not reached it. The differential then runs, and
disagrees on 835 fields of 258 vectors. Both groups are real.

The C-Chain serves BLS at those addresses through Lux precompile modules
rather than through the EVM's revision-gated ones, which is why Go and Rust
answer where cevm does not; the C++ port has no equivalent module. And on
malformed input Go and Rust report a bad length where cevm reports out of gas.
Neither is a defect in the harness, and neither is fixed here.

Co-authored-by: Hanzo Dev <[email protected]>
2026-09-08 02:44:29 -07:00
..