Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
28 commits
Select commit Hold shift + click to select a range
ac56b04
feature: support sequencer rotate
Feb 4, 2026
dcd0112
ZK to MPT (#827)
curryxbo Feb 11, 2026
7efc270
support derive commitBatchWithProof event (#880)
curryxbo Feb 11, 2026
20e59b4
Merge pull request #884 from morph-l2/prove-state-view
anylots Feb 25, 2026
3a6022f
support fixed gas fee cap and tip cap (#868)
curryxbo Feb 26, 2026
2ac7b67
add consensus switch flag
Feb 26, 2026
29db6e5
Merge branch 'test_3_13' into feat/sequencer-rotate-pr
tomatoishealthy Feb 26, 2026
511c280
Feat/sequencer rotate pr (#887)
tomatoishealthy Feb 26, 2026
8c00f42
Feat: Upgrade Prover to SP1 v5, Integrate Morph-Reth as STF, and Repl…
anylots Feb 27, 2026
4ed91d5
Merge branch 'main' into test_3_13
Feb 27, 2026
6692c86
MorphTx enhances and updates Jade upgrades (#890)
SegueII Feb 27, 2026
3cf24c2
update go mod
SegueII Feb 27, 2026
895120c
Add reorg block check (#892)
Kukoomomo Mar 2, 2026
123d3eb
chore: upgrade go-ethereum to fix MorphTx version JSON unmarshaling
panos-xyz Mar 2, 2026
4d6329b
Merge pull request #894 from morph-l2/fix/morph-tx-version-json
panos-xyz Mar 3, 2026
eaaba81
update go mod
SegueII Mar 3, 2026
da69753
update go mod
SegueII Mar 3, 2026
a195d1f
Test submitter batch (#896)
Kukoomomo Mar 4, 2026
8913394
fix morph tx type
Kukoomomo Mar 4, 2026
31059df
Fix commitBatchWithProof by any (#906)
Kukoomomo Mar 11, 2026
8634094
fix: update tendermint to 200f21adf with blocksync and consensus fixes
Mar 12, 2026
af51dc3
fix: update tendermint to 57e39802d with blocksync and consensus fixes
Mar 12, 2026
34727aa
feat: update geth to 280bfb9c and add timestamp to AssembleL2BlockV2
Mar 12, 2026
1a20a0f
Merge remote-tracking branch 'origin/main' into feat/sequencer-rotate-pr
Mar 12, 2026
4cc03d3
feat: update geth to 280bfb9c and add timestamp to AssembleL2BlockV2
Mar 12, 2026
456e451
Merge branch 'test_3_13' into feat/sequencer-rotate-pr
Mar 12, 2026
0a57bcf
chore: remove redundant tendermint replace from go.work
Mar 12, 2026
12f01af
chore: clean up go.work.sum stale tendermint entry
Mar 12, 2026
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
5 changes: 4 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -31,4 +31,7 @@ contracts/mainnet.json
.env

# logs
*.log
*.log

# mpt-switch-test (local testing only)
ops/mpt-switch-test
7 changes: 4 additions & 3 deletions Makefile
Original file line number Diff line number Diff line change
@@ -1,7 +1,8 @@
################## update dependencies ####################
ETHEREUM_SUBMODULE_COMMIT_OR_TAG := morph-v2.1.0
ETHEREUM_TARGET_VERSION := v1.10.14-0.20251219060125-03910bc750a2
TENDERMINT_TARGET_VERSION := v0.3.3
ETHEREUM_SUBMODULE_COMMIT_OR_TAG := test_3_13
ETHEREUM_TARGET_VERSION := v1.10.14-0.20260303114154-29281e501802
TENDERMINT_TARGET_VERSION := v0.3.4-0.20260226093240-9be76fe518c2


ETHEREUM_MODULE_NAME := github.com/morph-l2/go-ethereum
TENDERMINT_MODULE_NAME := github.com/morph-l2/tendermint
Expand Down
820 changes: 820 additions & 0 deletions bindings/bindings/l1sequencer.go

Large diffs are not rendered by default.

6 changes: 2 additions & 4 deletions bindings/go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,9 @@ module morph-l2/bindings

go 1.24.0

replace github.com/tendermint/tendermint => github.com/morph-l2/tendermint v0.3.3
replace github.com/tendermint/tendermint => github.com/morph-l2/tendermint v0.3.4-0.20260312100533-57e39802d7e9

require github.com/morph-l2/go-ethereum v1.10.14-0.20251219060125-03910bc750a2
require github.com/morph-l2/go-ethereum v1.10.14-0.20260312125309-280bfb9cfd1d

require (
github.com/VictoriaMetrics/fastcache v1.12.2 // indirect
Expand All @@ -27,11 +27,9 @@ require (
github.com/hashicorp/golang-lru v1.0.2 // indirect
github.com/holiman/uint256 v1.2.4 // indirect
github.com/iden3/go-iden3-crypto v0.0.16 // indirect
github.com/mattn/go-runewidth v0.0.15 // indirect
github.com/mmcloughlin/addchain v0.4.0 // indirect
github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect
github.com/prometheus/tsdb v0.10.0 // indirect
github.com/rivo/uniseg v0.4.3 // indirect
github.com/rjeczalik/notify v0.9.3 // indirect
github.com/scroll-tech/zktrie v0.8.4 // indirect
github.com/shirou/gopsutil v3.21.11+incompatible // indirect
Expand Down
13 changes: 6 additions & 7 deletions bindings/go.sum
Original file line number Diff line number Diff line change
Expand Up @@ -103,16 +103,16 @@ github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxv
github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFBFZlji/RkVcI2GknAs/DXo4wKdlNEc=
github.com/leanovate/gopter v0.2.11 h1:vRjThO1EKPb/1NsDXuDrzldR28RLkBflWYcU9CvzWu4=
github.com/leanovate/gopter v0.2.11/go.mod h1:aK3tzZP/C+p1m3SPRE4SYZFGP7jjkuSI4f7Xvpt0S9c=
github.com/mattn/go-runewidth v0.0.15 h1:UNAjwbU9l54TA3KzvqLGxwWjHmMgBUVhBiTjelZgg3U=
github.com/mattn/go-runewidth v0.0.15/go.mod h1:Jdepj2loyihRzMpdS35Xk/zdY8IAYHsh153qUoGf23w=
github.com/mattn/go-runewidth v0.0.16 h1:E5ScNMtiwvlvB5paMFdw9p4kSQzbXFikJ5SQO6TULQc=
github.com/mattn/go-runewidth v0.0.16/go.mod h1:Jdepj2loyihRzMpdS35Xk/zdY8IAYHsh153qUoGf23w=
github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0=
github.com/mmcloughlin/addchain v0.4.0 h1:SobOdjm2xLj1KkXN5/n0xTIWyZA2+s99UCY1iPfkHRY=
github.com/mmcloughlin/addchain v0.4.0/go.mod h1:A86O+tHqZLMNO4w6ZZ4FlVQEadcoqkyU72HC5wJ4RlU=
github.com/mmcloughlin/profile v0.1.1/go.mod h1:IhHD7q1ooxgwTgjxQYkACGA77oFTDdFVejUS1/tS/qU=
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0=
github.com/morph-l2/go-ethereum v1.10.14-0.20251219060125-03910bc750a2 h1:FUv9gtnvF+1AVrkoNGYbVOesi7E+STjdfD2mcqVaEY0=
github.com/morph-l2/go-ethereum v1.10.14-0.20251219060125-03910bc750a2/go.mod h1:tiFPeidxjoCmLj18ne9H3KQdIGTCvRC30qlef06Fd9M=
github.com/morph-l2/go-ethereum v1.10.14-0.20260312125309-280bfb9cfd1d h1:Qy3ytYw/PGnrPDAWen1MsMUhUXclk1F2Q36A07+bBv4=
github.com/morph-l2/go-ethereum v1.10.14-0.20260312125309-280bfb9cfd1d/go.mod h1:nkVzHjQWCOjvukQW8ittlwX+Xz9gmVHrP7mUi7zoHTs=
github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U=
github.com/nxadm/tail v1.4.4/go.mod h1:kenIhsEOeOJmVchQTgglprH7qJGnHDVpk1VPCcaMI8A=
github.com/nxadm/tail v1.4.8/go.mod h1:+ncqLTQzXmGhMZNUePPaPqPvBxHAIsmXswZKocGu+AU=
Expand Down Expand Up @@ -143,9 +143,8 @@ github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/go.mod h1:c3At6R
github.com/prometheus/procfs v0.0.2/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA=
github.com/prometheus/tsdb v0.10.0 h1:If5rVCMTp6W2SiRAQFlbpJNgVlgMEd+U2GZckwK38ic=
github.com/prometheus/tsdb v0.10.0/go.mod h1:oi49uRhEe9dPUTlS3JRZOwJuVi6tmh10QSgwXEyGCt4=
github.com/rivo/uniseg v0.2.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJtxc=
github.com/rivo/uniseg v0.4.3 h1:utMvzDsuh3suAEnhH0RdHmoPbU648o6CvXxTx4SBMOw=
github.com/rivo/uniseg v0.4.3/go.mod h1:FN3SvrM+Zdj16jyLfmOkMNblXMcoc8DfTHruCPUcx88=
github.com/rivo/uniseg v0.4.7 h1:WUdvkW8uEhrYfLC4ZzdpI2ztxP1I582+49Oc5Mq64VQ=
github.com/rivo/uniseg v0.4.7/go.mod h1:FN3SvrM+Zdj16jyLfmOkMNblXMcoc8DfTHruCPUcx88=
github.com/rjeczalik/notify v0.9.3 h1:6rJAzHTGKXGj76sbRgDiDcYj/HniypXmSJo1SWakZeY=
github.com/rjeczalik/notify v0.9.3/go.mod h1:gF3zSOrafR9DQEWSE8TjfI9NkooDxbyT4UgRGKZA0lc=
github.com/scroll-tech/zktrie v0.8.4 h1:UagmnZ4Z3ITCk+aUq9NQZJNAwnWl4gSxsLb2Nl7IgRE=
Expand Down
58 changes: 58 additions & 0 deletions contracts/contracts/l1/L1Sequencer.sol
Original file line number Diff line number Diff line change
@@ -0,0 +1,58 @@
// SPDX-License-Identifier: MIT
pragma solidity =0.8.24;

import {OwnableUpgradeable} from "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol";

/// @title L1Sequencer
/// @notice L1 contract for managing the sequencer address.
/// The sequencer address can be updated by the owner (multisig recommended).
contract L1Sequencer is OwnableUpgradeable {
// ============ Storage ============

/// @notice Current sequencer address
address public sequencer;

// ============ Events ============

/// @notice Emitted when sequencer is updated
event SequencerUpdated(address indexed oldSequencer, address indexed newSequencer);

// ============ Initializer ============

/// @notice Initialize the contract
/// @param _owner Contract owner (multisig recommended)
/// @param _initialSequencer Initial sequencer address (can be address(0) to set later)
function initialize(address _owner, address _initialSequencer) external initializer {
require(_owner != address(0), "invalid owner");

__Ownable_init();
_transferOwnership(_owner);

// Set initial sequencer if provided
if (_initialSequencer != address(0)) {
sequencer = _initialSequencer;
emit SequencerUpdated(address(0), _initialSequencer);
}
}

// ============ Admin Functions ============

/// @notice Update sequencer address (takes effect immediately)
/// @param newSequencer New sequencer address
function updateSequencer(address newSequencer) external onlyOwner {
require(newSequencer != address(0), "invalid sequencer");
require(newSequencer != sequencer, "same sequencer");

address oldSequencer = sequencer;
sequencer = newSequencer;

emit SequencerUpdated(oldSequencer, newSequencer);
}

// ============ View Functions ============

/// @notice Get current sequencer address
function getSequencer() external view returns (address) {
return sequencer;
}
}
21 changes: 17 additions & 4 deletions contracts/contracts/l1/rollup/Rollup.sol
Original file line number Diff line number Diff line change
Expand Up @@ -238,12 +238,14 @@ contract Rollup is IRollup, OwnableUpgradeable, PausableUpgradeable {
) {
require(batchDataInput.numL1Messages > 0, "l1msg delay");
}
_commitBatchWithBatchData(batchDataInput, batchSignatureInput);
uint256 submitterBitmap = IL1Staking(l1StakingContract).getStakerBitmap(_msgSender());
_commitBatchWithBatchData(batchDataInput, batchSignatureInput, submitterBitmap);
}

function _commitBatchWithBatchData(
BatchDataInput calldata batchDataInput,
BatchSignatureInput calldata batchSignatureInput
BatchSignatureInput calldata batchSignatureInput,
uint256 submitterBitmap
) internal {
require(batchDataInput.version == 0 || batchDataInput.version == 1, "invalid version");
require(batchDataInput.prevStateRoot != bytes32(0), "previous state root is zero");
Expand Down Expand Up @@ -324,7 +326,7 @@ contract Rollup is IRollup, OwnableUpgradeable, PausableUpgradeable {
batchDataInput.lastBlockNumber,
// Before BLS is implemented, the accuracy of the sequencer set uploaded by rollup cannot be guaranteed.
// Therefore, if the batch is successfully challenged, only the submitter will be punished.
IL1Staking(l1StakingContract).getStakerBitmap(_msgSender()) // => batchSignature.signedSequencersBitmap
submitterBitmap // => batchSignature.signedSequencersBitmap
);

lastCommittedBatchIndex = _batchIndex;
Expand Down Expand Up @@ -367,7 +369,7 @@ contract Rollup is IRollup, OwnableUpgradeable, PausableUpgradeable {
}
require(rollupDelay || l1MsgQueueDelayed, "invalid timing");

_commitBatchWithBatchData(batchDataInput, batchSignatureInput);
_commitBatchWithBatchData(batchDataInput, batchSignatureInput,0);

// get batch data from batch header
(uint256 memPtr, bytes32 _batchHash) = _loadBatchHeader(_batchHeader);
Expand Down Expand Up @@ -668,6 +670,17 @@ contract Rollup is IRollup, OwnableUpgradeable, PausableUpgradeable {
return batchDataStore[batchIndex].finalizeTimestamp > block.timestamp;
}

/// @dev proveCommittedBatchState verifies the ZK proof for a committed batch.
function proveCommittedBatchState(bytes calldata _batchHeader, bytes calldata _batchProof) public view {
// get batch data from batch header
(uint256 memPtr, bytes32 _batchHash) = _loadBatchHeader(_batchHeader);
// check batch hash
uint256 _batchIndex = BatchHeaderCodecV0.getBatchIndex(memPtr);
require(committedBatches[_batchIndex] == _batchHash, "incorrect batch hash");

_verifyProof(memPtr, _batchProof);
}

/**********************
* Internal Functions *
**********************/
Expand Down
7 changes: 6 additions & 1 deletion contracts/contracts/libraries/verifier/ISP1Verifier.sol
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
pragma solidity =0.8.24;

/// @title SP1 Verifier Interface
/// @author Succinct Labs
/// @notice This contract is the interface for the SP1 Verifier.
interface ISP1Verifier {
/// @notice Verifies a proof with given public values and vkey.
Expand All @@ -10,7 +11,11 @@ interface ISP1Verifier {
/// @param programVKey The verification key for the RISC-V program.
/// @param publicValues The public values encoded as bytes.
/// @param proofBytes The proof of the program execution the SP1 zkVM encoded as bytes.
function verifyProof(bytes32 programVKey, bytes calldata publicValues, bytes calldata proofBytes) external view;
function verifyProof(
bytes32 programVKey,
bytes calldata publicValues,
bytes calldata proofBytes
) external view;
}

interface ISP1VerifierWithHash is ISP1Verifier {
Expand Down
Loading
Loading