Skip to content

Commit

Permalink
contract updates
Browse files Browse the repository at this point in the history
  • Loading branch information
0x0aa0 committed Aug 7, 2024
1 parent eaa0aef commit 4671e0a
Show file tree
Hide file tree
Showing 8 changed files with 134 additions and 162 deletions.
20 changes: 20 additions & 0 deletions src/bridge/EigenDABlobVerifierL1.sol
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.9;

import "./IRollupManager.sol";

contract EigenDABlobVerifierL1 is IRollupManager {

IEigenDAServiceManager public immutable eigenDAServiceManager;

constructor(address _eigenDAServiceManager) {
eigenDAServiceManager = IEigenDAServiceManager(_eigenDAServiceManager);
}

function verifyBlob(
IEigenDAServiceManager.BlobHeader calldata blobHeader,
EigenDARollupUtils.BlobVerificationProof calldata blobVerificationProof
) external view {
EigenDARollupUtils.verifyBlob(blobHeader, eigenDAServiceManager, blobVerificationProof);
}
}
14 changes: 14 additions & 0 deletions src/bridge/EigenDABlobVerifierL2.sol
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.9;

import "./IRollupManager.sol";

contract EigenDABlobVerifierL2 is IRollupManager {

function verifyBlob(
IEigenDAServiceManager.BlobHeader calldata blobHeader,
EigenDARollupUtils.BlobVerificationProof calldata blobVerificationProof
) external view {
//EigenDA blob verifcation is only supported on L1 currently
}
}
13 changes: 13 additions & 0 deletions src/bridge/IRollupManager.sol
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.9;

import {EigenDARollupUtils} from "@eigenda/eigenda-utils/libraries/EigenDARollupUtils.sol";
import {IEigenDAServiceManager} from "@eigenda/eigenda-utils/interfaces/IEigenDAServiceManager.sol";

interface IRollupManager {

function verifyBlob(
IEigenDAServiceManager.BlobHeader calldata blobHeader,
EigenDARollupUtils.BlobVerificationProof calldata blobVerificationProof
) external view;
}
84 changes: 0 additions & 84 deletions src/bridge/RollupManager.sol

This file was deleted.

114 changes: 54 additions & 60 deletions src/bridge/SequencerInbox.sol
Original file line number Diff line number Diff line change
Expand Up @@ -47,9 +47,7 @@ import {GasRefundEnabled} from "../libraries/GasRefundEnabled.sol";
import "../libraries/ArbitrumChecker.sol";
import {IERC20Bridge} from "./IERC20Bridge.sol";

import {IRollupManager} from "./RollupManager.sol";
import {IEigenDAServiceManager} from "@eigenda/eigenda-utils/interfaces/IEigenDAServiceManager.sol";

import "./IRollupManager.sol";

