Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions docs/provers/ARBITRUM.md
Original file line number Diff line number Diff line change
Expand Up @@ -180,7 +180,7 @@ function getTargetStateCommitment(bytes calldata input)
targetStateCommitment = IOutbox(outbox).roots(sendRoot);

if (targetStateCommitment == bytes32(0)) {
revert TargetBlockHashNotFound();
revert InvalidTargetStateCommitment();
}
}
```
Expand Down Expand Up @@ -213,7 +213,7 @@ function verifyTargetStateCommitment(bytes32 homeBlockHash, bytes calldata input
);

if (targetStateCommitment == bytes32(0)) {
revert TargetBlockHashNotFound();
revert InvalidTargetStateCommitment();
}
}
```
Expand Down
8 changes: 4 additions & 4 deletions docs/provers/TAIKO.md
Original file line number Diff line number Diff line change
Expand Up @@ -101,7 +101,7 @@ function getTargetStateCommitment(bytes calldata input)
targetStateCommitment = checkpoint.blockHash;

if (targetStateCommitment == bytes32(0)) {
revert TargetBlockHashNotFound();
revert InvalidTargetStateCommitment();
}
}
```
Expand Down Expand Up @@ -136,7 +136,7 @@ function verifyTargetStateCommitment(bytes32 homeBlockHash, bytes calldata input
);

if (targetStateCommitment == bytes32(0)) {
revert TargetBlockHashNotFound();
revert InvalidTargetStateCommitment();
}
}
```
Expand Down Expand Up @@ -206,7 +206,7 @@ function getTargetStateCommitment(bytes calldata input)
targetStateCommitment = checkpoint.blockHash;

