From 63c950fc9462b681ec976883f59f214e9000a137 Mon Sep 17 00:00:00 2001 From: panos-xyz Date: Thu, 2 Apr 2026 10:59:24 +0800 Subject: [PATCH 1/2] feat(devnet): optimize Docker builds, enable MPT mode, fix missing env var - Upgrade Rust base image to 1.88-slim (Dockerfile.oracle) - Unify all Ubuntu base images from 20.04 to 22.04 - Expand .dockerignore to reduce build context by ~1.6GB - Enable MPT mode in L2 genesis (UseZktrie=false, JadeForkTime=0) - Add missing MORPH_NODE_ROLLUP_ADDRESS to node-0~3 and sentry-node-0 --- .dockerignore | 5 +++++ ops/docker/Dockerfile.l1-beacon | 2 +- ops/docker/Dockerfile.oracle | 5 ++++- ops/docker/docker-compose-4nodes.yml | 5 +++++ ops/docker/go-rust-builder.Dockerfile | 2 +- ops/docker/intermediate/go-rust-builder.Dockerfile | 2 +- ops/docker/intermediate/go-ubuntu-builder.Dockerfile | 2 +- ops/l2-genesis/morph-chain-ops/genesis/genesis.go | 5 ++++- 8 files changed, 22 insertions(+), 6 deletions(-) diff --git a/.dockerignore b/.dockerignore index 70e57088..4048e8d5 100644 --- a/.dockerignore +++ b/.dockerignore @@ -1 +1,6 @@ prover/ +.git/ +contracts/node_modules/ +ops/reth-cross-test/ +ops/publicnode/ +docs/ diff --git a/ops/docker/Dockerfile.l1-beacon b/ops/docker/Dockerfile.l1-beacon index a4886981..3a017fbd 100644 --- a/ops/docker/Dockerfile.l1-beacon +++ b/ops/docker/Dockerfile.l1-beacon @@ -1,4 +1,4 @@ -FROM --platform=linux/amd64 ubuntu:20.04 as chain-genesis +FROM --platform=linux/amd64 ubuntu:22.04 as chain-genesis RUN apt-get update && ln -fs /usr/share/zoneinfo/America/New_York /etc/localtime && apt-get install build-essential curl wget git make pkg-config -y RUN curl -o prysmctl -fLO https://github.com/prysmaticlabs/prysm/releases/download/v4.2.1/prysmctl-v4.2.1-linux-amd64 RUN chmod +x prysmctl diff --git a/ops/docker/Dockerfile.oracle b/ops/docker/Dockerfile.oracle index 54733126..b25c1fda 100644 --- a/ops/docker/Dockerfile.oracle +++ b/ops/docker/Dockerfile.oracle @@ -1,4 +1,7 @@ -FROM rust:1.70 as builder +FROM rust:1.88-slim as builder + +RUN apt-get -qq update && apt-get -qq install -y --no-install-recommends \ + pkg-config libssl-dev && rm -rf /var/lib/apt/lists/* COPY ./gas-oracle /gas-oracle diff --git a/ops/docker/docker-compose-4nodes.yml b/ops/docker/docker-compose-4nodes.yml index 255d2a13..32ea8b79 100644 --- a/ops/docker/docker-compose-4nodes.yml +++ b/ops/docker/docker-compose-4nodes.yml @@ -238,6 +238,7 @@ services: - MORPH_NODE_L1_ETH_RPC=${L1_ETH_RPC} - MORPH_NODE_SYNC_DEPOSIT_CONTRACT_ADDRESS=${MORPH_PORTAL:-0x6900000000000000000000000000000000000001} - MORPH_NODE_L1_CONFIRMATIONS=0 + - MORPH_NODE_ROLLUP_ADDRESS=${MORPH_ROLLUP:-0x6900000000000000000000000000000000000010} - MORPH_NODE_SYNC_START_HEIGHT=${MORPH_NODE_SYNC_START_HEIGHT:-1} - MORPH_NODE_UPGRADE_BATCH_TIME=${BATCH_UPGRADE_TIME} volumes: @@ -266,6 +267,7 @@ services: - MORPH_NODE_L1_ETH_RPC=${L1_ETH_RPC} - MORPH_NODE_SYNC_DEPOSIT_CONTRACT_ADDRESS=${MORPH_PORTAL:-0x6900000000000000000000000000000000000001} - MORPH_NODE_L1_CONFIRMATIONS=0 + - MORPH_NODE_ROLLUP_ADDRESS=${MORPH_ROLLUP:-0x6900000000000000000000000000000000000010} - MORPH_NODE_SYNC_START_HEIGHT=${MORPH_NODE_SYNC_START_HEIGHT:-1} - MORPH_NODE_UPGRADE_BATCH_TIME=${BATCH_UPGRADE_TIME} volumes: @@ -295,6 +297,7 @@ services: - MORPH_NODE_L1_ETH_RPC=${L1_ETH_RPC} - MORPH_NODE_SYNC_DEPOSIT_CONTRACT_ADDRESS=${MORPH_PORTAL:-0x6900000000000000000000000000000000000001} - MORPH_NODE_L1_CONFIRMATIONS=0 + - MORPH_NODE_ROLLUP_ADDRESS=${MORPH_ROLLUP:-0x6900000000000000000000000000000000000010} - MORPH_NODE_SYNC_START_HEIGHT=${MORPH_NODE_SYNC_START_HEIGHT:-1} - MORPH_NODE_UPGRADE_BATCH_TIME=${BATCH_UPGRADE_TIME} volumes: @@ -324,6 +327,7 @@ services: - MORPH_NODE_L1_ETH_RPC=${L1_ETH_RPC} - MORPH_NODE_SYNC_DEPOSIT_CONTRACT_ADDRESS=${MORPH_PORTAL:-0x6900000000000000000000000000000000000001} - MORPH_NODE_L1_CONFIRMATIONS=0 + - MORPH_NODE_ROLLUP_ADDRESS=${MORPH_ROLLUP:-0x6900000000000000000000000000000000000010} - MORPH_NODE_SYNC_START_HEIGHT=${MORPH_NODE_SYNC_START_HEIGHT:-1} - MORPH_NODE_UPGRADE_BATCH_TIME=${BATCH_UPGRADE_TIME} volumes: @@ -378,6 +382,7 @@ services: - MORPH_NODE_L1_ETH_RPC=${L1_ETH_RPC} - MORPH_NODE_SYNC_DEPOSIT_CONTRACT_ADDRESS=${MORPH_PORTAL:-0x6900000000000000000000000000000000000001} - MORPH_NODE_L1_CONFIRMATIONS=0 + - MORPH_NODE_ROLLUP_ADDRESS=${MORPH_ROLLUP:-0x6900000000000000000000000000000000000010} - MORPH_NODE_SYNC_START_HEIGHT=${MORPH_NODE_SYNC_START_HEIGHT:-1} volumes: - ".devnet/node4:${NODE_DATA_DIR}" diff --git a/ops/docker/go-rust-builder.Dockerfile b/ops/docker/go-rust-builder.Dockerfile index 05997e3b..2fd98e67 100644 --- a/ops/docker/go-rust-builder.Dockerfile +++ b/ops/docker/go-rust-builder.Dockerfile @@ -2,7 +2,7 @@ ARG GO_VERSION=1.24.0 ARG RUST_VERSION=nightly-2022-12-10 ARG CARGO_CHEF_TAG=0.1.41 -FROM ubuntu:20.04 +FROM ubuntu:22.04 RUN apt-get update && ln -fs /usr/share/zoneinfo/America/New_York /etc/localtime diff --git a/ops/docker/intermediate/go-rust-builder.Dockerfile b/ops/docker/intermediate/go-rust-builder.Dockerfile index 1eee2fe2..a7d856ba 100644 --- a/ops/docker/intermediate/go-rust-builder.Dockerfile +++ b/ops/docker/intermediate/go-rust-builder.Dockerfile @@ -2,7 +2,7 @@ ARG GO_VERSION=1.24.0 ARG RUST_VERSION=nightly-2023-12-03 ARG CARGO_CHEF_TAG=0.1.41 -FROM ubuntu:20.04 +FROM ubuntu:22.04 RUN apt-get update --fix-missing && ln -fs /usr/share/zoneinfo/America/New_York /etc/localtime diff --git a/ops/docker/intermediate/go-ubuntu-builder.Dockerfile b/ops/docker/intermediate/go-ubuntu-builder.Dockerfile index 18b66dda..815cfebc 100644 --- a/ops/docker/intermediate/go-ubuntu-builder.Dockerfile +++ b/ops/docker/intermediate/go-ubuntu-builder.Dockerfile @@ -1,6 +1,6 @@ ARG GO_VERSION=1.24 -FROM ubuntu:20.04 +FROM ubuntu:22.04 RUN apt-get update --fix-missing && ln -fs /usr/share/zoneinfo/America/New_York /etc/localtime diff --git a/ops/l2-genesis/morph-chain-ops/genesis/genesis.go b/ops/l2-genesis/morph-chain-ops/genesis/genesis.go index 7aae9cd7..4a5cf3b4 100644 --- a/ops/l2-genesis/morph-chain-ops/genesis/genesis.go +++ b/ops/l2-genesis/morph-chain-ops/genesis/genesis.go @@ -75,10 +75,11 @@ func NewL2Genesis(config *DeployConfig, block *types.Block) (*core.Genesis, erro EmeraldTime: emeraldTime, TerminalTotalDifficulty: big.NewInt(0), Morph: params.MorphConfig{ - UseZktrie: true, + UseZktrie: false, MaxTxPayloadBytesPerBlock: &maxTxPayloadBytesPerBlock, FeeVaultAddress: &sequencerFeeVaultReceipt, }, + JadeForkTime: new(uint64), } gasLimit := config.L2GenesisBlockGasLimit @@ -88,6 +89,8 @@ func NewL2Genesis(config *DeployConfig, block *types.Block) (*core.Genesis, erro var baseFee *big.Int if config.L2GenesisBlockBaseFeePerGas != nil { baseFee = config.L2GenesisBlockBaseFeePerGas.ToInt() + } else { + baseFee = big.NewInt(1_000_000) } difficulty := config.L2GenesisBlockDifficulty From efdd27b607abeaf2a6f9732cb543a4cba67ac30d Mon Sep 17 00:00:00 2001 From: panos-xyz Date: Thu, 2 Apr 2026 22:55:29 +0800 Subject: [PATCH 2/2] fix(devnet): ensure devnet-clean-build removes Docker volumes devnet-clean-build must use `docker compose down --volumes` to remove named Docker volumes. Without this, geth containers reuse stale chaindata from a previous genesis (e.g., ZkTrie data after switching to MPT mode), causing state root mismatches between genesis-batch-header and the actual L2 genesis. Changes: - devnet-clean-build: use `compose down --volumes --remove-orphans` instead of `devnet-down` (which doesn't delete volumes) - Fix volume filter from `docker-*` to `docker_` (matching actual volume names like `docker_morph_data_0`) - Add error suppression for volume cleanup edge cases --- Makefile | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/Makefile b/Makefile index b85b30ac..4d059662 100644 --- a/Makefile +++ b/Makefile @@ -149,8 +149,9 @@ devnet-down: cd ops/docker && docker compose -f docker-compose-4nodes.yml down .PHONY: devnet-down -devnet-clean-build: devnet-down devnet-l1-clean - docker volume ls --filter name=docker-* --format='{{.Name}}' | xargs -r docker volume rm +devnet-clean-build: devnet-l1-clean + cd ops/docker && docker compose -f docker-compose-4nodes.yml down --volumes --remove-orphans + docker volume ls --filter name=docker_ --format='{{.Name}}' | xargs docker volume rm 2>/dev/null || true rm -rf ops/l2-genesis/.devnet rm -rf ops/docker/.devnet rm -rf ops/docker/consensus/beacondata ops/docker/consensus/validatordata ops/docker/consensus/genesis.ssz