Repository navigation
fix(l1): bump zkevm tests to v21.0.6 and reject the two incomplete witnesses it catches - #7438
Conversation
… the two incomplete witnesses its new cases catch. The release grows the EIP-8025 set from 182 to 298 cases and adds one spec check, so a witness whose account or storage trie runs past the 64-nibble hashed key is now rejected after the tries are rebuilt, on both the SSZ path the guest takes and the RPC path the node takes; such a trie still hashes to a root the header can carry, so the block validated before. A zero-amount withdrawal now reads its recipient without marking it modified: process_withdrawals skipped withdrawals of zero, so a witness that left out the recipient's proof was never asked for it, while the spec's create_ether reads the account. The release is filled from tests@v21.0.1, so the base pin and the hive Amsterdam config move to that release with it; it is a coverage-only follow-up to v21.0.0.
|
🤖 Kimi Code ReviewI'll review this PR focusing on the code changes in the execution witness validation and withdrawal processing. The documentation and configuration updates appear straightforward version bumps.
|
| Severity | Location | Issue |
|---|---|---|
| Critical | block_execution_witness.rs:541 |
Potential panic on usize underflow in leaf.partial.len() - ... |
| Medium | block_execution_witness.rs:570-573 |
Verify RLPDecodeError conversion to GuestProgramStateError is intentional |
| Medium | levm/mod.rs:3804-3812 |
Inconsistent error messages; consider preserving original DB error |
| Low | block_execution_witness.rs |
Missing test for NodeHash::Inline validation path |
The critical underflow is the main blocker. The rest are polish items.
Automated review by Kimi (Moonshot AI) · kimi-k2.6 · custom prompt
🤖 Claude Code ReviewReview of PR 7438: zkEVM fixtures bump to v21.0.6, secured-trie path check, zero-amount withdrawal read I read The change looks correct and consistent with the spec behaviour it describes. I have no blocking findings. Secured-trie path validation (
Zero-amount withdrawal (
Fixture and config bump
Tests
Automated review by Claude (Anthropic) · sonnet · custom prompt |
🤖 Codex Code ReviewLooks good overall. The two behavioral changes are narrowly scoped, align with Ethereum stateless-validation semantics, and I don’t see an obvious consensus or memory-safety regression.
Minor note only:
No security or performance concerns stood out from this diff beyond the intended extra trie traversal / account read. Automated review by OpenAI Codex · gpt-5.4 · custom prompt |
Lines of code reportTotal lines added: Detailed view |
lambdaclass#7438 rejects witness tries whose paths do not end at the 64-nibble hashed key by walking every embedded state and storage trie a second time. Under ZisK (zkevm_bench, ziskemu 1.1.0-alpha) that walk costs about 305 steps per witness node, 1.3% to 3.0% of the AIR cost of the committed mainnet blocks. `Trie::get_embedded_root_committed` now takes the key length and checks each node's path as it embeds it, decoding only inline children, which costs about 37 steps per node, 0.1% to 0.3% of AIR cost on the same blocks. The separate walk and its error variant go; lambdaclass#7438's witness-level tests stay and expect `TrieError::KeyLengthMismatch`. The withdrawal warmer now also prefetches zero-amount recipients, which `process_withdrawals` reads since lambdaclass#7438, and two comments that said it skips them are fixed. The hive and forks-roadmap docs name `tests@v21.0.1`, which lambdaclass#7438 pinned.
Motivation
tests-zkevm@v21.0.6grows the EIP-8025 conformance set from 182 to 298 cases and adds one spec check: a witness whose account or storage trie has a path longer than the 64-nibble hashed key is rejected (execution-specs #3193). Against the new bundle, five of the new cases validated a block the spec rejects: the two overlength-path cases, and three zero-amount-withdrawal cases whose witness leaves out the recipient's proof.Description
.fixtures_url_zkevmmoves totests-zkevm@v21.0.6. The release is filled fromtests@v21.0.1, and the two pins have to describe the same chain, so.fixtures_urlmoves totests@v21.0.1with it (a coverage-only follow-up tov21.0.0, 81 more cases, no spec changes) and the hive Amsterdam config follows with that release'seels_commit.process_withdrawalsskipped withdrawals of zero, so a witness that left out the recipient's proof was never asked for it, while the spec'screate_etherreads the account. The read does not mark the account modified, so state and the block access list are unchanged. The other 21 unchanged-read shapes in the same test already passed.docs/eip-8025.mdrecords the new pins and baseline, and the zkEVM bench README and the Makefile comment name the new release.Some test ids changed in this release (storage-delete siblings, missing-code and header-size cases). Nothing in the repository referenced them:
EXTRA_SKIPSis empty and the one conformance workload in the zkEVM bench manifest kept its id.The guest-crate equivalence run (
host_fixtures.rs, which CI does not run) matches the expected output bytes on all 33830 stateless inputs of the new bundle.Checklist
STORE_SCHEMA_VERSION(crates/storage/lib.rs) if the PR includes breaking changes to theStorerequiring a re-sync.