├── .dockerignore ├── .env.default ├── .gitignore ├── README.md ├── docker-compose-mainnet.yml ├── docker-compose-staking-mainnet.yml ├── docker-compose-staking-testnet-sepolia.yml ├── docker-compose-testnet-sepolia.yml ├── logo.png ├── mainnet ├── .env ├── genesis.json ├── op-geth-entrypoint ├── op-geth.Dockerfile ├── op-node-entrypoint ├── op-node.Dockerfile └── rollup.json ├── staking ├── .env ├── README.md └── generate_nginx_config.sh ├── testnet-sepolia ├── .env ├── genesis.json ├── op-geth-entrypoint ├── op-geth.Dockerfile ├── op-node-entrypoint ├── op-node.Dockerfile └── rollup.json └── upgrades ├── Granite-mainnet.md ├── Holocene-mainnet.md ├── Holocene-sepolia.md ├── Isthumus-mainnet.md ├── Isthumus-sepolia.md └── Pectra-sepolia.md /.dockerignore: -------------------------------------------------------------------------------- 1 | /goerli 2 | -------------------------------------------------------------------------------- /.env.default: -------------------------------------------------------------------------------- 1 | OP_GETH_GENESIS_FILE_PATH=/genesis.json 2 | 3 | # [optional] used to enable geth stats: 4 | # OP_GETH_ETH_STATS=nodename:secret@host:port 5 | 6 | # auth secret used by op-geth engine API: 7 | CONDUIT_OP_NODE_L2_ENGINE_AUTH_RAW=688f5d737bad920bdfb2fc2f488d6b6209eebda1dae949a8de91398d932c517a 8 | 9 | OP_NODE_L2_ENGINE_AUTH=/tmp/engine-auth-jwt 10 | OP_NODE_L2_ENGINE_RPC=ws://op-geth:8551 11 | OP_NODE_LOG_LEVEL=debug 12 | OP_NODE_METRICS_ADDR=0.0.0.0 13 | OP_NODE_METRICS_ENABLED=true 14 | OP_NODE_METRICS_PORT=7300 15 | OP_NODE_P2P_AGENT=conduit 16 | OP_NODE_P2P_NAT=true 17 | OP_NODE_P2P_LISTEN_IP=0.0.0.0 18 | OP_NODE_P2P_LISTEN_TCP_PORT=9222 19 | OP_NODE_P2P_LISTEN_UDP_PORT=9222 20 | OP_NODE_ROLLUP_CONFIG=/rollup.json 21 | OP_NODE_RPC_ADDR=0.0.0.0 22 | OP_NODE_RPC_PORT=8545 23 | OP_NODE_SNAPSHOT_LOG=/tmp/op-node-snapshot-log 24 | OP_NODE_VERIFIER_L1_CONFS=4 25 | 26 | # OP_NODE_L1_TRUST_RPC allows for faster syncing, but should be used *only* if your L1 RPC node 27 | # is fully trusted. It also allows op-node to work with clients such as Erigon that do not 28 | # support storage proofs: 29 | #OP_NODE_L1_TRUST_RPC=true 30 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | geth-data 2 | ./geth-data 3 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | ![Mint](logo.png) 2 | 3 | # Mint Node 4 | 5 | It currently supports Optimism’s open-source [OP Stack](https://docs.optimism.io/stack/getting-started). 6 | 7 | This repository contains the relevant Docker builds to run your own RPC node for Mint Blockchain. 8 | 9 | ### Hardware Requirements 10 | 11 | Recommend minimal configuration to run a node: 12 | 13 | - 2 Core * 8 GB RAM 14 | - 800GB SSD Drive (Archive Node) 15 | 16 | ### Running Node 17 | 18 | #### Step1: Setting ETH L1 full-node RPC 19 | 20 | * setting `OP_NODE_L1_ETH_RPC`. need fully synced. 21 | * setting `OP_NODE_L1_BEACON`. need a Beacon RPC. 22 | ``` 23 | # .env 24 | OP_NODE_L1_ETH_RPC= 25 | OP_NODE_L1_BEACON= 26 | ``` 27 | 28 | #### Step2: Start the node 29 | 30 | * Mainnet 31 | ``` 32 | docker compose -f docker-compose-mainnet.yml up --build -d 33 | ``` 34 | * Sepolia Testnet 35 | ``` 36 | docker compose -f docker-compose-testnet-sepolia.yml up --build -d 37 | ``` 38 | 39 | #### Step3: Check your node 40 | 41 | ``` 42 | curl -d '{"id":0,"jsonrpc":"2.0","method":"eth_blockNumber","params":[]}' -H "Content-Type: application/json" http://localhost:8545 43 | ``` 44 | 45 | #### Tips 46 | 47 | 1. You can map a local data directory for `op-geth` by adding volume mapping to `docker-compose-xxx.yml`: 48 | ``` 49 | services: 50 | geth: # this is Optimism's geth client 51 | volumes: 52 | - /data/node_data:/data 53 | ``` 54 | 55 | 2. Default node type is `archive`. you can change it via `op-geth-entrypoint`. 56 | 57 | ``` 58 | --gcmode=full 59 | ``` 60 | 61 | ### Snapshots 62 | 63 | #### Mainnet 64 | - **Archive** https://storage.googleapis.com/mint-snapshot/mint-mainnet-archive-snapshot-20250214.tar.zst 65 | - **Full** https://storage.googleapis.com/mint-snapshot/mint-mainnet-full-snapshot-20250214.tar.zst 66 | 67 | #### Testnet 68 | - **Archive** https://storage.googleapis.com/mint-snapshot/mint-sepolia-archive-snapshot-20250214.tar.zst 69 | 70 | #### Usage 71 | ```sh 72 | mkdir -p /data/node_data/geth 73 | 74 | # Download, You can choose one of two ways to download,Using aria2c to download can improve download speed, but you need to install aria2 75 | step1: download 76 | 77 | wget -c https://storage.googleapis.com/mint-snapshot/mint-mainnet-archive-snapshot-20250214.tar.zst 78 | 79 | step2: unarchive 80 | 81 | aria2c -x 16 -s 16 -k 100M https://storage.googleapis.com/mint-mainnet-archive-snapshot-20250214.tar.zst 82 | 83 | # unzip snapshot to the ledger path: 84 | tar --use-compress-program=unzstd -xvf mint-mainnet-archive-snapshot-20250214.tar.zst -C /data/node_data/geth 85 | 86 | step3: check 87 | $ ls /data/node_data/geth 88 | chaindata 89 | ``` 90 | 91 | ### Troubleshooting 92 | 93 | If you encounter problems with your node, please open a [GitHub issue](https://github.com/Mint-Blockchain/mint-node/issues) or reach out on our [Discord](https://discord.com/invite/mint-blockchain): 94 | -------------------------------------------------------------------------------- /docker-compose-mainnet.yml: -------------------------------------------------------------------------------- 1 | version: '3.8' 2 | 3 | services: 4 | op-geth: # this is Optimism's geth client 5 | pull_policy: always 6 | build: 7 | context: . 8 | dockerfile: ./mainnet/op-geth.Dockerfile 9 | ports: 10 | - 8545:8545 # RPC 11 | - 8546:8546 # websocket 12 | - 30303:30303 # P2P TCP (currently unused) 13 | - 30303:30303/udp # P2P UDP (currently unused) 14 | - 7301:6060 # metrics 15 | env_file: 16 | - .env.default 17 | - ./mainnet/.env 18 | volumes: 19 | - ./geth-data/:/data # enable to have persistency between restarts 20 | - ./mainnet/genesis.json:/genesis.json 21 | logging: 22 | driver: "json-file" 23 | options: 24 | max-size: "100m" 25 | max-file: "3" 26 | op-node: 27 | pull_policy: always 28 | build: 29 | context: . 30 | dockerfile: ./mainnet/op-node.Dockerfile 31 | depends_on: 32 | - op-geth 33 | ports: 34 | - 7545:8545 # RPC 35 | - 9222:9222 # P2P TCP 36 | - 9222:9222/udp # P2P UDP 37 | - 7300:7300 # metrics 38 | - 6060:6060 # pprof 39 | env_file: 40 | - .env.default 41 | - ./mainnet/.env 42 | volumes: 43 | - ./mainnet/rollup.json:/rollup.json 44 | - ./mainnet/genesis.json:/genesis.json 45 | logging: 46 | driver: "json-file" 47 | options: 48 | max-size: "100m" 49 | max-file: "3" 50 | -------------------------------------------------------------------------------- /docker-compose-staking-mainnet.yml: -------------------------------------------------------------------------------- 1 | version: '3.8' 2 | 3 | services: 4 | ipfs: 5 | image: ipfs/kubo:latest 6 | pull_policy: always 7 | container_name: ipfs 8 | ports: 9 | - "5001:5001" # IPFS API 10 | - "8080:8080" # Gateway port 11 | volumes: 12 | - ./data/ipfs:/data/ipfs # enable to have persistency between restarts 13 | logging: 14 | driver: "json-file" 15 | options: 16 | max-size: "100m" 17 | max-file: "3" 18 | 19 | nginx: 20 | image: nginx:latest 21 | pull_policy: always 22 | container_name: nginx 23 | depends_on: 24 | - ipfs 25 | ports: 26 | - "8088:8088" 27 | env_file: 28 | - ./staking/.env 29 | entrypoint: /bin/sh -c "/generate_nginx_config.sh && nginx -g 'daemon off;'" 30 | volumes: 31 | - ./staking/generate_nginx_config.sh:/generate_nginx_config.sh:ro 32 | logging: 33 | driver: "json-file" 34 | options: 35 | max-size: "100m" 36 | max-file: "3" 37 | 38 | op-geth: # this is Optimism's geth client 39 | pull_policy: always 40 | build: 41 | context: . 42 | dockerfile: ./mainnet/op-geth.Dockerfile 43 | ports: 44 | - 8545:8545 # RPC 45 | - 8546:8546 # websocket 46 | - 30303:30303 # P2P TCP (currently unused) 47 | - 30303:30303/udp # P2P UDP (currently unused) 48 | - 7301:6060 # metrics 49 | env_file: 50 | - .env.default 51 | - ./mainnet/.env 52 | volumes: 53 | - ./geth-data/:/data # enable to have persistency between restarts 54 | - ./mainnet/genesis.json:/genesis.json 55 | logging: 56 | driver: "json-file" 57 | options: 58 | max-size: "100m" 59 | max-file: "3" 60 | 61 | op-node: 62 | pull_policy: always 63 | build: 64 | context: . 65 | dockerfile: ./mainnet/op-node.Dockerfile 66 | depends_on: 67 | - op-geth 68 | ports: 69 | - 7545:8545 # RPC 70 | - 9222:9222 # P2P TCP 71 | - 9222:9222/udp # P2P UDP 72 | - 7300:7300 # metrics 73 | - 6060:6060 # pprof 74 | env_file: 75 | - .env.default 76 | - ./mainnet/.env 77 | volumes: 78 | - ./mainnet/rollup.json:/rollup.json 79 | - ./mainnet/genesis.json:/genesis.json 80 | logging: 81 | driver: "json-file" 82 | options: 83 | max-size: "100m" 84 | max-file: "3" 85 | -------------------------------------------------------------------------------- /docker-compose-staking-testnet-sepolia.yml: -------------------------------------------------------------------------------- 1 | version: '3.8' 2 | 3 | services: 4 | ipfs: 5 | image: ipfs/kubo:latest 6 | pull_policy: always 7 | container_name: ipfs 8 | ports: 9 | - "5001:5001" # IPFS API 10 | - "8080:8080" # Gateway port 11 | volumes: 12 | #- ./data/ipfs:/data/ipfs # enable to have persistency between restarts 13 | 14 | nginx: 15 | image: nginx:latest 16 | pull_policy: always 17 | container_name: nginx 18 | depends_on: 19 | - ipfs 20 | ports: 21 | - "8088:8088" 22 | env_file: 23 | - ./staking/.env 24 | entrypoint: /bin/sh -c "/generate_nginx_config.sh && nginx -g 'daemon off;'" 25 | volumes: 26 | - ./staking/generate_nginx_config.sh:/generate_nginx_config.sh:ro 27 | 28 | op-geth: # this is Optimism's geth client 29 | pull_policy: always 30 | build: 31 | context: . 32 | dockerfile: ./testnet-sepolia/op-geth.Dockerfile 33 | ports: 34 | - 8545:8545 # RPC 35 | - 8546:8546 # websocket 36 | - 30303:30303 # P2P TCP (currently unused) 37 | - 30303:30303/udp # P2P UDP (currently unused) 38 | - 7301:6060 # metrics 39 | env_file: 40 | - .env.default 41 | - ./testnet-sepolia/.env 42 | volumes: 43 | #- ./geth-data/:/data # enable to have persistency between restarts 44 | - ./testnet-sepolia/genesis.json:/genesis.json 45 | op-node: 46 | pull_policy: always 47 | build: 48 | context: . 49 | dockerfile: ./testnet-sepolia/op-node.Dockerfile 50 | depends_on: 51 | - op-geth 52 | ports: 53 | - 7545:8545 # RPC 54 | - 9222:9222 # P2P TCP 55 | - 9222:9222/udp # P2P UDP 56 | - 7300:7300 # metrics 57 | - 6060:6060 # pprof 58 | env_file: 59 | - .env.default 60 | - ./testnet-sepolia/.env 61 | volumes: 62 | - ./testnet-sepolia/rollup.json:/rollup.json 63 | - ./testnet-sepolia/genesis.json:/genesis.json 64 | -------------------------------------------------------------------------------- /docker-compose-testnet-sepolia.yml: -------------------------------------------------------------------------------- 1 | version: '3.8' 2 | 3 | services: 4 | op-geth: # this is Optimism's geth client 5 | pull_policy: always 6 | build: 7 | context: . 8 | dockerfile: ./testnet-sepolia/op-geth.Dockerfile 9 | ports: 10 | - 8545:8545 # RPC 11 | - 8546:8546 # websocket 12 | - 30303:30303 # P2P TCP (currently unused) 13 | - 30303:30303/udp # P2P UDP (currently unused) 14 | - 7301:6060 # metrics 15 | env_file: 16 | - .env.default 17 | - ./testnet-sepolia/.env 18 | volumes: 19 | - ./geth-data/:/data # enable to have persistency between restarts 20 | - ./testnet-sepolia/genesis.json:/genesis.json 21 | logging: 22 | driver: "json-file" 23 | options: 24 | max-size: "100m" 25 | max-file: "3" 26 | op-node: 27 | pull_policy: always 28 | build: 29 | context: . 30 | dockerfile: ./testnet-sepolia/op-node.Dockerfile 31 | depends_on: 32 | - op-geth 33 | ports: 34 | - 7545:8545 # RPC 35 | - 9222:9222 # P2P TCP 36 | - 9222:9222/udp # P2P UDP 37 | - 7300:7300 # metrics 38 | - 6060:6060 # pprof 39 | env_file: 40 | - .env.default 41 | - ./testnet-sepolia/.env 42 | volumes: 43 | - ./testnet-sepolia/rollup.json:/rollup.json 44 | - ./testnet-sepolia/genesis.json:/genesis.json 45 | logging: 46 | driver: "json-file" 47 | options: 48 | max-size: "100m" 49 | max-file: "3" 50 | -------------------------------------------------------------------------------- /logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Mint-Blockchain/mint-node/9d11dede1cfb0bc4ae24d8774ac43f649b4da8a6/logo.png -------------------------------------------------------------------------------- /mainnet/.env: -------------------------------------------------------------------------------- 1 | 2 | OP_GETH_SEQUENCER_HTTP=https://rpc-mint-mainnet-0.t.conduit.xyz 3 | OP_NODE_P2P_BOOTNODES=enode://ae58e680cfafb29673869ed1a36202624aa155a230292bbf645a5811e503145d282cf4048b350e93b1541a606dddad0312d90a82e381ea34e0f65cc8de57ab7a@34.168.47.254:9222?discport=30301,enode://d25ce99435982b04d60c4b41ba256b84b888626db7bee45a9419382300fbe907359ae5ef250346785bff8d3b9d07cd3e017a27e2ee3cfda3bcbb0ba762ac9674@bootnode.conduit.xyz:0?discport=30301,enode://2d4e7e9d48f4dd4efe9342706dd1b0024681bd4c3300d021f86fc75eab7865d4e0cbec6fbc883f011cfd6a57423e7e2f6e104baad2b744c3cafaec6bc7dc92c1@34.65.43.171:0?discport=30305,enode://9d7a3efefe442351217e73b3a593bcb8efffb55b4807699972145324eab5e6b382152f8d24f6301baebbfb5ecd4127bd3faab2842c04cd432bdf50ba092f6645@34.65.109.126:0?discport=30305 4 | OP_NODE_P2P_STATIC=/ip4/34.168.47.254/tcp/9222/p2p/16Uiu2HAm7AFYUBN8N7876FSEGWAsUfUJ1eP7345R7HG1Gc7HX8WY 5 | 6 | # [recommended] replace with your preferred L1 (Ethereum, not Conduit) node RPC URL: 7 | OP_NODE_L1_ETH_RPC= 8 | OP_NODE_L1_BEACON= 9 | -------------------------------------------------------------------------------- /mainnet/op-geth-entrypoint: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | set -eu 3 | 4 | VERBOSITY=${GETH_VERBOSITY:-3} 5 | GETH_DATA_DIR=/data 6 | GETH_CHAINDATA_DIR="$GETH_DATA_DIR/geth/chaindata" 7 | OP_GETH_GENESIS_FILE_PATH="${OP_GETH_GENESIS_FILE_PATH:-/genesis.json}" 8 | CHAIN_ID=$(jq -r .config.chainId < "$OP_GETH_GENESIS_FILE_PATH") 9 | RPC_PORT="${RPC_PORT:-8545}" 10 | WS_PORT="${WS_PORT:-8546}" 11 | AUTHRPC_PORT="${AUTHRPC_PORT:-8551}" 12 | METRICS_PORT="${METRICS_PORT:-6060}" 13 | HOST_IP="0.0.0.0" 14 | P2P_PORT="${P2P_PORT:-30303}" 15 | ADDITIONAL_ARGS="" 16 | 17 | mkdir -p $GETH_DATA_DIR 18 | 19 | if [ ! -d "$GETH_CHAINDATA_DIR" ]; then 20 | echo "$GETH_CHAINDATA_DIR missing, running init" 21 | echo "Initializing genesis." 22 | geth --verbosity="$VERBOSITY" init \ 23 | --datadir="$GETH_DATA_DIR" \ 24 | --state.scheme=hash \ 25 | "$OP_GETH_GENESIS_FILE_PATH" 26 | else 27 | echo "$GETH_CHAINDATA_DIR exists." 28 | fi 29 | 30 | echo "$CONDUIT_OP_NODE_L2_ENGINE_AUTH_RAW" > "$OP_NODE_L2_ENGINE_AUTH" 31 | 32 | if [ "${OP_GETH_ETH_STATS+x}" = x ]; then 33 | ADDITIONAL_ARGS="$ADDITIONAL_ARGS --ethstats=$OP_GETH_ETH_STATS" 34 | fi 35 | 36 | if [ "${OP_GETH_ALLOW_UNPROTECTED_TXS+x}" = x ]; then 37 | ADDITIONAL_ARGS="$ADDITIONAL_ARGS --rpc.allow-unprotected-txs=$OP_GETH_ALLOW_UNPROTECTED_TXS" 38 | fi 39 | 40 | if [ "${CHAIN_ID}" = "919" ]; then 41 | ADDITIONAL_ARGS="$ADDITIONAL_ARGS --rollup.superchain-upgrades --op-network mode-sepolia --rollup.halt=major" 42 | fi 43 | 44 | if [ "${CHAIN_ID}" = "34443" ]; then 45 | ADDITIONAL_ARGS="$ADDITIONAL_ARGS --override.canyon=1704992401 --rollup.halt=major" 46 | fi 47 | 48 | if [ "${CHAIN_ID}" = "999999999" ]; then 49 | ADDITIONAL_ARGS="$ADDITIONAL_ARGS --rollup.superchain-upgrades --op-network zora-sepolia --rollup.halt=major" 50 | fi 51 | 52 | if [ "${CHAIN_ID}" = "7777777" ]; then 53 | ADDITIONAL_ARGS="$ADDITIONAL_ARGS --rollup.superchain-upgrades --op-network zora-mainnet --rollup.halt=major" 54 | fi 55 | 56 | if [ "${CHAIN_ID}" = "58008" ]; then 57 | ADDITIONAL_ARGS="$ADDITIONAL_ARGS --rollup.superchain-upgrades --op-network pgn-sepolia --rollup.halt=major" 58 | fi 59 | 60 | if [ "${CHAIN_ID}" = "424" ]; then 61 | ADDITIONAL_ARGS="$ADDITIONAL_ARGS --rollup.superchain-upgrades --op-network pgn-mainnet --rollup.halt=major" 62 | fi 63 | 64 | exec geth \ 65 | --datadir="$GETH_DATA_DIR" \ 66 | --verbosity="$VERBOSITY" \ 67 | --http \ 68 | --http.corsdomain="*" \ 69 | --http.vhosts="*" \ 70 | --http.addr=0.0.0.0 \ 71 | --http.port="$RPC_PORT" \ 72 | --http.api=web3,debug,eth,net,engine \ 73 | --authrpc.addr=0.0.0.0 \ 74 | --authrpc.port="$AUTHRPC_PORT" \ 75 | --authrpc.vhosts="*" \ 76 | --authrpc.jwtsecret="$OP_NODE_L2_ENGINE_AUTH" \ 77 | --ws \ 78 | --ws.addr=0.0.0.0 \ 79 | --ws.port="$WS_PORT" \ 80 | --ws.origins="*" \ 81 | --ws.api=debug,eth,net,engine \ 82 | --metrics \ 83 | --metrics.addr=0.0.0.0 \ 84 | --metrics.port="$METRICS_PORT" \ 85 | --syncmode=full \ 86 | --gcmode=archive \ 87 | --nodiscover \ 88 | --maxpeers=100 \ 89 | --nat=extip:$HOST_IP \ 90 | --networkid="$CHAIN_ID" \ 91 | --rollup.sequencerhttp="$OP_GETH_SEQUENCER_HTTP" \ 92 | --port="$P2P_PORT" \ 93 | --override.fjord=1720627201 \ 94 | --override.granite=1726070401 \ 95 | --override.holocene=1736445601 \ 96 | --state.scheme=hash \ 97 | --override.isthmus=1746806401 \ 98 | $ADDITIONAL_ARGS # intentionally unquoted 99 | -------------------------------------------------------------------------------- /mainnet/op-geth.Dockerfile: -------------------------------------------------------------------------------- 1 | ARG OP_GETH_VERSION=v1.101503.4 2 | FROM us-docker.pkg.dev/oplabs-tools-artifacts/images/op-geth:${OP_GETH_VERSION} 3 | 4 | RUN apk add --no-cache jq curl 5 | 6 | COPY --chmod=755 ./mainnet/op-geth-entrypoint /opt/conduit/bin/op-geth-entrypoint 7 | ENTRYPOINT ["/opt/conduit/bin/op-geth-entrypoint"] 8 | -------------------------------------------------------------------------------- /mainnet/op-node-entrypoint: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | set -eu 3 | 4 | # wait until local geth comes up (authed so will return 401 without token) 5 | until [ "$(curl -s -w '%{http_code}' -o /dev/null "${OP_NODE_L2_ENGINE_RPC//ws/http}")" -eq 401 ]; do 6 | echo "waiting for geth to be ready" 7 | sleep 5 8 | done 9 | 10 | # public-facing P2P node, advertise public IP address 11 | PUBLIC_IP=$(curl -s v4.ident.me) 12 | export OP_NODE_P2P_ADVERTISE_IP=$PUBLIC_IP 13 | CHAIN_ID=$(jq -r .config.chainId < "$OP_GETH_GENESIS_FILE_PATH") 14 | 15 | echo "$CONDUIT_OP_NODE_L2_ENGINE_AUTH_RAW" > "$OP_NODE_L2_ENGINE_AUTH" 16 | 17 | exec op-node \ 18 | --override.fjord=1720627201 \ 19 | --override.granite=1726070401 \ 20 | --override.holocene=1736445601 \ 21 | --override.isthmus=1746806401 22 | -------------------------------------------------------------------------------- /mainnet/op-node.Dockerfile: -------------------------------------------------------------------------------- 1 | ARG OP_NODE_VERSION=v1.13.2 2 | FROM us-docker.pkg.dev/oplabs-tools-artifacts/images/op-node:${OP_NODE_VERSION} 3 | 4 | RUN apk add --no-cache jq curl 5 | 6 | COPY --chmod=755 ./mainnet/op-node-entrypoint /opt/conduit/bin/op-node-entrypoint 7 | ENTRYPOINT ["/opt/conduit/bin/op-node-entrypoint"] 8 | -------------------------------------------------------------------------------- /mainnet/rollup.json: -------------------------------------------------------------------------------- 1 | { 2 | "genesis": { 3 | "l1": { 4 | "hash": "0x12980bfeb6e787dc906b0a6ae000733f9909f6af2121bc78a77afb5ba77988a0", 5 | "number": 19861561 6 | }, 7 | "l2": { 8 | "hash": "0x88441835ca2344ea384e6f73e3d6f921cdd304e5bd6dca15590217e3911c61a3", 9 | "number": 0 10 | }, 11 | "l2_time": 1715608931, 12 | "system_config": { 13 | "batcherAddr": "0x68bdfece01535090c8f3c27ec3b1ae97e83fa4aa", 14 | "overhead": "0x00000000000000000000000000000000000000000000000000000000000000bc", 15 | "scalar": "0x00000000000000000000000000000000000000000000000000000000000a6fe0", 16 | "gasLimit": 30000000 17 | } 18 | }, 19 | "block_time": 2, 20 | "max_sequencer_drift": 600, 21 | "seq_window_size": 3600, 22 | "channel_timeout": 300, 23 | "l1_chain_id": 1, 24 | "l2_chain_id": 185, 25 | "regolith_time": 0, 26 | "canyon_time": 0, 27 | "delta_time": 0, 28 | "ecotone_time": 0, 29 | "batch_inbox_address": "0x4e31448a098393727b786e25b54e59dca1b77fe1", 30 | "deposit_contract_address": "0x59625d1fe0eeb8114a4d13c863978f39b3471781", 31 | "l1_system_config_address": "0xc975862927797812371a9fb631f83f8f5e2240d5", 32 | "protocol_versions_address": "0x0000000000000000000000000000000000000000", 33 | "chain_op_config": { 34 | "eip1559Elasticity": 6, 35 | "eip1559Denominator": 50, 36 | "eip1559DenominatorCanyon": 250 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /staking/.env: -------------------------------------------------------------------------------- 1 | QPS=50r/s 2 | -------------------------------------------------------------------------------- /staking/README.md: -------------------------------------------------------------------------------- 1 | # Mint Staking Node 2 | 3 | This repository contains the relevant Docker builds to run your own RPC node and IPFS node for Mint Blockchain. 4 | 5 | ### Software requirements 6 | 7 | - [Docker](https://docs.docker.com/desktop/) 8 | 9 | ### Hardware requirements 10 | 11 | We recommend you have this configuration to run a node: 12 | 13 | - at least 4 Core * 16 GB RAM 14 | - an SSD drive with at least 200 GB free 15 | 16 | ### Usage 17 | 18 | 1. Ensure you have an Ethereum L1 full node RPC available: 19 | 20 | * setting `OP_NODE_L1_ETH_RPC`. If running your own L1 node, it needs to be fully synced. 21 | * You also need a Beacon API RPC which can be set in `OP_NODE_L1_ETH_RPC`. 22 | Example: 23 | ``` 24 | # .env file 25 | OP_NODE_L1_ETH_RPC=https://eth-mainnet.g.alchemy.com/v2/ 26 | OP_NODE_L1_BEACON= 27 | ``` 28 | 29 | 2. Start Node 30 | 31 | * For Mint Mainnet 32 | ``` 33 | docker compose -f docker-compose-staking-mainnet.yml up --build 34 | ``` 35 | * For Mint Sepolia 36 | ``` 37 | docker compose -f docker-compose-staking-testnet-sepolia.yml up --build 38 | ``` 39 | 40 | 3. Test your node: 41 | 42 | * For Mint RPC 43 | ``` 44 | curl -d '{"id":0,"jsonrpc":"2.0","method":"eth_getBlockByNumber","params":["latest",false]}' -H "Content-Type: application/json" http://localhost:8545 45 | ``` 46 | * For IPFS Node 47 | ``` 48 | curl -I http://localhost:8088/ipfs/QmPmwb54NBPhqKTG1t2m5JtdeP3Hz2eQ9rhtGMFQEeabKm 49 | ``` 50 | #### Note 51 | 1. Some L1 nodes (e.g. Erigon) do not support fetching storage proofs. You can work around this by specifying `--l1.trustrpc` when starting op-node (add it in `op-node-entrypoint` and rebuild the docker image with `docker compose build`.) Do not do this unless you fully trust the L1 node provider. 52 | 53 | 2. You can map local data directories for `op-geth` and `ipfs` by adding volume mappings in the docker-compose-xxx.yml file: 54 | ``` 55 | services: 56 | ipfs: 57 | ... 58 | volumes: 59 | - ./data/ipfs:/data/ipfs 60 | geth: # this is Optimism's geth client 61 | ... 62 | volumes: 63 | - ./geth-data:/data 64 | ``` 65 | 66 | 3. By default, the node type is `Archive`. you can change the type of node via modify the value of `--gcmode` in the `op-geth-entrypoint` file. 67 | 68 | ``` 69 | # for full node 70 | --gcmode=full 71 | ``` 72 | 73 | 4. The IPFS gateway port is forwarded through Nginx, with the default port set to `8088`. A QPS (Queries Per Second) limit is also applied, with a default value of `50` QPS. You can modify this parameter by updating the QPS value in the `.env` file. 74 | ``` 75 | # .env file 76 | QPS=50r/s 77 | ``` 78 | 79 | ### Troubleshooting 80 | 81 | If you encounter problems with your node, please open a [GitHub issue](https://github.com/Mint-Blockchain/mint-node/issues) or reach out on our [Discord](https://discord.com/invite/mint-blockchain) 82 | -------------------------------------------------------------------------------- /staking/generate_nginx_config.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | 4 | cat < /etc/nginx/nginx.conf 5 | worker_processes auto; 6 | 7 | events { 8 | worker_connections 1024; 9 | } 10 | 11 | http { 12 | include /etc/nginx/mime.types; 13 | default_type application/octet-stream; 14 | server_tokens off; 15 | 16 | 17 | limit_req_zone \$binary_remote_addr zone=ipfs_zone:10m rate=${QPS}; 18 | 19 | server { 20 | listen 8088; 21 | 22 | location /ipfs { 23 | proxy_pass http://ipfs:8080; 24 | proxy_set_header Host \$host; 25 | proxy_set_header X-Real-IP \$remote_addr; 26 | proxy_set_header X-Forwarded-For \$proxy_add_x_forwarded_for; 27 | 28 | 29 | limit_req zone=ipfs_zone burst=10 nodelay; 30 | } 31 | } 32 | } 33 | EOF 34 | -------------------------------------------------------------------------------- /testnet-sepolia/.env: -------------------------------------------------------------------------------- 1 | OP_GETH_SEQUENCER_HTTP=https://rpc-mint-sepolia-testnet-ijtsrc4ffq.t.conduit.xyz 2 | OP_NODE_P2P_BOOTNODES=enode://4f9fab0e7a3e0478db1520e5371067b6185fc6020e6c67684173bc16adcb24d173102dc7fb624c6882fc55022a3125671f3fc95d15cdb32ae46c6829a4615e69@34.105.1.251:9222?discport=30301,enode://d25ce99435982b04d60c4b41ba256b84b888626db7bee45a9419382300fbe907359ae5ef250346785bff8d3b9d07cd3e017a27e2ee3cfda3bcbb0ba762ac9674@bootnode.conduit.xyz:0?discport=30301,enode://2d4e7e9d48f4dd4efe9342706dd1b0024681bd4c3300d021f86fc75eab7865d4e0cbec6fbc883f011cfd6a57423e7e2f6e104baad2b744c3cafaec6bc7dc92c1@34.65.43.171:0?discport=30305,enode://9d7a3efefe442351217e73b3a593bcb8efffb55b4807699972145324eab5e6b382152f8d24f6301baebbfb5ecd4127bd3faab2842c04cd432bdf50ba092f6645@34.65.109.126:0?discport=30305 3 | OP_NODE_P2P_STATIC=/ip4/34.105.1.251/tcp/9222/p2p/16Uiu2HAmJ1omctszs1oEPcYQaWHegT9T4fFTbwEaF4Q5n7kVig2L 4 | 5 | # [recommended] replace with your preferred L1 (Ethereum, not Conduit) node RPC URL: 6 | OP_NODE_L1_ETH_RPC= 7 | OP_NODE_L1_BEACON= -------------------------------------------------------------------------------- /testnet-sepolia/op-geth-entrypoint: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | set -eu 3 | 4 | VERBOSITY=${GETH_VERBOSITY:-3} 5 | GETH_DATA_DIR=/data 6 | GETH_CHAINDATA_DIR="$GETH_DATA_DIR/geth/chaindata" 7 | OP_GETH_GENESIS_FILE_PATH="${OP_GETH_GENESIS_FILE_PATH:-/genesis.json}" 8 | CHAIN_ID=$(jq -r .config.chainId < "$OP_GETH_GENESIS_FILE_PATH") 9 | RPC_PORT="${RPC_PORT:-8545}" 10 | WS_PORT="${WS_PORT:-8546}" 11 | AUTHRPC_PORT="${AUTHRPC_PORT:-8551}" 12 | METRICS_PORT="${METRICS_PORT:-6060}" 13 | HOST_IP="0.0.0.0" 14 | P2P_PORT="${P2P_PORT:-30303}" 15 | ADDITIONAL_ARGS="" 16 | 17 | mkdir -p $GETH_DATA_DIR 18 | 19 | if [ ! -d "$GETH_CHAINDATA_DIR" ]; then 20 | echo "$GETH_CHAINDATA_DIR missing, running init" 21 | echo "Initializing genesis." 22 | geth --verbosity="$VERBOSITY" init \ 23 | --datadir="$GETH_DATA_DIR" \ 24 | --state.scheme=hash \ 25 | "$OP_GETH_GENESIS_FILE_PATH" 26 | else 27 | echo "$GETH_CHAINDATA_DIR exists." 28 | fi 29 | 30 | echo "$CONDUIT_OP_NODE_L2_ENGINE_AUTH_RAW" > "$OP_NODE_L2_ENGINE_AUTH" 31 | 32 | if [ "${OP_GETH_ETH_STATS+x}" = x ]; then 33 | ADDITIONAL_ARGS="$ADDITIONAL_ARGS --ethstats=$OP_GETH_ETH_STATS" 34 | fi 35 | 36 | if [ "${OP_GETH_ALLOW_UNPROTECTED_TXS+x}" = x ]; then 37 | ADDITIONAL_ARGS="$ADDITIONAL_ARGS --rpc.allow-unprotected-txs=$OP_GETH_ALLOW_UNPROTECTED_TXS" 38 | fi 39 | 40 | if [ "${CHAIN_ID}" = "919" ]; then 41 | ADDITIONAL_ARGS="$ADDITIONAL_ARGS --rollup.superchain-upgrades --op-network mode-sepolia --rollup.halt=major" 42 | fi 43 | 44 | if [ "${CHAIN_ID}" = "34443" ]; then 45 | ADDITIONAL_ARGS="$ADDITIONAL_ARGS --override.canyon=1704992401 --rollup.halt=major" 46 | fi 47 | 48 | if [ "${CHAIN_ID}" = "999999999" ]; then 49 | ADDITIONAL_ARGS="$ADDITIONAL_ARGS --rollup.superchain-upgrades --op-network zora-sepolia --rollup.halt=major" 50 | fi 51 | 52 | if [ "${CHAIN_ID}" = "7777777" ]; then 53 | ADDITIONAL_ARGS="$ADDITIONAL_ARGS --rollup.superchain-upgrades --op-network zora-mainnet --rollup.halt=major" 54 | fi 55 | 56 | if [ "${CHAIN_ID}" = "58008" ]; then 57 | ADDITIONAL_ARGS="$ADDITIONAL_ARGS --rollup.superchain-upgrades --op-network pgn-sepolia --rollup.halt=major" 58 | fi 59 | 60 | if [ "${CHAIN_ID}" = "424" ]; then 61 | ADDITIONAL_ARGS="$ADDITIONAL_ARGS --rollup.superchain-upgrades --op-network pgn-mainnet --rollup.halt=major" 62 | fi 63 | 64 | exec geth \ 65 | --datadir="$GETH_DATA_DIR" \ 66 | --verbosity="$VERBOSITY" \ 67 | --http \ 68 | --http.corsdomain="*" \ 69 | --http.vhosts="*" \ 70 | --http.addr=0.0.0.0 \ 71 | --http.port="$RPC_PORT" \ 72 | --http.api=web3,debug,eth,net,engine \ 73 | --authrpc.addr=0.0.0.0 \ 74 | --authrpc.port="$AUTHRPC_PORT" \ 75 | --authrpc.vhosts="*" \ 76 | --authrpc.jwtsecret="$OP_NODE_L2_ENGINE_AUTH" \ 77 | --ws \ 78 | --ws.addr=0.0.0.0 \ 79 | --ws.port="$WS_PORT" \ 80 | --ws.origins="*" \ 81 | --ws.api=debug,eth,net,engine \ 82 | --metrics \ 83 | --metrics.addr=0.0.0.0 \ 84 | --metrics.port="$METRICS_PORT" \ 85 | --syncmode=full \ 86 | --gcmode=archive \ 87 | --nodiscover \ 88 | --maxpeers=100 \ 89 | --nat=extip:$HOST_IP \ 90 | --networkid="$CHAIN_ID" \ 91 | --rollup.sequencerhttp="$OP_GETH_SEQUENCER_HTTP" \ 92 | --port="$P2P_PORT" \ 93 | --state.scheme=hash \ 94 | --override.fjord=1716998400 \ 95 | --override.granite=1723478400 \ 96 | --override.holocene=1732633200 \ 97 | --override.isthmus=1744905600 \ 98 | $ADDITIONAL_ARGS # intentionally unquoted 99 | -------------------------------------------------------------------------------- /testnet-sepolia/op-geth.Dockerfile: -------------------------------------------------------------------------------- 1 | ARG OP_GETH_VERSION=v1.101503.4 2 | FROM us-docker.pkg.dev/oplabs-tools-artifacts/images/op-geth:${OP_GETH_VERSION} 3 | 4 | RUN apk add --no-cache jq curl 5 | 6 | COPY --chmod=755 ./testnet-sepolia/op-geth-entrypoint /opt/conduit/bin/op-geth-entrypoint 7 | ENTRYPOINT ["/opt/conduit/bin/op-geth-entrypoint"] 8 | -------------------------------------------------------------------------------- /testnet-sepolia/op-node-entrypoint: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | set -eu 3 | 4 | # wait until local geth comes up (authed so will return 401 without token) 5 | until [ "$(curl -s -w '%{http_code}' -o /dev/null "${OP_NODE_L2_ENGINE_RPC//ws/http}")" -eq 401 ]; do 6 | echo "waiting for geth to be ready" 7 | sleep 5 8 | done 9 | 10 | # public-facing P2P node, advertise public IP address 11 | PUBLIC_IP=$(curl -s v4.ident.me) 12 | export OP_NODE_P2P_ADVERTISE_IP=$PUBLIC_IP 13 | CHAIN_ID=$(jq -r .config.chainId < "$OP_GETH_GENESIS_FILE_PATH") 14 | 15 | if [ "${CHAIN_ID}" = "919" ]; then 16 | export OP_NODE_ROLLUP_CONFIG="" 17 | export OP_NODE_NETWORK="mode-sepolia" 18 | fi 19 | 20 | if [ "${CHAIN_ID}" = "34443" ]; then 21 | export OP_NODE_ROLLUP_CONFIG="" 22 | export OP_NODE_NETWORK="mode-mainnet" 23 | fi 24 | 25 | if [ "${CHAIN_ID}" = "999999999" ]; then 26 | export OP_NODE_ROLLUP_CONFIG="" 27 | export OP_NODE_NETWORK="zora-sepolia" 28 | fi 29 | 30 | if [ "${CHAIN_ID}" = "7777777" ]; then 31 | export OP_NODE_ROLLUP_CONFIG="" 32 | export OP_NODE_NETWORK="zora-mainnet" 33 | fi 34 | 35 | if [ "${CHAIN_ID}" = "58008" ]; then 36 | export OP_NODE_ROLLUP_CONFIG="" 37 | export OP_NODE_NETWORK="pgn-sepolia" 38 | fi 39 | 40 | if [ "${CHAIN_ID}" = "424" ]; then 41 | export OP_NODE_ROLLUP_CONFIG="" 42 | export OP_NODE_NETWORK="pgn-mainnet" 43 | fi 44 | 45 | echo "$CONDUIT_OP_NODE_L2_ENGINE_AUTH_RAW" > "$OP_NODE_L2_ENGINE_AUTH" 46 | 47 | exec op-node \ 48 | --override.fjord=1716998400 \ 49 | --override.granite=1723478400 \ 50 | --override.holocene=1732633200 \ 51 | --override.pectrablobschedule=1742486400 \ 52 | --override.isthmus=1744905600 53 | -------------------------------------------------------------------------------- /testnet-sepolia/op-node.Dockerfile: -------------------------------------------------------------------------------- 1 | ARG OP_NODE_VERSION=v1.13.2 2 | FROM us-docker.pkg.dev/oplabs-tools-artifacts/images/op-node:${OP_NODE_VERSION} 3 | 4 | RUN apk add --no-cache jq curl 5 | 6 | COPY --chmod=755 ./testnet-sepolia/op-node-entrypoint /opt/conduit/bin/op-node-entrypoint 7 | ENTRYPOINT ["/opt/conduit/bin/op-node-entrypoint"] 8 | -------------------------------------------------------------------------------- /testnet-sepolia/rollup.json: -------------------------------------------------------------------------------- 1 | { 2 | "chain_op_config": { 3 | "eip1559Elasticity": 6, 4 | "eip1559Denominator": 50, 5 | "eip1559DenominatorCanyon": 250 6 | }, 7 | "genesis": { 8 | "l1": { 9 | "hash": "0xa524ce25afd8d0d2a3db4f8b83f2bd067236a6fa2453ffbd54213d264068751c", 10 | "number": 5645817 11 | }, 12 | "l2": { 13 | "hash": "0xdf018ef6eb34f7f003e00e4980aee2c2af56e7a5a865924d18cc775c02190deb", 14 | "number": 0 15 | }, 16 | "l2_time": 1712468664, 17 | "system_config": { 18 | "batcherAddr": "0xcca7de1de8a01ebf1a4bb466cfe0199ed3c82747", 19 | "overhead": "0x00000000000000000000000000000000000000000000000000000000000000bc", 20 | "scalar": "0x00000000000000000000000000000000000000000000000000000000000a6fe0", 21 | "gasLimit": 30000000 22 | } 23 | }, 24 | "block_time": 2, 25 | "max_sequencer_drift": 600, 26 | "seq_window_size": 3600, 27 | "channel_timeout": 300, 28 | "l1_chain_id": 11155111, 29 | "l2_chain_id": 1687, 30 | "regolith_time": 0, 31 | "canyon_time": 0, 32 | "delta_time": 0, 33 | "ecotone_time": 0, 34 | "batch_inbox_address": "0x8aac168a9212685296ee79b0fa2ffcbff294d963", 35 | "deposit_contract_address": "0x0f598afc1c303bf2d0ee82435b58c7b47bc56ed1", 36 | "l1_system_config_address": "0x6f1ee2ac9b51a3bef3aceb3bfced761c01b414ec", 37 | "protocol_versions_address": "0x0000000000000000000000000000000000000000" 38 | } 39 | 40 | -------------------------------------------------------------------------------- /upgrades/Granite-mainnet.md: -------------------------------------------------------------------------------- 1 | ## Granite upgrade 2 | ``` 3 | The Granite upgrade on Mint Mainnet will be activated at 1726070401 - Wed 11 Sep 2024 16:00:01 UTC 4 | ``` 5 | 6 | Node operators need to update your client before the activation date. 7 | 8 | #### step 1: stop node 9 | ``` 10 | docker compose down 11 | ``` 12 | 13 | #### step 2: pull latest repo 14 | ``` 15 | git pull 16 | ``` 17 | 18 | #### step 3: confirm flag config 19 | ``` 20 | Confirm that both op-geth-entrypoint and op-node-entrypoint are set with --override.fjord=1720627201 and --override.granite=1726070401 21 | 22 | Confirm that da_challenge_address, da_challenge_window, da_resolve_window, and use_plasma have been deleted from rollup.json 23 | ``` 24 | 25 | #### step 4: start node 26 | ``` 27 | docker compose up --build 28 | ``` 29 | 30 | [Details of Granite upgrade](https://docs.optimism.io/builders/notices/granite-changes) 31 | 32 | | Network | op-node | op-geth | 33 | | ------- | ------- | ------- | 34 | | Mint Mainnet | v1.9.1 | v1.101408.0 | 35 | -------------------------------------------------------------------------------- /upgrades/Holocene-mainnet.md: -------------------------------------------------------------------------------- 1 | ## Holocene Mainnet upgrade 2 | ``` 3 | The Holocene upgrade for the Mainnet Superchain is optimistically scheduled for Thu 9 Jan 2025 18:00:01 UTC. 4 | ``` 5 | 6 | [Details of Holocene Mainnet upgrade](https://docs.optimism.io/builders/notices/holocene-changes) 7 | 8 | Node operators need to update your client before the activation date. 9 | 10 | #### step 1: stop node 11 | ``` 12 | docker compose down 13 | ``` 14 | 15 | #### step 2: pull latest repo 16 | ``` 17 | git pull 18 | ``` 19 | 20 | #### step 3: confirm flag config 21 | ``` 22 | Confirm that both op-geth-entrypoint and op-node-entrypoint are configured with the following flags:--override.fjord=1720627201, --override.granite=1726070401 and --override.holocene=1736445601. 23 | 24 | ``` 25 | 26 | #### step 4: start node 27 | ``` 28 | docker compose up --build 29 | ``` 30 | 31 | If you can't follow the upgrade steps, please confirm the following: 32 | * run op-geth >= v1.101411.2 33 | * run op-node >= v1.10.0 34 | * set on both the flag --override.holocene=1736445601 35 | 36 | 37 | | Network | op-node | op-geth | 38 | | ------- | ------- | ------- | 39 | | Mint Mainnet | v1.10.0 | v1.101411.2 | 40 | -------------------------------------------------------------------------------- /upgrades/Holocene-sepolia.md: -------------------------------------------------------------------------------- 1 | ## Holocene sepolia upgrade 2 | ``` 3 | The Holocene upgrade for the Sepolia Superchain will be activated at Tue Nov 26 at 15:00:00 UTC (1732633200). 4 | ``` 5 | 6 | Node operators need to update your client before the activation date. 7 | 8 | #### step 1: stop node 9 | ``` 10 | docker compose -f docker-compose-testnet-sepolia.yml down 11 | ``` 12 | 13 | #### step 2: pull latest repo 14 | ``` 15 | git pull 16 | ``` 17 | 18 | #### step 3: confirm flag config 19 | ``` 20 | Confirm that both op-geth-entrypoint and op-node-entrypoint are configured with the following flags: --override.fjord=1716998400, --override.granite=1723478400, and --override.holocene=1732633200. 21 | 22 | Ensure that channel_timeout_granite and use_plasma have been removed from rollup.json. 23 | ``` 24 | 25 | #### step 4: start node 26 | ``` 27 | docker compose -f docker-compose-testnet-sepolia.yml up --build -d 28 | ``` 29 | 30 | [Details of Holocene sepolia upgrade](https://docs.optimism.io/builders/notices/holocene-changes) 31 | 32 | | Network | op-node | op-geth | 33 | | ------- | ------- | ------- | 34 | | Mint Sepolia | v1.10.0 | v1.101411.2 | -------------------------------------------------------------------------------- /upgrades/Isthumus-mainnet.md: -------------------------------------------------------------------------------- 1 | ## Isthumus mainnet upgrade 2 | ``` 3 | The Isthumus upgrade for the Mainnet Superchain will be activated at Fri May 9 2025 16:00:01 UTC (1746806401) 4 | ``` 5 | 6 | Node operators need to update your client before the activation date. 7 | 8 | #### step 1: stop node 9 | ``` 10 | docker compose -f docker-compose-mainnet.yml down 11 | ``` 12 | 13 | #### step 2: pull latest repo 14 | ``` 15 | git pull 16 | ``` 17 | 18 | #### step 3: start node 19 | ``` 20 | docker compose -f docker-compose-mainnet.yml up --build -d 21 | ``` 22 | 23 | #### Main Changes 24 | 1. add activation-timestamp `--override.isthmus=1746806401` for both op-node and op-geth 25 | 26 | 2. upgrade client version: 27 | * op-node `v1.13.2` 28 | * op-geth `v1.101503.4` 29 | 30 | [Details of upgrade](https://docs.optimism.io/notices/upgrade-15) 31 | -------------------------------------------------------------------------------- /upgrades/Isthumus-sepolia.md: -------------------------------------------------------------------------------- 1 | ## Isthumus sepolia upgrade 2 | ``` 3 | The Isthumus upgrade for the Sepolia Superchain will be activated at Thu Apr 17 16:00:00 UTC 2025 (1744905600) . 4 | ``` 5 | 6 | Node operators need to update your client before the activation date. 7 | 8 | #### step 1: stop node 9 | ``` 10 | docker compose -f docker-compose-testnet-sepolia.yml down 11 | ``` 12 | 13 | #### step 2: pull latest repo 14 | ``` 15 | git pull 16 | ``` 17 | 18 | #### step 3: start node 19 | ``` 20 | docker compose -f docker-compose-testnet-sepolia.yml up --build -d 21 | ``` 22 | 23 | #### Main Changes 24 | 1. add activation-timestamp `--override.isthmus=1744905600` for both op-node and op-geth 25 | 26 | 2. upgrade client version: 27 | * op-node `v1.13.2` 28 | * op-geth `v1.101503.4` 29 | 30 | [Details of upgrade](https://docs.optimism.io/notices/upgrade-15) 31 | -------------------------------------------------------------------------------- /upgrades/Pectra-sepolia.md: -------------------------------------------------------------------------------- 1 | ## Pectra sepolia upgrade 2 | ``` 3 | The Pectra upgrade for the Sepolia Superchain will be activated at Mar 20 at 04:00:00 UTC (1742486400). 4 | ``` 5 | 6 | Node operators need to update your client before the activation date. 7 | 8 | #### step 1: stop node 9 | ``` 10 | docker compose -f docker-compose-testnet-sepolia.yml down 11 | ``` 12 | 13 | #### step 2: pull latest repo 14 | ``` 15 | git pull 16 | ``` 17 | 18 | #### step 3: confirm flag config 19 | 20 | Check whether the rollup.json file has added the following content: 21 | 22 | ``` 23 | "chain_op_config": { 24 | "eip1559Elasticity": 6, 25 | "eip1559Denominator": 50, 26 | "eip1559DenominatorCanyon": 250 27 | } 28 | ``` 29 | 30 | #### step 4: start node 31 | ``` 32 | docker compose -f docker-compose-testnet-sepolia.yml up --build -d 33 | ``` 34 | 35 | [Details of Pectra sepolia upgrade](https://docs.optimism.io/notices/pectra-changes) 36 | 37 | | Network | op-node | op-geth | 38 | | ------- | ------- | ------- | 39 | | Mint Sepolia | v1.11.1 | v1.101500.0 | --------------------------------------------------------------------------------