if (targetStateCommitment == bytes32(0)) {
revert TargetBlockHashNotFound();
revert InvalidTargetStateCommitment();
}
}
```
Expand Down Expand Up @@ -239,7 +239,7 @@ function verifyTargetStateCommitment(bytes32 homeBlockHash, bytes calldata input
);

if (targetStateCommitment == bytes32(0)) {
revert TargetBlockHashNotFound();
revert InvalidTargetStateCommitment();
}
}
```
Expand Down
10 changes: 5 additions & 5 deletions snapshots/verifyBroadcastMessage.json
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
{
"EthereumToOptimism": "1639239",
"EthereumToTaikoL2": "1052214",
"LineaL2ToEthereum": "2551776",
"ScrollL2ToEthereum": "1361940",
"EthereumToTaikoL2": "1052244",
"LineaL2ToEthereum": "2551806",
"ScrollL2ToEthereum": "1361970",
"ScrollToOptimism": "1348710",
"TaikoL2ToEthereum": "1022277",
"ZkSyncL2ToEthereum": "125663"
"TaikoL2ToEthereum": "1022307",
"ZkSyncL2ToEthereum": "125693"
}
4 changes: 4 additions & 0 deletions src/contracts/provers/arbitrum/ChildToParentProver.sol
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@ contract ChildToParentProver is IStateProver {

error CallNotOnHomeChain();
error CallOnHomeChain();
error InvalidTargetStateCommitment();

constructor(uint256 _homeChainId) {
homeChainId = _homeChainId;
Expand Down Expand Up @@ -51,6 +52,8 @@ contract ChildToParentProver is IStateProver {
targetStateCommitment = ProverUtils.getSlotFromBlockHeader(
homeBlockHash, rlpBlockHeader, BLOCK_HASH_BUFFER, slot, accountProof, storageProof
);

require(targetStateCommitment != bytes32(0), InvalidTargetStateCommitment());
}

/// @notice Get a parent chain block hash from the buffer at `BLOCK_HASH_BUFFER`.
Expand All @@ -64,6 +67,7 @@ contract ChildToParentProver is IStateProver {

// get the block hash from the buffer
targetStateCommitment = IBuffer(BLOCK_HASH_BUFFER).parentChainBlockHash(targetBlockNumber);
require(targetStateCommitment != bytes32(0), InvalidTargetStateCommitment());
}

/// @notice Verify a storage slot given a target chain block hash and a proof.
Expand Down
10 changes: 3 additions & 7 deletions src/contracts/provers/arbitrum/ParentToChildProver.sol
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ contract ParentToChildProver is IStateProver {

error CallNotOnHomeChain();
error CallOnHomeChain();
error TargetBlockHashNotFound();
error InvalidTargetStateCommitment();

constructor(address _outbox, uint256 _rootsSlot, uint256 _homeChainId) {
outbox = _outbox;
Expand Down Expand Up @@ -54,9 +54,7 @@ contract ParentToChildProver is IStateProver {
targetStateCommitment =
ProverUtils.getSlotFromBlockHeader(homeBlockHash, rlpBlockHeader, outbox, slot, accountProof, storageProof);

if (targetStateCommitment == bytes32(0)) {
revert TargetBlockHashNotFound();
}
require(targetStateCommitment != bytes32(0), InvalidTargetStateCommitment());
}

/// @notice Get a target chain block hash given a target chain sendRoot
Expand All @@ -71,9 +69,7 @@ contract ParentToChildProver is IStateProver {
// get the target block hash from the outbox
targetStateCommitment = IOutbox(outbox).roots(sendRoot);

if (targetStateCommitment == bytes32(0)) {
revert TargetBlockHashNotFound();
}
require(targetStateCommitment != bytes32(0), InvalidTargetStateCommitment());
}

/// @notice Verify a storage slot given a target chain block hash and a proof.
Expand Down
3 changes: 3 additions & 0 deletions src/contracts/provers/linea/ChildToParentProver.sol
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@ contract ChildToParentProver is IStateProver {

error CallNotOnHomeChain();
error CallOnHomeChain();
error InvalidTargetStateCommitment();

constructor(address _blockHashBuffer, uint256 _homeChainId) {
blockHashBuffer = _blockHashBuffer;
Expand Down Expand Up @@ -50,6 +51,7 @@ contract ChildToParentProver is IStateProver {
targetStateCommitment = ProverUtils.getSlotFromBlockHeader(
homeBlockHash, rlpBlockHeader, blockHashBuffer, slot, accountProof, storageProof
);
require(targetStateCommitment != bytes32(0), InvalidTargetStateCommitment());
}

/// @notice Get a parent chain block hash from the buffer at `blockHashBuffer`.
Expand All @@ -63,6 +65,7 @@ contract ChildToParentProver is IStateProver {

// get the block hash from the buffer
targetStateCommitment = IBuffer(blockHashBuffer).parentChainBlockHash(targetBlockNumber);
require(targetStateCommitment != bytes32(0), InvalidTargetStateCommitment());
}

/// @notice Verify a storage slot given a target chain block hash and a proof.
Expand Down
9 changes: 3 additions & 6 deletions src/contracts/provers/linea/ParentToChildProver.sol
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,7 @@ contract ParentToChildProver is IStateProver {
error AccountKeyMismatch();
error AccountValueMismatch();
error StorageKeyMismatch();
error InvalidTargetStateCommitment();

constructor(address _lineaRollup, uint256 _stateRootHashesSlot, uint256 _homeChainId) {
lineaRollup = _lineaRollup;
Expand Down Expand Up @@ -71,9 +72,7 @@ contract ParentToChildProver is IStateProver {
homeStateCommitment, rlpBlockHeader, lineaRollup, slot, accountProof, storageProof
);

if (targetStateCommitment == bytes32(0)) {
revert TargetStateRootNotFound();
}
require(targetStateCommitment != bytes32(0), InvalidTargetStateCommitment());
}

/// @notice Get L2 state root directly from L1 LineaRollup
Expand All @@ -91,9 +90,7 @@ contract ParentToChildProver is IStateProver {
// Get the state root from LineaRollup
targetStateCommitment = ZkEvmV2(lineaRollup).stateRootHashes(l2BlockNumber);

if (targetStateCommitment == bytes32(0)) {
revert TargetStateRootNotFound();
}
require(targetStateCommitment != bytes32(0), TargetStateRootNotFound());
}

/// @notice Verify a storage slot given a target chain state root and a Sparse Merkle Tree proof
Expand Down
2 changes: 2 additions & 0 deletions src/contracts/provers/optimism/ChildToParentProver.sol
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@ contract ChildToParentProver is IStateProver {

error CallNotOnHomeChain();
error CallOnHomeChain();
error InvalidTargetStateCommitment();

constructor(uint256 _homeChainId) {
homeChainId = _homeChainId;
Expand Down Expand Up @@ -52,6 +53,7 @@ contract ChildToParentProver is IStateProver {
targetStateCommitment = ProverUtils.getSlotFromBlockHeader(
homeBlockHash, rlpBlockHeader, L1_BLOCK_PREDEPLOY, L1_BLOCK_HASH_SLOT, accountProof, storageProof
);
require(targetStateCommitment != bytes32(0), InvalidTargetStateCommitment());
}

/// @notice Get the latest parent chain block hash from the L1Block predeploy. Bytes argument is ignored.
Expand Down
4 changes: 3 additions & 1 deletion src/contracts/provers/optimism/ParentToChildProver.sol
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,7 @@ contract ParentToChildProver is IStateProver {
error InvalidGameProxyCode();
error InvalidRootClaimPreimage();
error InvalidGameProxy();
error InvalidTargetStateCommitment();

constructor(address _anchorStateRegistry, uint256 _homeChainId) {
anchorStateRegistry = _anchorStateRegistry;
Expand Down Expand Up @@ -118,7 +119,8 @@ contract ParentToChildProver is IStateProver {
}

// return the target block hash from the root claim preimage
return rootClaimPreimage.latestBlockhash;
targetStateCommitment = rootClaimPreimage.latestBlockhash;
require(targetStateCommitment != bytes32(0), InvalidTargetStateCommitment());
}

/// @notice Return the blockhash from a valid fault dispute game's root claim. The game's claim must be considered valid by the anchor state registry.
Expand Down
3 changes: 3 additions & 0 deletions src/contracts/provers/scroll/ChildToParentProver.sol
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@ contract ChildToParentProver is IStateProver {

error CallNotOnHomeChain();
error CallOnHomeChain();
error InvalidTargetStateCommitment();

constructor(address _blockHashBuffer, uint256 _homeChainId) {
blockHashBuffer = _blockHashBuffer;
Expand Down Expand Up @@ -51,6 +52,7 @@ contract ChildToParentProver is IStateProver {
targetStateCommitment = ProverUtils.getSlotFromBlockHeader(
homeBlockHash, rlpBlockHeader, blockHashBuffer, slot, accountProof, storageProof
);
require(targetStateCommitment != bytes32(0), InvalidTargetStateCommitment());
}

/// @notice Get a parent chain block hash from the buffer at `blockHashBuffer`.
Expand All @@ -64,6 +66,7 @@ contract ChildToParentProver is IStateProver {

// get the block hash from the buffer
targetStateCommitment = IBuffer(blockHashBuffer).parentChainBlockHash(targetBlockNumber);
require(targetStateCommitment != bytes32(0), InvalidTargetStateCommitment());
}

/// @notice Verify a storage slot given a target chain block hash and a proof.
Expand Down
10 changes: 3 additions & 7 deletions src/contracts/provers/scroll/ParentToChildProver.sol
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@ contract ParentToChildProver is IStateProver {

error CallNotOnHomeChain();
error CallOnHomeChain();
error StateRootNotFound();
error InvalidTargetStateCommitment();

/// @param _scrollChain Address of the ScrollChain contract on L1
/// @param _finalizedStateRootsSlot Storage slot of the finalizedStateRoots mapping
Expand Down Expand Up @@ -68,9 +68,7 @@ contract ParentToChildProver is IStateProver {
homeBlockHash, rlpBlockHeader, scrollChain, slot, accountProof, storageProof
);

if (targetStateCommitment == bytes32(0)) {
revert StateRootNotFound();
}
require(targetStateCommitment != bytes32(0), InvalidTargetStateCommitment());
}

/// @notice Get L2 state root directly from L1 ScrollChain
Expand All @@ -88,9 +86,7 @@ contract ParentToChildProver is IStateProver {
// Get the state root from ScrollChain
targetStateCommitment = IScrollChain(scrollChain).finalizedStateRoots(batchIndex);

if (targetStateCommitment == bytes32(0)) {
revert StateRootNotFound();
}
require(targetStateCommitment != bytes32(0), InvalidTargetStateCommitment());
}

/// @notice Verify a storage slot given an L2 state root and a proof
Expand Down
10 changes: 3 additions & 7 deletions src/contracts/provers/taiko/ChildToParentProver.sol
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@ contract ChildToParentProver is IStateProver {

error CallNotOnHomeChain();
error CallOnHomeChain();
error TargetBlockHashNotFound();
error InvalidTargetStateCommitment();

constructor(address _signalService, uint256 _checkpointsSlot, uint256 _homeChainId) {
signalService = _signalService;
Expand Down Expand Up @@ -70,9 +70,7 @@ contract ChildToParentProver is IStateProver {
homeBlockHash, rlpBlockHeader, signalService, slot, accountProof, storageProof
);

if (targetStateCommitment == bytes32(0)) {
revert TargetBlockHashNotFound();
}
require(targetStateCommitment != bytes32(0), InvalidTargetStateCommitment());
}

/// @notice Get L1 block hash directly from L2 SignalService
Expand All @@ -92,9 +90,7 @@ contract ChildToParentProver is IStateProver {

targetStateCommitment = checkpoint.blockHash;

if (targetStateCommitment == bytes32(0)) {
revert TargetBlockHashNotFound();
}
require(targetStateCommitment != bytes32(0), InvalidTargetStateCommitment());
}

/// @notice Verify a storage slot given a target chain block hash and a proof
Expand Down
10 changes: 3 additions & 7 deletions src/contracts/provers/taiko/ParentToChildProver.sol
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@ contract ParentToChildProver is IStateProver {

error CallNotOnHomeChain();
error CallOnHomeChain();
error TargetBlockHashNotFound();
error InvalidTargetStateCommitment();

constructor(address _signalService, uint256 _checkpointsSlot, uint256 _homeChainId) {
signalService = _signalService;
Expand Down Expand Up @@ -70,9 +70,7 @@ contract ParentToChildProver is IStateProver {
homeBlockHash, rlpBlockHeader, signalService, slot, accountProof, storageProof
);

if (targetStateCommitment == bytes32(0)) {
revert TargetBlockHashNotFound();
}
require(targetStateCommitment != bytes32(0), InvalidTargetStateCommitment());
}

/// @notice Get L2 block hash directly from L1 SignalService
Expand All @@ -92,9 +90,7 @@ contract ParentToChildProver is IStateProver {

targetStateCommitment = checkpoint.blockHash;

if (targetStateCommitment == bytes32(0)) {
revert TargetBlockHashNotFound();
}
require(targetStateCommitment != bytes32(0), InvalidTargetStateCommitment());
}

/// @notice Verify a storage slot given a target chain block hash and a proof
Expand Down
3 changes: 3 additions & 0 deletions src/contracts/provers/zksync/ChildToParentProver.sol
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@ contract ChildToParentProver is IStateProver {

error CallNotOnHomeChain();
error CallOnHomeChain();
error InvalidTargetStateCommitment();

constructor(address _blockHashBuffer, uint256 _homeChainId) {
blockHashBuffer = _blockHashBuffer;
Expand Down Expand Up @@ -51,6 +52,7 @@ contract ChildToParentProver is IStateProver {
targetStateCommitment = ProverUtils.getSlotFromBlockHeader(
homeBlockHash, rlpBlockHeader, blockHashBuffer, slot, accountProof, storageProof
);
require(targetStateCommitment != bytes32(0), InvalidTargetStateCommitment());
}

/// @notice Get a parent chain block hash from the buffer at `blockHashBuffer`.
Expand All @@ -64,6 +66,7 @@ contract ChildToParentProver is IStateProver {

// get the block hash from the buffer
targetStateCommitment = IBuffer(blockHashBuffer).parentChainBlockHash(targetBlockNumber);
require(targetStateCommitment != bytes32(0), InvalidTargetStateCommitment());
}

/// @notice Verify a storage slot given a target chain block hash and a proof.
Expand Down
8 changes: 5 additions & 3 deletions src/contracts/provers/zksync/ParentToChildProver.sol
Original file line number Diff line number Diff line change
Expand Up @@ -97,6 +97,9 @@ contract ParentToChildProver is IStateProver {
/// @notice Error thrown when the slot does not match the expected slot.
error SlotMismatch();

/// @notice Error thrown when the target state commitment is invalid.
error InvalidTargetStateCommitment();

constructor(
address _gatewayZkChain,
uint256 _l2LogsRootHashSlot,
Expand Down Expand Up @@ -138,6 +141,7 @@ contract ParentToChildProver is IStateProver {
targetStateCommitment = ProverUtils.getSlotFromBlockHeader(
homeStateCommitment, rlpBlockHeader, address(gatewayZkChain), slot, accountProof, storageProof
);
require(targetStateCommitment != bytes32(0), InvalidTargetStateCommitment());
}

/// @notice Get a target chain L2 logs root hash given a batch number.
Expand All @@ -154,9 +158,7 @@ contract ParentToChildProver is IStateProver {
uint256 batchNumber = abi.decode(input, (uint256));
targetStateCommitment = gatewayZkChain.l2LogsRootHash(batchNumber);

if (targetStateCommitment == bytes32(0)) {
revert L2LogsRootHashNotFound();
}
require(targetStateCommitment != bytes32(0), L2LogsRootHashNotFound());
}

/// @notice Verify a storage slot given a target chain L2 logs root hash and a proof.
Expand Down
2 changes: 1 addition & 1 deletion test/provers/scroll/ParentToChildProver.t.sol
Original file line number Diff line number Diff line change
Expand Up @@ -122,7 +122,7 @@ contract ScrollChainMock is IScrollChain {

bytes memory input = abi.encode(batchIndex);

vm.expectRevert(ParentToChildProver.StateRootNotFound.selector);
vm.expectRevert(ParentToChildProver.InvalidTargetStateCommitment.selector);
parentToChildProver.getTargetStateCommitment(input);
}

Expand Down