fix(l2genesis): explicitly initialize WETH storage slots after vm.etch#372
Open
dev-khimesh wants to merge 2 commits into
Open
fix(l2genesis): explicitly initialize WETH storage slots after vm.etch#372dev-khimesh wants to merge 2 commits into
dev-khimesh wants to merge 2 commits into
Conversation
added 2 commits
July 11, 2026 22:14
…WithInitData() Moves _finalizeGameCreation() before the external proxy.initialize()/initializeWithInitData() call in both create() and createWithInitData() functions to follow the Checks-Effects-Interactions (CEI) pattern. This prevents state-desynchronization where a dispute game could be initialized but not yet registered in the factory registry, which could cause integration failures and stale state reads for downstream components. Closes base#356.
The setWETH() function uses vm.etch to deploy WETH bytecode, which skips constructor execution. While the WETH contract has no constructor side effects (name/symbol are pure L1Block readers, decimals is constant, and mappings correctly start empty), this change makes the initialization explicit by: 1. Zeroing _balanceOf (slot 0) and _allowance (slot 1) via vm.store for clarity 2. Updating the NatSpec comment to document why each storage slot is correct This addresses Lumi audit finding base#357 and makes the safety invariant auditable at a glance. Closes base#357
Collaborator
🟡 Heimdall Review Status
|
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Description
The
setWETH()function deploys the WETH predeploy viavm.etch, which skips constructor execution. While the WETH contract:purename()/symbol()reading from L1Block (no storage)constantdecimals(no storage slot)_balanceOf(slot 0) and_allowance(slot 1) that correctly start emptyThis change adds explicit
vm.storecalls to zero both storage slots for audit clarity and updates the NatSpec to document the safety invariant.Changes
vm.storecalls for_balanceOf(slot 0) and_allowance(slot 1)Test Plan
L2Genesistests (L2Genesis.t.sol) already verify WETH bytecode is set:assertGt(Predeploys.WETH.code.length, 0)name()/symbol()via L1Blockdecimals = 18Closes #357