/**
* @title Accepts batches from the sequencer and adds them to the rollup inbox.
Expand All @@ -63,8 +61,6 @@ contract SequencerInbox is DelegateCallAware, GasRefundEnabled, ISequencerInbox

IBridge public bridge;

address public eigenDARollupManager;

/// @inheritdoc ISequencerInbox
uint256 public constant HEADER_LENGTH = 40;

Expand Down Expand Up @@ -104,6 +100,8 @@ contract SequencerInbox is DelegateCallAware, GasRefundEnabled, ISequencerInbox

mapping(bytes32 => DasKeySetInfo) public dasKeySetInfo;

IRollupManager public rollupManager;

modifier onlyRollupOwner() {
if (msg.sender != rollup.owner()) revert NotOwner(msg.sender, rollup.owner());
_;
Expand Down Expand Up @@ -409,59 +407,56 @@ contract SequencerInbox is DelegateCallAware, GasRefundEnabled, ISequencerInbox
}
}

function addSequencerL2BatchFromEigenDA(
uint256 sequenceNumber,
EigenDARollupUtils.BlobVerificationProof calldata blobVerificationProof,
IEigenDAServiceManager.BlobHeader calldata blobHeader,
IGasRefunder gasRefunder,
uint256 afterDelayedMessagesRead,
uint256 prevMessageCount,
uint256 newMessageCount
) external refundsGas(gasRefunder, IReader4844(address(0))) {
if (!isBatchPoster[msg.sender]) revert NotBatchPoster();
// Verify that the blob was actually included before continuing
rollupManager.verifyBlob(blobHeader, blobVerificationProof);
// Form the EigenDA data hash and get the time bounds
(bytes32 dataHash, IBridge.TimeBounds memory timeBounds) = formEigenDADataHash(blobHeader, afterDelayedMessagesRead);

ISequencerInbox.SequenceMetadata memory metadata = ISequencerInbox.SequenceMetadata({
sequenceNumber: sequenceNumber,
afterDelayedMessagesRead: afterDelayedMessagesRead,
prevMessageCount: prevMessageCount,
newMessageCount: newMessageCount
});

// Call a helper function to add the sequencer L2 batch
_addSequencerL2Batch(metadata, dataHash, timeBounds);
}

function _addSequencerL2Batch(
ISequencerInbox.SequenceMetadata memory sequenceMetadata,
bytes32 dataHash,
IBridge.TimeBounds memory timeBounds
) internal {
(uint256 seqMessageIndex, bytes32 beforeAcc, bytes32 delayedAcc, bytes32 afterAcc) =
addSequencerL2BatchImpl(dataHash, sequenceMetadata.afterDelayedMessagesRead, 0, sequenceMetadata.prevMessageCount, sequenceMetadata.newMessageCount);

uint256 sequenceNumber = sequenceMetadata.sequenceNumber;
// Check the sequence number
if (seqMessageIndex != sequenceNumber && sequenceNumber != ~uint256(0)) {
revert BadSequencerNumber(seqMessageIndex, sequenceNumber);
}

function addSequencerL2BatchFromEigenDA(
uint256 sequenceNumber,
EigenDARollupUtils.BlobVerificationProof calldata blobVerificationProof,
IEigenDAServiceManager.BlobHeader calldata blobHeader,
IGasRefunder gasRefunder,
uint256 afterDelayedMessagesRead,
uint256 prevMessageCount,
uint256 newMessageCount
) external {
if (!isBatchPoster[msg.sender]) revert NotBatchPoster();
return;
// Verify that the blob was actually included before continuing
IRollupManager(eigenDARollupManager).verifyBlob(blobHeader, blobVerificationProof);
// Form the EigenDA data hash and get the time bounds
(bytes32 dataHash, IBridge.TimeBounds memory timeBounds) = formEigenDADataHash(blobHeader, afterDelayedMessagesRead);

ISequencerInbox.SequenceMetadata memory metadata = ISequencerInbox.SequenceMetadata({
sequenceNumber: sequenceNumber,
afterDelayedMessagesRead: afterDelayedMessagesRead,
prevMessageCount: prevMessageCount,
newMessageCount: newMessageCount
});

// Call a helper function to add the sequencer L2 batch
_addSequencerL2Batch(metadata, dataHash, timeBounds);
}

function _addSequencerL2Batch(
ISequencerInbox.SequenceMetadata memory sequenceMetadata,
bytes32 dataHash,
IBridge.TimeBounds memory timeBounds
) internal {
(uint256 seqMessageIndex, bytes32 beforeAcc, bytes32 delayedAcc, bytes32 afterAcc) =
addSequencerL2BatchImpl(dataHash, sequenceMetadata.afterDelayedMessagesRead, 0, sequenceMetadata.prevMessageCount, sequenceMetadata.newMessageCount);

uint256 sequenceNumber = sequenceMetadata.sequenceNumber;
// Check the sequence number
if (seqMessageIndex != sequenceNumber && sequenceNumber != ~uint256(0)) {
revert BadSequencerNumber(seqMessageIndex, sequenceNumber);
}

emit SequencerBatchDelivered(
sequenceNumber,
beforeAcc,
afterAcc,
delayedAcc,
totalDelayedMessagesRead,
timeBounds,
IBridge.BatchDataLocation.EigenDA
);
}
emit SequencerBatchDelivered(
sequenceNumber,
beforeAcc,
afterAcc,
delayedAcc,
totalDelayedMessagesRead,
timeBounds,
IBridge.BatchDataLocation.EigenDA
);
}

function addSequencerL2Batch(
uint256 sequenceNumber,
Expand Down Expand Up @@ -780,21 +775,20 @@ function _addSequencerL2Batch(
emit OwnerFunctionCalled(5);
}

/// @inheritdoc ISequencerInbox
/// @inheritdoc ISequencerInbox
function setRollupAddress() external onlyRollupOwner {
IOwnable newRollup = bridge.rollup();
if (rollup == newRollup) revert RollupNotChanged();
rollup = newRollup;
emit OwnerFunctionCalled(6);
}

/// @inheritdoc ISequencerInbox
function setEigenDARollupManager(address newRollupManager) external onlyRollupOwner {
eigenDARollupManager = newRollupManager;
rollupManager = IRollupManager(newRollupManager);
emit OwnerFunctionCalled(7);
}

/// @notice Allows the rollup owner to sync the rollup address
/// @notice Allows the rollup owner to sync the rollup address
function updateRollupAddress() external {
if (msg.sender != IOwnable(rollup).owner())
revert NotOwner(msg.sender, IOwnable(rollup).owner());
Expand Down
5 changes: 2 additions & 3 deletions src/mocks/SequencerInboxStub.sol
Original file line number Diff line number Diff line change
Expand Up @@ -8,8 +8,7 @@ import "../bridge/SequencerInbox.sol";
import "../bridge/IEthBridge.sol";
import {INITIALIZATION_MSG_TYPE} from "../libraries/MessageTypes.sol";

import {IEigenDAServiceManager} from "@eigenda/eigenda-utils/interfaces/IEigenDAServiceManager.sol";
import {IRollupManager} from "../bridge/RollupManager.sol";
import "../bridge/IRollupManager.sol";

contract SequencerInboxStub is SequencerInbox {
constructor(
Expand Down Expand Up @@ -56,4 +55,4 @@ contract SequencerInboxStub is SequencerInbox {
this; // silence warning about function not being view
return bounds;
}
}
}
12 changes: 12 additions & 0 deletions test/foundry/DummyEigenDABlobVerifier.sol
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.9;

import "../../src/bridge/IRollupManager.sol";

contract DummyEigenDABlobVerifier is IRollupManager{

function verifyBlob(
IEigenDAServiceManager.BlobHeader calldata blobHeader,
EigenDARollupUtils.BlobVerificationProof calldata blobVerificationProof
) external view {}
}
Loading

0 comments on commit 4671e0a

Please sign in to comment.