You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
fix(evm): meter each RPC transact against a fresh zk gas budget (#232)
* fix(evm): meter each RPC transact against a fresh zk gas budget
eth_estimateGas reuses one EVM for its repeated simulations (full-gas
run, optimistic run, binary search), but the zk gas meter lives on the
EVM instance and transact_raw never reset it, so in-flight usage
accumulated across runs and falsely tripped the 100M Unzen block limit
(observed live: ~28M zk gas fulfillments failing with "zk gas limit
exceeded" while eth_call succeeded). eth_createAccessList and
eth_simulateV1 leaked the same way.
TaikoEvmWrapper now discards in-flight zk gas at the start of every
transact_raw. The block executor opts out via the new
set_per_transact_zk_gas_reset_enabled switch because it owns the
per-transaction bracket (reset, intrinsic charge, commit), keeping
consensus metering byte-for-byte unchanged.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
* chore(ci): refresh pinned apt.llvm.org installer hash
Upstream llvm.sh moved from opencollab/llvm-jenkins.debian.net@eeed6742
(the previously pinned 9474ecd7) to HEAD 6dc0d1ad, and apt.llvm.org now
serves the new script byte-for-byte, so the stale pin failed every LLVM
setup step (clippy, test, docker llvm install) at checksum verification.
Reviewed the full delta before repinning: a usage exit-code tweak,
long-option parsing (--help/--version/--), and the LLVM 23/24 version
patterns from upstream's "prepare 23". Nothing affects our
"llvm.sh 22 all" invocation.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
* fix(evm): clear inspector step bookkeeping in the zk gas reset
Review round 1: reset_transaction_zk_gas only reset the meter, leaving
the inspector path's deferred/pending step state behind. The unwind of
a failed transaction drains deferred steps through call_end/create_end
on current revm — two adversarial nested-call tests pin that — but the
invariant lived in revm's frame handling; clearing everything in the
reset makes the transact boundary locally provable.
Also corrects the flag documentation: eth_createAccessList uses a fresh
EVM per run and eth_simulateV1 runs through the block executor, so the
raw-EVM reuse set is estimateGas, eth_callBundle, and the intra-block
replay helpers.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
---------
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
0 commit comments