From f3a6b09527d8b2e4bf4455e51b0176d4d832d59b Mon Sep 17 00:00:00 2001 From: Jack Chuma Date: Mon, 24 Aug 2026 15:07:03 -0400 Subject: [PATCH 1/2] docs(L1): document AggregateVerifier L1 origin split Explain that initialization proofs journal a verified proof-supplied origin while later proof paths use the factory-captured l1Head. Co-authored-by: Cursor --- snapshots/semver-lock.json | 2 +- src/L1/proofs/AggregateVerifier.sol | 7 ++++++- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/snapshots/semver-lock.json b/snapshots/semver-lock.json index eb4b99ac6..1528d523a 100644 --- a/snapshots/semver-lock.json +++ b/snapshots/semver-lock.json @@ -29,7 +29,7 @@ }, "src/L1/proofs/AggregateVerifier.sol:AggregateVerifier": { "initCodeHash": "0x84c6bf00e337c889993c409f18b17986f9d9546ac6754f7730962459d301c21d", - "sourceCodeHash": "0xab669e0a55462740b4c1c06fe94aa709044146e3eeec4a0123fbc67dd7f35c28" + "sourceCodeHash": "0xe6f8a0d8d8ff5a28f13badc251ce85c5e9e0ed4e6b20e32737c25f3cdc4a6bcd" }, "src/L1/proofs/AnchorStateRegistry.sol:AnchorStateRegistry": { "initCodeHash": "0x6f3afd2d0ef97a82ca3111976322b99343a270e54cd4a405028f2f29c75f7fb1", diff --git a/src/L1/proofs/AggregateVerifier.sol b/src/L1/proofs/AggregateVerifier.sol index 788e70fb6..4d958d416 100644 --- a/src/L1/proofs/AggregateVerifier.sol +++ b/src/L1/proofs/AggregateVerifier.sol @@ -345,9 +345,11 @@ contract AggregateVerifier is Clone, ReentrancyGuard, ISemver { } /// @notice Initializes the contract. - /// @param proof The proof. + /// @param proof The proof, encoded as proof type || L1 origin hash || L1 origin number || verifier payload. /// @dev This function may only be called once. /// @dev First byte of the proof is the proof type. + /// @dev The proof-supplied L1 origin hash is verified against the supplied block number and journaled. It need not + /// equal `l1Head()`, which the factory captures at game creation for proofs submitted after initialization. function initializeWithInitData(bytes calldata proof) external payable virtual { // The game must not have already been initialized. if (initialized) revert AlreadyInitialized(); @@ -807,6 +809,9 @@ contract AggregateVerifier is Clone, ReentrancyGuard, ISemver { } /// @notice Getter for the parent hash of the L1 block when the dispute game was created. + /// @dev Proofs submitted through `verifyProposalProof`, `challenge`, and `nullify` journal this factory-captured + /// hash. Initialization instead journals the independently verified L1 origin hash supplied to + /// `initializeWithInitData`. function l1Head() public pure returns (Hash) { return Hash.wrap(_getArgBytes32(0x34)); } From 1901048ff08f344b8371cf7f20a43f28896b3c48 Mon Sep 17 00:00:00 2001 From: Jack Chuma Date: Mon, 24 Aug 2026 15:36:38 -0400 Subject: [PATCH 2/2] docs(L1): clarify AggregateVerifier proof encoding Consolidate the initialization proof layout into its parameter documentation so the proof-type description is precise and non-redundant. Co-authored-by: Cursor --- snapshots/semver-lock.json | 2 +- src/L1/proofs/AggregateVerifier.sol | 3 +-- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/snapshots/semver-lock.json b/snapshots/semver-lock.json index 7a9af7f14..fe5b737f4 100644 --- a/snapshots/semver-lock.json +++ b/snapshots/semver-lock.json @@ -29,7 +29,7 @@ }, "src/L1/proofs/AggregateVerifier.sol:AggregateVerifier": { "initCodeHash": "0x84c6bf00e337c889993c409f18b17986f9d9546ac6754f7730962459d301c21d", - "sourceCodeHash": "0x367088b445d3585be61041400367271082d341c1f6272e8044fb4073b6b5f493" + "sourceCodeHash": "0x15952c01559b5c8e08faba110a49da9fb8c20e7bd4a62f7884c902847783e201" }, "src/L1/proofs/AnchorStateRegistry.sol:AnchorStateRegistry": { "initCodeHash": "0x6f3afd2d0ef97a82ca3111976322b99343a270e54cd4a405028f2f29c75f7fb1", diff --git a/src/L1/proofs/AggregateVerifier.sol b/src/L1/proofs/AggregateVerifier.sol index 8e4cdb772..6f864792e 100644 --- a/src/L1/proofs/AggregateVerifier.sol +++ b/src/L1/proofs/AggregateVerifier.sol @@ -345,9 +345,8 @@ contract AggregateVerifier is Clone, ReentrancyGuard, ISemver { } /// @notice Initializes the contract. - /// @param proof The proof, encoded as proof type || L1 origin hash || L1 origin number || verifier payload. + /// @param proof Encoding: uint8 proofType || bytes32 l1OriginHash || uint256 l1OriginNumber || verifier payload. /// @dev This function may only be called once. - /// @dev First byte of the proof is the proof type. /// @dev The proof-supplied L1 origin hash is verified against the supplied block number and journaled. It need not /// equal `l1Head()`, which the factory captures at game creation for proofs submitted after initialization. function initializeWithInitData(bytes calldata proof) external payable virtual {