├── .gitignore ├── envs ├── mainnet │ ├── sp1-prover-proxy.env │ ├── prover.env │ ├── geth.env │ ├── sp1-witness-gen.env │ ├── prover-proxy.env │ ├── node.env │ └── validator.env └── sepolia │ ├── sp1-prover-proxy.env │ ├── prover.env │ ├── geth.env │ ├── sp1-witness-gen.env │ ├── prover-proxy.env │ ├── node.env │ └── validator.env ├── config ├── monitoring │ ├── provisioning │ │ ├── datasources │ │ │ └── default.yaml │ │ └── dashboards │ │ │ ├── default.yaml │ │ │ └── dashbaord-validator.json │ ├── prometheus.yml │ └── grafana.ini ├── mainnet │ └── rollup.json └── sepolia │ └── rollup.json ├── setup_prover.sh ├── rollback.sh ├── startup.sh ├── sync_block.sh ├── README.md ├── upgrades ├── v1.0.1.md ├── rollback.md ├── v1.3.2.md ├── v1.1.0.md ├── v1.0.0.md ├── v1.3.4.md ├── v2.0.0+geth.v0.5.4.md ├── v1.0.2.md ├── v2.1.2+geth.v0.6.3.md ├── v1.2.1.md ├── v0.3.0.md ├── v1.4.3.md ├── v1.4.2.md ├── v1.3.1.md ├── v2.0.0.md └── v2.1.1+geth.v0.6.1.md ├── scripts └── entrypoint.sh ├── docker-compose-mainnet.yml ├── docker-compose-sepolia.yml ├── .env.mainnet └── .env.sepolia /.gitignore: -------------------------------------------------------------------------------- 1 | keys 2 | 3 | # local env 4 | .env 5 | 6 | .DS_Store -------------------------------------------------------------------------------- /envs/mainnet/sp1-prover-proxy.env: -------------------------------------------------------------------------------- 1 | SP1_PRIVATE_KEY=${SP1_PROVER_PROXY__PRIVATE_KEY} 2 | -------------------------------------------------------------------------------- /envs/sepolia/sp1-prover-proxy.env: -------------------------------------------------------------------------------- 1 | SP1_PRIVATE_KEY=${SP1_PROVER_PROXY__PRIVATE_KEY} 2 | -------------------------------------------------------------------------------- /envs/mainnet/prover.env: -------------------------------------------------------------------------------- 1 | CHAIN_ID=255 2 | RUST_LOG=info 3 | RUST_BACKTRACE=1 4 | PROVE_TYPE=block 5 | RUST_MIN_STACK=100000000 6 | -------------------------------------------------------------------------------- /envs/sepolia/prover.env: -------------------------------------------------------------------------------- 1 | CHAIN_ID=2358 2 | RUST_LOG=info 3 | RUST_BACKTRACE=1 4 | PROVE_TYPE=block 5 | RUST_MIN_STACK=100000000 6 | -------------------------------------------------------------------------------- /config/monitoring/provisioning/datasources/default.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: 1 2 | datasources: 3 | - name: Prometheus 4 | type: prometheus 5 | url: http://prometheus:9090 6 | isDefault: true 7 | -------------------------------------------------------------------------------- /config/monitoring/provisioning/dashboards/default.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: 1 2 | providers: 3 | - name: Default 4 | folder: Kroma 5 | type: file 6 | options: 7 | path: /etc/grafana/provisioning/dashboards -------------------------------------------------------------------------------- /envs/mainnet/geth.env: -------------------------------------------------------------------------------- 1 | CHAIN_ID=255 2 | BOOT_NODES=${KROMA_GETH__BOOT_NODES} 3 | GETH_MINER_RECOMMIT=100ms 4 | HISTORICAL_RPC=${KROMA_GETH__HISTORICAL_RPC} 5 | DISABLE_MIGRATION=${KROMA_GETH__DISABLE_MPT_MIGRATION} 6 | -------------------------------------------------------------------------------- /envs/sepolia/geth.env: -------------------------------------------------------------------------------- 1 | CHAIN_ID=2358 2 | BOOT_NODES=${KROMA_GETH__BOOT_NODES} 3 | GETH_MINER_RECOMMIT=100ms 4 | HISTORICAL_RPC=${KROMA_GETH__HISTORICAL_RPC} 5 | DISABLE_MIGRATION=${KROMA_GETH__DISABLE_MPT_MIGRATION} 6 | -------------------------------------------------------------------------------- /config/monitoring/prometheus.yml: -------------------------------------------------------------------------------- 1 | global: 2 | scrape_interval: 5s 3 | evaluation_interval: 5s 4 | 5 | scrape_configs: 6 | - job_name: 'kroma' 7 | static_configs: 8 | - targets: 9 | - kroma-validator:7300 -------------------------------------------------------------------------------- /config/monitoring/grafana.ini: -------------------------------------------------------------------------------- 1 | [server] 2 | http_port = 3000 3 | 4 | [security] 5 | admin_user = admin 6 | admin_password = password 7 | 8 | [paths] 9 | data = /var/lib/grafana 10 | 11 | [provisioning] 12 | enabled = true 13 | config_sources = /etc/grafana/provisioning 14 | -------------------------------------------------------------------------------- /envs/mainnet/sp1-witness-gen.env: -------------------------------------------------------------------------------- 1 | L1_RPC=${SP1_WITNESS_GEN__L1_RPC} 2 | L1_BEACON_RPC=${SP1_WITNESS_GEN__L1_BEACON_RPC} 3 | L2_RPC=${SP1_WITNESS_GEN__L2_RPC} 4 | L2_NODE_RPC=${SP1_WITNESS_GEN__L2_NODE_RPC} 5 | 6 | MAX_BATCH_POST_DELAY_MIN=${SP1_WITNESS_GEN__MAX_BATCH_POST_DELAY_MIN} 7 | SKIP_SIMULATION=${SP1_WITNESS_GEN__SKIP_SIMULATION} 8 | -------------------------------------------------------------------------------- /envs/sepolia/sp1-witness-gen.env: -------------------------------------------------------------------------------- 1 | L1_RPC=${SP1_WITNESS_GEN__L1_RPC} 2 | L1_BEACON_RPC=${SP1_WITNESS_GEN__L1_BEACON_RPC} 3 | L2_RPC=${SP1_WITNESS_GEN__L2_RPC} 4 | L2_NODE_RPC=${SP1_WITNESS_GEN__L2_NODE_RPC} 5 | 6 | MAX_BATCH_POST_DELAY_MIN=${SP1_WITNESS_GEN__MAX_BATCH_POST_DELAY_MIN} 7 | SKIP_SIMULATION=${SP1_WITNESS_GEN__SKIP_SIMULATION} 8 | -------------------------------------------------------------------------------- /envs/mainnet/prover-proxy.env: -------------------------------------------------------------------------------- 1 | JSONRPC_ADDR=0.0.0.0 2 | JSONRPC_PORT=6000 3 | PROOF_BASE_DIR=${KROMA_PROVER_PROXY__PROVER_BASE_DIR} 4 | AWS_PROVER_INSTANCE_ID=${KROMA_PROVER_PROXY__PROVER_INSTANCE_ID} 5 | AWS_PROVER_ADDRESS_TYPE=${KROMA_PROVER_PROXY__PROVER_ADDRESS_TYPE} 6 | AWS_PROVER_URL_SCHEMA=${KROMA_PROVER_PROXY__PROVER_URL_SCHEMA} 7 | AWS_PROVER_JSONRPC_PORT=${KROMA_PROVER_PROXY__PROVER_RPC_PORT} 8 | AWS_REGION=${KROMA_PROVER_PROXY__AWS_REGION} 9 | AWS_ACCESS_KEY_ID=${KROMA_PROVER_PROXY__AWS_ACCESS_KEY_ID} 10 | AWS_SECRET_ACCESS_KEY=${KROMA_PROVER_PROXY__AWS_SECRET_ACCESS_KEY} 11 | -------------------------------------------------------------------------------- /envs/sepolia/prover-proxy.env: -------------------------------------------------------------------------------- 1 | JSONRPC_ADDR=0.0.0.0 2 | JSONRPC_PORT=6000 3 | PROOF_BASE_DIR=${KROMA_PROVER_PROXY__PROVER_BASE_DIR} 4 | AWS_PROVER_INSTANCE_ID=${KROMA_PROVER_PROXY__PROVER_INSTANCE_ID} 5 | AWS_PROVER_ADDRESS_TYPE=${KROMA_PROVER_PROXY__PROVER_ADDRESS_TYPE} 6 | AWS_PROVER_URL_SCHEMA=${KROMA_PROVER_PROXY__PROVER_URL_SCHEMA} 7 | AWS_PROVER_JSONRPC_PORT=${KROMA_PROVER_PROXY__PROVER_RPC_PORT} 8 | AWS_REGION=${KROMA_PROVER_PROXY__AWS_REGION} 9 | AWS_ACCESS_KEY_ID=${KROMA_PROVER_PROXY__AWS_ACCESS_KEY_ID} 10 | AWS_SECRET_ACCESS_KEY=${KROMA_PROVER_PROXY__AWS_SECRET_ACCESS_KEY} 11 | -------------------------------------------------------------------------------- /setup_prover.sh: -------------------------------------------------------------------------------- 1 | printf "\nSetting up kzg_params...\n" 2 | sudo apt install axel -y 3 | degree=21 4 | agg_degree=26 5 | 6 | params_dir="params/kzg_params" 7 | mkdir -p "$params_dir" 8 | 9 | degree_output_file="$params_dir"/params"${degree}" 10 | agg_degree_output_file="$params_dir"/params"${agg_degree}" 11 | rm -f "$degree_output_file" 12 | rm -f "$agg_degree_output_file" 13 | 14 | axel -ac https://trusted-setup-halo2kzg.s3.eu-central-1.amazonaws.com/perpetual-powers-of-tau-raw-"$degree" -o "$degree_output_file" 15 | axel -ac https://trusted-setup-halo2kzg.s3.eu-central-1.amazonaws.com/perpetual-powers-of-tau-raw-"$agg_degree" -o "$agg_degree_output_file" 16 | printf "\nInstalled kzg_params \n" -------------------------------------------------------------------------------- /envs/mainnet/node.env: -------------------------------------------------------------------------------- 1 | NODE_L1_ETH_RPC=${KROMA_NODE__L1_RPC_ENDPOINT} 2 | NODE_L1_BEACON=${KROMA_NODE__L1_BEACON_ENDPOINT} 3 | NODE_L2_ENGINE_RPC=http://kroma-geth:8551 4 | 5 | NODE_L2_ENGINE_AUTH=/.kroma/keys/jwt-secret.txt 6 | NODE_ROLLUP_CONFIG=/.kroma/config/rollup.json 7 | 8 | NODE_METRICS_ADDR=0.0.0.0 9 | NODE_METRICS_PORT=7300 10 | NODE_METRICS_ENABLED=true 11 | NODE_RPC_ADDR=0.0.0.0 12 | NODE_RPC_PORT=8545 13 | NODE_RPC_ENABLE_ADMIN=true 14 | NODE_SEQUENCER_ENABLED=false 15 | NODE_SEQUENCER_L1_CONFS=4 16 | NODE_VERIFIER_L1_CONFS=4 17 | NODE_P2P_LISTEN_IP=0.0.0.0 18 | NODE_P2P_LISTEN_TCP_PORT=9003 19 | NODE_P2P_LISTEN_UDP_PORT=9003 20 | NODE_P2P_PRIV_PATH=/.kroma/keys/p2p-node-key.txt 21 | NODE_P2P_SECURITY=none 22 | NODE_P2P_BOOTNODES=${KROMA_NODE__BOOT_NODES} 23 | -------------------------------------------------------------------------------- /envs/sepolia/node.env: -------------------------------------------------------------------------------- 1 | NODE_L1_ETH_RPC=${KROMA_NODE__L1_RPC_ENDPOINT} 2 | NODE_L1_BEACON=${KROMA_NODE__L1_BEACON_ENDPOINT} 3 | NODE_L2_ENGINE_RPC=http://kroma-geth:8551 4 | 5 | NODE_L2_ENGINE_AUTH=/.kroma/keys/jwt-secret.txt 6 | NODE_ROLLUP_CONFIG=/.kroma/config/rollup.json 7 | 8 | NODE_METRICS_ADDR=0.0.0.0 9 | NODE_METRICS_PORT=7300 10 | NODE_METRICS_ENABLED=true 11 | NODE_RPC_ADDR=0.0.0.0 12 | NODE_RPC_PORT=8545 13 | NODE_RPC_ENABLE_ADMIN=true 14 | NODE_SEQUENCER_ENABLED=false 15 | NODE_SEQUENCER_L1_CONFS=4 16 | NODE_VERIFIER_L1_CONFS=4 17 | NODE_P2P_LISTEN_IP=0.0.0.0 18 | NODE_P2P_LISTEN_TCP_PORT=9003 19 | NODE_P2P_LISTEN_UDP_PORT=9003 20 | NODE_P2P_PRIV_PATH=/.kroma/keys/p2p-node-key.txt 21 | NODE_P2P_SECURITY=none 22 | NODE_P2P_BOOTNODES=${KROMA_NODE__BOOT_NODES} 23 | -------------------------------------------------------------------------------- /rollback.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | SNAPSHOT_ORIGIN=https://snapshot.kroma.network/rollback/snapshot.tar.gz 4 | KROMA_DB_PATH=/.kroma/db/geth 5 | 6 | docker stop kroma-node 7 | docker exec -it kroma-geth sh -c "rm -rf ${KROMA_DB_PATH}/LOCK" 8 | docker exec -it kroma-geth sh -c "rm -rf ${KROMA_DB_PATH}/blobpool" 9 | docker exec -it kroma-geth sh -c "rm -rf ${KROMA_DB_PATH}/chaindata" 10 | docker exec -it kroma-geth sh -c "rm -rf ${KROMA_DB_PATH}/lightchaindata" 11 | docker exec -it kroma-geth sh -c "rm -rf ${KROMA_DB_PATH}/nodes" 12 | docker exec -it kroma-geth sh -c "rm -rf ${KROMA_DB_PATH}/transactions.rlp" 13 | 14 | docker exec -it kroma-geth sh -c "cd /.kroma/db/geth && wget -O - ${SNAPSHOT_ORIGIN} | tar -xvz" 15 | docker restart kroma-geth 16 | sleep 5 17 | docker start kroma-node -------------------------------------------------------------------------------- /startup.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | NETWORK_NAME=$1 3 | 4 | # Check if proper argument is provided for network 5 | if [[ -z $NETWORK_NAME ]]; then 6 | echo "Error: Argument not provided. Usage: $0 . Allowed values are 'sepolia' or 'mainnet'." 7 | exit 1 8 | elif [[ $NETWORK_NAME != "sepolia" && $NETWORK_NAME != "mainnet" ]]; then 9 | echo "Error: Invalid network. Allowed values are 'sepolia' or 'mainnet'." 10 | exit 1 11 | fi 12 | 13 | # Create a directory to manage the key information needed to operate the node. 14 | mkdir -p keys 15 | 16 | # Generate key used in kroma-fullnode(kroma-geth, kroma-node) 17 | openssl rand -hex 32 > keys/jwt-secret.txt 18 | openssl rand -hex 32 > keys/p2p-node-key.txt 19 | 20 | # Create ENV specified by user. 21 | cp .env.$NETWORK_NAME .env 22 | -------------------------------------------------------------------------------- /sync_block.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | NETWORK_NAME=$1 3 | 4 | # Check if proper argument is provided for network 5 | if [[ -z $NETWORK_NAME ]]; then 6 | echo "Error: Argument not provided. Usage: $0 . Allowed values are 'sepolia' or 'mainnet'." 7 | exit 1 8 | elif [[ $NETWORK_NAME == "sepolia" ]]; then 9 | SNAPSHOT_ORIGIN=https://snapshot.sepolia.kroma.network/latest/snapshot.tar.gz 10 | elif [[ $NETWORK_NAME == "mainnet" ]]; then 11 | SNAPSHOT_ORIGIN=https://snapshot.kroma.network/latest/snapshot.tar.gz 12 | else 13 | echo "Error: Invalid network. Allowed values are 'sepolia' or 'mainnet'." 14 | exit 1 15 | fi 16 | 17 | KROMA_DB_PATH=/.kroma/db/geth 18 | 19 | docker stop kroma-node 20 | docker exec -it kroma-geth sh -c "rm -rf ${KROMA_DB_PATH}/chaindata" 21 | docker exec -it kroma-geth sh -c "cd /.kroma/db/geth && wget -O - ${SNAPSHOT_ORIGIN} | tar -xvz" 22 | 23 | docker restart kroma-geth 24 | sleep 5 25 | docker start kroma-node 26 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # About kroma-up 2 | 3 | kroma-up is a git repository that contains all of the necessary features to run a node on Kroma. 4 | Kroma comprises three types of nodes: sequencer, validator, and full node. Currently, validator and full nodes can be run by anyone. 5 | 6 | To learn more about how to run a full node or a validator node on Kroma, please refer to the links below: 7 | 8 | - [Overall Guide on Running Nodes on Kroma](https://docs.kroma.network/builders/node-operators) 9 | - [How to run a full node](https://docs.kroma.network/builders/node-operators/running-a-full-node) 10 | - [How to run a validator node](https://docs.kroma.network/builders/node-operators/running-a-kroma-v2-validator-node) 11 | - [How to sync blocks using a snapshot](https://docs.kroma.network/builders/node-operators/how-to-sync-blocks-using-a-snapshot) 12 | - [How to migrate to Kroma MPT](https://docs.kroma.network/builders/node-operators/kroma-mpt-migration-guide) 13 | - [FAQ](https://docs.kroma.network/builders/node-operators/faq) 14 | -------------------------------------------------------------------------------- /upgrades/v1.0.1.md: -------------------------------------------------------------------------------- 1 | # Kroma `v1.0.1` Upgrade Instructions 2 | 3 | This document provides instructions to upgrade from Kroma `v1.0.0` to `v1.0.1`. 4 | **No changes in flags have been made on this release, so you can simply change the tag for upgrade.** 5 | For more details about `v1.0.1`, please refer the [release note](https://github.com/kroma-network/kroma/releases/tag/v1.0.1). 6 | 7 | ## Guides for upgrade 8 | 9 | ### Stop Kroma 10 | 11 | For upgrade, stop your Kroma full node or validator. 12 | ```bash 13 | # for full node 14 | docker compose --profile fullnode down 15 | 16 | # for validator 17 | docker compose --profile validator down 18 | ``` 19 | 20 | ### Common 21 | 22 | You need to update your `.env` file. 23 | 24 | First, update the tag of `kroma-node` and `kroma-validator` docker image. 25 | ``` 26 | IMAGE_TAG__KROMA_NODE=v1.0.1 27 | IMAGE_TAG__KROMA_VALIDATOR=v1.0.1 28 | ``` 29 | 30 | ### Start Kroma 31 | 32 | You can now start Kroma full node or validator with a new version. 33 | 34 | ```bash 35 | # for full node 36 | docker compose --profile fullnode up -d 37 | 38 | # for validator 39 | docker compose --profile validator up -d 40 | ``` 41 | -------------------------------------------------------------------------------- /upgrades/rollback.md: -------------------------------------------------------------------------------- 1 | # Rollback Instructions to `v1.3.1` 2 | 3 | The mainnet has experienced a fork starting from block #8171899 due to the recent upgrade to version `v1.3.2`. This 4 | update included an enhanced ZKTrie component with the geth version `v0.4.4`. 5 | 6 | To prevent further complications and potential damage, we have decided to undertake a rollback of our nodes including 7 | the sequencer and the validator node to block #8171899. This rollback will also involve downgrading our client to the 8 | previous version, v1.3.1. 9 | 10 | This document provides an instruction for rollback to `v1.3.1`. 11 | 12 | ## Pull the latest version of kroma-up 13 | 14 | For rollback, pull the latest version of kroma-up 15 | 16 | ```bash 17 | git pull origin main 18 | ``` 19 | 20 | ## Downgrade the version 21 | 22 | Also, downgrade the version of kroma and kroma-geth in `.env` file. 23 | 24 | ``` 25 | IMAGE_TAG__KROMA_GETH=v0.4.3 26 | IMAGE_TAG__KROMA_NODE=v1.3.1 27 | IMAGE_TAG__KROMA_VALIDATOR=v1.3.1 28 | ``` 29 | 30 | ## Rollback the node 31 | 32 | First grant execution permissions. 33 | ```bash 34 | chmod +x rollback.sh 35 | ``` 36 | Then, rollback the node by executing the below script. 37 | 38 | ```bash 39 | ./rollback.sh 40 | ``` 41 | -------------------------------------------------------------------------------- /upgrades/v1.3.2.md: -------------------------------------------------------------------------------- 1 | # Kroma `v1.3.2` Upgrade Instructions 2 | 3 | This document provides instructions to upgrade from Kroma `v1.3.1` to `v1.3.2`. 4 | **No changes in flags have been made on this release, so you can simply change the tag for upgrade.** 5 | For more details about `v1.3.2`, please refer the [release note](https://github.com/kroma-network/kroma/releases/tag/v1.3.2). 6 | This upgrade mainly includes activation of KromaZKTrie for better performance in terms of block processing. 7 | 8 | ## Guides for upgrade 9 | 10 | ### Stop Kroma 11 | 12 | For upgrade, stop your Kroma full node or validator. 13 | ```bash 14 | # for full node 15 | docker compose --profile fullnode down 16 | 17 | # for validator 18 | docker compose --profile validator down 19 | ``` 20 | 21 | ### Common 22 | 23 | You need to update your `.env` file. 24 | 25 | First, update the tag of `kroma-node` and `kroma-validator` docker image. 26 | ``` 27 | IMAGE_TAG__KROMA_GETH=v0.4.4 28 | IMAGE_TAG__KROMA_NODE=v1.3.2 29 | IMAGE_TAG__KROMA_VALIDATOR=v1.3.2 30 | ``` 31 | 32 | ### Start Kroma 33 | 34 | You can now start Kroma full node or validator with a new version. 35 | 36 | ```bash 37 | # for full node 38 | docker compose --profile fullnode up -d 39 | 40 | # for validator 41 | docker compose --profile validator up -d 42 | ``` 43 | -------------------------------------------------------------------------------- /upgrades/v1.1.0.md: -------------------------------------------------------------------------------- 1 | # Kroma `v1.1.1` Upgrade Instructions 2 | 3 | This document provides instructions to upgrade from Kroma `v1.0.2` to `v1.1.1`. 4 | For more details about `v1.1.1`, please refer the [release note](https://github.com/kroma-network/kroma/releases/tag/v1.1.1). 5 | This upgrade mainly includes upstream of Optimism [`v1.2.0`](https://github.com/ethereum-optimism/optimism/releases/tag/v1.2.0). 6 | 7 | ## Guides for upgrade 8 | 9 | ### Stop Kroma 10 | 11 | For upgrade, stop your Kroma full node or validator. 12 | ```bash 13 | # for full node 14 | docker compose --profile fullnode down 15 | 16 | # for validator 17 | docker compose --profile validator down 18 | ``` 19 | 20 | ### Common 21 | 22 | You need to update your `.env` file. 23 | 24 | First, update the tag of `kroma-geth`, `kroma-node` and `kroma-validator` docker image. 25 | ``` 26 | IMAGE_TAG__KROMA_GETH=v0.3.0 27 | IMAGE_TAG__KROMA_NODE=v1.1.1 28 | IMAGE_TAG__KROMA_VALIDATOR=v1.1.1 29 | ``` 30 | 31 | In this upgrade, a flag name of the op-node has been changed. 32 | - `NODE_SYNCER_L1_CONFS` -> `NODE_VERIFIER_L1_CONFS` 33 | 34 | ### Start Kroma 35 | 36 | You can now start Kroma full node or validator with a new version. 37 | 38 | ```bash 39 | # for full node 40 | docker compose --profile fullnode up -d 41 | 42 | # for validator 43 | docker compose --profile validator up -d 44 | ``` 45 | -------------------------------------------------------------------------------- /config/mainnet/rollup.json: -------------------------------------------------------------------------------- 1 | { 2 | "genesis": { 3 | "l1": { 4 | "hash": "0xe459c500b760ed52a1ad799bf578b257af2c76f6ebe061a4c62627e9c605bced", 5 | "number": 18067255 6 | }, 7 | "l2": { 8 | "hash": "0xeab1dbcbd854942126643609f6b457e391b169c819b7e5d5042389ccf6012cbf", 9 | "number": 0 10 | }, 11 | "l2_time": 1693880387, 12 | "system_config": { 13 | "batcherAddr": "0x41b8cd6791de4d8f9e0eaf7861ac506822adce12", 14 | "overhead": "0x00000000000000000000000000000000000000000000000000000000000000bc", 15 | "scalar": "0x00000000000000000000000000000000000000000000000000000000000a6fe0", 16 | "gasLimit": 30000000, 17 | "validatorRewardScalar": "0x0000000000000000000000000000000000000000000000000000000000002710" 18 | } 19 | }, 20 | "block_time": 2, 21 | "max_sequencer_drift": 600, 22 | "seq_window_size": 3600, 23 | "channel_timeout": 300, 24 | "l1_chain_id": 1, 25 | "l2_chain_id": 255, 26 | "batch_inbox_address": "0xff00000000000000000000000000000000000255", 27 | "deposit_contract_address": "0x31f648572b67e60ec6eb8e197e1848cc5f5558de", 28 | "l1_system_config_address": "0x3971eb866aa9b2b8afea8a7c816f3b7e8b195a35", 29 | "regolith_time": 0, 30 | "canyon_time": 1708502400, 31 | "delta_time": 1709107200, 32 | "ecotone_time": 1714032001, 33 | "kroma_mpt_time": 1739250001 34 | } 35 | -------------------------------------------------------------------------------- /config/sepolia/rollup.json: -------------------------------------------------------------------------------- 1 | { 2 | "genesis": { 3 | "l1": { 4 | "hash": "0x936e490e33e6e136ecd9095090e30ed7def3903ef2bae3e05966b376e493ad76", 5 | "number": 3841490 6 | }, 7 | "l2": { 8 | "hash": "0x52ef8f66bb31c16326eb2072dd9b2fa734068728b845d5428f3a256a50bf252e", 9 | "number": 0 10 | }, 11 | "l2_time": 1688709132, 12 | "system_config": { 13 | "batcherAddr": "0xf15dc770221b99c98d4aaed568f2ab04b9d16e42", 14 | "overhead": "0x0000000000000000000000000000000000000000000000000000000000000834", 15 | "scalar": "0x000000000000000000000000000000000000000000000000000000000016e360", 16 | "gasLimit": 30000000, 17 | "validatorRewardScalar": "0x00000000000000000000000000000000000000000000000000000000000007d0" 18 | } 19 | }, 20 | "block_time": 2, 21 | "max_sequencer_drift": 1200, 22 | "seq_window_size": 3600, 23 | "channel_timeout": 120, 24 | "l1_chain_id": 11155111, 25 | "l2_chain_id": 2358, 26 | "batch_inbox_address": "0xfa79000000000000000000000000000000000001", 27 | "deposit_contract_address": "0x31ab8ed993a3be9aa2757c7d368dc87101a868a4", 28 | "l1_system_config_address": "0x398c8ea789968893095d86cba168378a4f452e33", 29 | "regolith_time": 0, 30 | "canyon_time": 1707897600, 31 | "delta_time": 1708416000, 32 | "ecotone_time": 1713340800, 33 | "kroma_mpt_time": 1737090000 34 | } 35 | -------------------------------------------------------------------------------- /upgrades/v1.0.0.md: -------------------------------------------------------------------------------- 1 | # Kroma `v1.0.0` Upgrade Instructions 2 | 3 | This document provides instructions to upgrade from Kroma `v0.3.0` to `v1.0.0`. 4 | For more details about `v1.0.0`, please refer the [release note](https://github.com/kroma-network/kroma/releases/tag/v1.0.0). 5 | 6 | ## Guides for upgrade 7 | 8 | ### Stop Kroma 9 | 10 | For upgrade, stop your Kroma full node or validator. 11 | ```bash 12 | # for full node 13 | docker compose --profile fullnode down 14 | 15 | # for validator 16 | docker compose --profile validator down 17 | ``` 18 | 19 | ### Common 20 | 21 | You need to update your `.env` file. 22 | 23 | First, update the tag of `kroma-node` and `kroma-validator` docker image. 24 | ``` 25 | IMAGE_TAG__KROMA_NODE=v1.0.0 26 | IMAGE_TAG__KROMA_VALIDATOR=v1.0.0 27 | ``` 28 | 29 | ### Validator 30 | 31 | For validator, a new flag is added. 32 | 33 | #### Added 34 | 35 | - `KROMA_VALIDATOR__ALLOW_PUBLIC_ROUND` is added. If you want to submit an output in public round, 36 | set `KROMA_VALIDATOR__ALLOW_PUBLIC_ROUND=true`. In public round, only the fastest validator can submit an output, 37 | so the other transaction will fail, and it will cost additional gas fee. 38 | 39 | ### Start Kroma 40 | 41 | You can now start Kroma full node or validator with a new version. 42 | 43 | ```bash 44 | # for full node 45 | docker compose --profile fullnode up -d 46 | 47 | # for validator 48 | docker compose --profile validator up -d 49 | ``` 50 | -------------------------------------------------------------------------------- /upgrades/v1.3.4.md: -------------------------------------------------------------------------------- 1 | # Kroma `v1.3.4` Upgrade Instructions 2 | 3 | This document provides instructions to upgrade from Kroma `v1.3.1` to `v1.3.4`. 4 | **No changes in flags have been made on this release, so you can simply change the tag for upgrade.** 5 | For more details about `v1.3.4`, please refer the [release note](https://github.com/kroma-network/kroma/releases/tag/v1.3.4). 6 | This upgrade mainly includes activation of fixed `KromaZKTrie` for better performance in terms of block processing. 7 | 8 | ## Guides for upgrade 9 | 10 | ### Stop Kroma 11 | 12 | For upgrade, stop your Kroma full node or validator. 13 | ```bash 14 | # for full node 15 | docker compose --profile fullnode down 16 | 17 | # for validator 18 | docker compose --profile validator down 19 | ``` 20 | 21 | ### Common 22 | 23 | You need to update your `.env` file. 24 | 25 | First, update the tag of `kroma-node` and `kroma-validator` docker image. 26 | ``` 27 | IMAGE_TAG__KROMA_GETH=v0.4.6 28 | IMAGE_TAG__KROMA_NODE=v1.3.4 29 | IMAGE_TAG__KROMA_VALIDATOR=v1.3.4 30 | ``` 31 | 32 | Also, a field is added to `geth.env`. Please make sure your `geth.eng` has the following field. 33 | ``` 34 | GETH_MINER_RECOMMIT=100ms 35 | ``` 36 | 37 | ### Start Kroma 38 | 39 | You can now start Kroma full node or validator with a new version. 40 | 41 | ```bash 42 | # for full node 43 | docker compose --profile fullnode up -d 44 | 45 | # for validator 46 | docker compose --profile validator up -d 47 | ``` 48 | -------------------------------------------------------------------------------- /upgrades/v2.0.0+geth.v0.5.4.md: -------------------------------------------------------------------------------- 1 | # Kroma `v2.0.0+geth.v0.5.4` Upgrade Instructions 2 | 3 | This document provides instructions to upgrade from Kroma geth `v0.5.3` to `v0.5.4`. 4 | For more details about Kroma geth `v0.5.4`, please refer the [release note](https://github.com/kroma-network/go-ethereum/releases/tag/v0.5.4). 5 | This upgrade mainly includes a stability improvement for the KromaZKtrie iterator. 6 | 7 | ## Guides for upgrade 8 | 9 | ### Pull the latest version of kroma-up 10 | 11 | First of all, pull the latest kroma-up and checkout to `v2.0.0+geth.v0.5.4`. 12 | 13 | ```bash 14 | git fetch origin 15 | git pull origin main 16 | git checkout tags/v2.0.0+geth.v0.5.4 17 | ``` 18 | 19 | ### Stop Kroma 20 | 21 | For upgrade, stop your Kroma full node or validator. 22 | 23 | ```bash 24 | # for full node 25 | docker compose -f docker-compose-.yml --profile fullnode down 26 | 27 | # for validator 28 | docker compose -f docker-compose-.yml --profile validator down 29 | ``` 30 | 31 | ### Common 32 | 33 | You need to update your `.env` file. 34 | 35 | Update the docker image tag of `kroma-geth`. 36 | 37 | ```text 38 | IMAGE_TAG__KROMA_GETH=v0.5.4 39 | ``` 40 | 41 | ### Start Kroma 42 | 43 | You can now start Kroma full node or validator node with a new version. 44 | 45 | ```bash 46 | # for full node 47 | docker compose -f docker-compose-.yml --profile fullnode up -d 48 | 49 | # for validator 50 | docker compose -f docker-compose-.yml --profile validator up -d 51 | ``` 52 | -------------------------------------------------------------------------------- /upgrades/v1.0.2.md: -------------------------------------------------------------------------------- 1 | # Kroma `v1.0.2` Upgrade Instructions 2 | 3 | This document provides instructions to upgrade from Kroma `v1.0.1` to `v1.0.2`. 4 | For more details about `v1.0.2`, please refer the [release note](https://github.com/kroma-network/kroma/releases/tag/v1.0.2). 5 | 6 | ## Guides for upgrade 7 | 8 | ### Stop Kroma 9 | 10 | For upgrade, stop your Kroma full node or validator. 11 | ```bash 12 | # for full node 13 | docker compose --profile fullnode down 14 | 15 | # for validator 16 | docker compose --profile validator down 17 | ``` 18 | 19 | ### Common 20 | 21 | You need to update your `.env` file. 22 | 23 | First, update the tag of `kroma-node` and `kroma-validator` docker image. 24 | ``` 25 | IMAGE_TAG__KROMA_NODE=v1.0.2 26 | IMAGE_TAG__KROMA_VALIDATOR=v1.0.2 27 | ``` 28 | 29 | Especially with this upgrade, the name `proposer` has been changed to `sequencer`, requiring modifications in the 30 | `rollup.json` file. The changes are as follows: 31 | 32 | - `max_proposer_drift` -> `max_sequencer_drift` 33 | - `proposer_window_size` -> `seq_window_size` 34 | 35 | Before running a full node or validator, please check these changes in the `rollup.json` file. 36 | 37 | Accordingly, the flags name of op-node have been changed. 38 | 39 | - `NODE_PROPOSER_ENABLED` -> `NODE_SEQUENCER_ENABLED` 40 | - `NODE_PROPOSER_L1_CONFS` -> `NODE_SEQUENCER_L1_CONFS` 41 | 42 | ### Start Kroma 43 | 44 | You can now start Kroma full node or validator with a new version. 45 | 46 | ```bash 47 | # for full node 48 | docker compose --profile fullnode up -d 49 | 50 | # for validator 51 | docker compose --profile validator up -d 52 | ``` 53 | -------------------------------------------------------------------------------- /upgrades/v2.1.2+geth.v0.6.3.md: -------------------------------------------------------------------------------- 1 | # Kroma `v2.1.2+geth.v0.6.3` Upgrade Instructions 2 | 3 | This document provides instructions to upgrade from Kroma `v2.1.2+geth.v0.6.3` to `v2.1.2+geth.v0.6.3`. 4 | For more details about `v2.1.2+geth.v0.6.3`, please refer the [Kroma release note](https://github.com/kroma-network/kroma/releases/tag/v2.1.2) and [Kroma-geth release note](https://github.com/kroma-network/go-ethereum/releases/tag/v0.6.3). 5 | 6 | This upgrade is for supporting the L1 Pectra upgrade, enabling L2 to read and process L1 blocks. 7 | 8 | ## Guides for upgrade 9 | 10 | ### Pull the latest version of kroma-up 11 | 12 | First of all, pull the latest kroma-up and checkout to `v2.1.2+geth.v0.6.3`. 13 | 14 | ```bash 15 | git fetch origin 16 | git pull origin main 17 | git checkout tags/v2.1.2+geth.v0.6.3 18 | ``` 19 | 20 | ### Stop Kroma 21 | 22 | For upgrade, stop your Kroma full node or validator. 23 | 24 | ```bash 25 | # for full node 26 | docker compose -f docker-compose-.yml --profile fullnode down 27 | 28 | # for validator 29 | docker compose -f docker-compose-.yml --profile validator down 30 | ``` 31 | 32 | ### Common 33 | 34 | You need to update your `.env` file. 35 | 36 | First, update the docker image tag of `kroma-geth`, `kroma-node` and `kroma-validator`. 37 | 38 | ```text 39 | IMAGE_TAG__KROMA_GETH=v0.6.3 40 | IMAGE_TAG__KROMA_NODE=v2.1.2 41 | IMAGE_TAG__KROMA_VALIDATOR=v2.1.2 42 | ``` 43 | 44 | ### Start Kroma 45 | 46 | You can now start Kroma full node or validator node with a new version. 47 | 48 | ```bash 49 | # for full node 50 | docker compose -f docker-compose-.yml --profile fullnode up -d 51 | 52 | # for validator 53 | docker compose -f docker-compose-.yml --profile validator up -d 54 | ``` 55 | -------------------------------------------------------------------------------- /envs/mainnet/validator.env: -------------------------------------------------------------------------------- 1 | VALIDATOR_L1_ETH_RPC=${KROMA_VALIDATOR__L1_RPC_ENDPOINT} 2 | VALIDATOR_L2_ETH_RPC=http://kroma-geth:8545 3 | VALIDATOR_ROLLUP_RPC=http://kroma-node:8545 4 | 5 | VALIDATOR_METRICS_ENABLED=true 6 | VALIDATOR_ALLOW_NON_FINALIZED=true 7 | VALIDATOR_TXMGR_TX_SEND_TIMEOUT=600s 8 | VALIDATOR_NUM_CONFIRMATIONS=1 9 | VALIDATOR_SAFE_ABORT_NONCE_TOO_LOW_COUNT=3 10 | VALIDATOR_RESUBMISSION_TIMEOUT=30s 11 | VALIDATOR_PPROF_ENABLED=true 12 | VALIDATOR_CHALLENGE_POLL_INTERVAL=5s 13 | VALIDATOR_NETWORK_TIMEOUT=5s 14 | VALIDATOR_CHALLENGER_ZKEVM_NETWORK_TIMEOUT=14400s 15 | VALIDATOR_OUTPUT_SUBMITTER_ALLOW_PUBLIC_ROUND=${KROMA_VALIDATOR__ALLOW_PUBLIC_ROUND} 16 | 17 | VALIDATOR_L2OO_ADDRESS=0x180c77aE51a9c505a43A2C7D81f8CE70cacb93A6 18 | VALIDATOR_COLOSSEUM_ADDRESS=0x713C2BEd44eB45D490afB8D4d1aA6F12290B829a 19 | VALIDATOR_VALPOOL_ADDRESS=0xFdFF462845953D90719A78Fd12a2d103541d2103 20 | VALIDATOR_SECURITYCOUNCIL_ADDRESS=0x3de211088dF516da72efe68D386b561BEE256Ec4 21 | VALIDATOR_VALMGR_ADDRESS=0x232277d9672eEdd53c4B26C0F386C2Eb88DC7363 22 | VALIDATOR_ASSETMANAGER_ADDRESS=0xa295310DE52b86F236A815AFb2f518F3C0F5A6D3 23 | 24 | VALIDATOR_OUTPUT_SUBMITTER_ENABLED=${KROMA_VALIDATOR__OUTPUT_SUBMITTER_ENABLED} 25 | VALIDATOR_CHALLENGER_ENABLED=${KROMA_VALIDATOR__CHALLENGER_ENABLED} 26 | VALIDATOR_GUARDIAN_ENABLED=${KROMA_VALIDATOR__GUARDIAN_ENABLED} 27 | 28 | VALIDATOR_MNEMONIC=${KROMA_VALIDATOR__MNEMONIC} 29 | VALIDATOR_HD_PATH=${KROMA_VALIDATOR__HD_PATH} 30 | VALIDATOR_PRIVATE_KEY=${KROMA_VALIDATOR__PRIVATE_KEY} 31 | VALIDATOR_CHALLENGER_ZKEVM_PROVER_RPC=${KROMA_VALIDATOR__ZKEVM_PROVER_PROXY_RPC} 32 | VALIDATOR_CHALLENGER_ZKVM_PROVER_RPC=${KROMA_VALIDATOR__ZKVM_PROVER_PROXY_RPC} 33 | VALIDATOR_CHALLENGER_WITNESS_GENERATOR_RPC=${KROMA_VALIDATOR__ZKVM_WITNESS_GENERATOR_RPC} 34 | -------------------------------------------------------------------------------- /envs/sepolia/validator.env: -------------------------------------------------------------------------------- 1 | VALIDATOR_L1_ETH_RPC=${KROMA_VALIDATOR__L1_RPC_ENDPOINT} 2 | VALIDATOR_L2_ETH_RPC=http://kroma-geth:8545 3 | VALIDATOR_ROLLUP_RPC=http://kroma-node:8545 4 | 5 | VALIDATOR_METRICS_ENABLED=true 6 | VALIDATOR_ALLOW_NON_FINALIZED=true 7 | VALIDATOR_TXMGR_TX_SEND_TIMEOUT=600s 8 | VALIDATOR_NUM_CONFIRMATIONS=1 9 | VALIDATOR_SAFE_ABORT_NONCE_TOO_LOW_COUNT=3 10 | VALIDATOR_RESUBMISSION_TIMEOUT=30s 11 | VALIDATOR_PPROF_ENABLED=true 12 | VALIDATOR_CHALLENGE_POLL_INTERVAL=5s 13 | VALIDATOR_NETWORK_TIMEOUT=5s 14 | VALIDATOR_CHALLENGER_ZKEVM_NETWORK_TIMEOUT=14400s 15 | VALIDATOR_OUTPUT_SUBMITTER_ALLOW_PUBLIC_ROUND=${KROMA_VALIDATOR__ALLOW_PUBLIC_ROUND} 16 | 17 | VALIDATOR_L2OO_ADDRESS=0x7291913342063fd10d31651735BAF3877D2F9645 18 | VALIDATOR_COLOSSEUM_ADDRESS=0xA9bFbC621A65EfD1e19A28fD87f091bF72a67074 19 | VALIDATOR_VALPOOL_ADDRESS=0xbc171C51D9e3E0b24AA4606824e45F93DdE6E352 20 | VALIDATOR_SECURITYCOUNCIL_ADDRESS=0x7F0DECbef4FdD0193b7d5c8Cc918C1A69d3eF78C 21 | VALIDATOR_VALMGR_ADDRESS=0x18189f55FD29759CE51F13DCF0A9cCC1E41dFCC7 22 | VALIDATOR_ASSETMANAGER_ADDRESS=0x5E9c8dB8f0aE21eA23eF53893dE2474E07D1CD91 23 | 24 | VALIDATOR_OUTPUT_SUBMITTER_ENABLED=${KROMA_VALIDATOR__OUTPUT_SUBMITTER_ENABLED} 25 | VALIDATOR_CHALLENGER_ENABLED=${KROMA_VALIDATOR__CHALLENGER_ENABLED} 26 | VALIDATOR_GUARDIAN_ENABLED=${KROMA_VALIDATOR__GUARDIAN_ENABLED} 27 | 28 | VALIDATOR_MNEMONIC=${KROMA_VALIDATOR__MNEMONIC} 29 | VALIDATOR_HD_PATH=${KROMA_VALIDATOR__HD_PATH} 30 | VALIDATOR_PRIVATE_KEY=${KROMA_VALIDATOR__PRIVATE_KEY} 31 | VALIDATOR_CHALLENGER_ZKEVM_PROVER_RPC=${KROMA_VALIDATOR__ZKEVM_PROVER_PROXY_RPC} 32 | VALIDATOR_CHALLENGER_ZKVM_PROVER_RPC=${KROMA_VALIDATOR__ZKVM_PROVER_PROXY_RPC} 33 | VALIDATOR_CHALLENGER_WITNESS_GENERATOR_RPC=${KROMA_VALIDATOR__ZKVM_WITNESS_GENERATOR_RPC} 34 | -------------------------------------------------------------------------------- /scripts/entrypoint.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | set -exu 3 | 4 | VERBOSITY=${GETH_VERBOSITY:-3} 5 | KROMA_PATH="/.kroma" 6 | GETH_DATA_DIR="$KROMA_PATH/db" 7 | GETH_CHAINDATA_DIR="$GETH_DATA_DIR/geth/chaindata" 8 | GENESIS_FILE_PATH="${GENESIS_FILE_PATH:-$KROMA_PATH/config/genesis.json}" 9 | RPC_PORT="${RPC_PORT:-8545}" 10 | WS_PORT="${WS_PORT:-8546}" 11 | JWT_SECRET_PATH="${JWT_SECRET_PATH:-$KROMA_PATH/keys/jwt-secret.txt}" 12 | 13 | if [ ! -d "$GETH_CHAINDATA_DIR" ]; then 14 | echo "$GETH_CHAINDATA_DIR missing, running init" 15 | echo "Initializing genesis." 16 | geth --verbosity="$VERBOSITY" init --datadir="$GETH_DATA_DIR" "$GENESIS_FILE_PATH" 17 | else 18 | echo "$GETH_CHAINDATA_DIR exists." 19 | fi 20 | 21 | if [ -n "${HISTORICAL_RPC}" ]; then 22 | export EXTENDED_ARG="${EXTENDED_ARG:-} --rollup.historicalrpc=${HISTORICAL_RPC}" 23 | fi 24 | 25 | if [ "${DISABLE_MIGRATION:-}" = "true" ]; then 26 | export EXTENDED_ARG="${EXTENDED_ARG:-} --kroma.migration.disable=true" 27 | fi 28 | 29 | exec geth \ 30 | --datadir="$GETH_DATA_DIR" \ 31 | --verbosity=3 \ 32 | --http \ 33 | --http.corsdomain="*" \ 34 | --http.vhosts="*" \ 35 | --http.addr=0.0.0.0 \ 36 | --http.port="$RPC_PORT" \ 37 | --http.api="web3,debug,eth,txpool,net,engine,kroma" \ 38 | --ws \ 39 | --ws.addr=0.0.0.0 \ 40 | --ws.port="$WS_PORT" \ 41 | --ws.origins="*" \ 42 | --ws.api="debug,eth,txpool,net,engine,kroma" \ 43 | --syncmode=full \ 44 | --networkid=$CHAIN_ID \ 45 | --authrpc.addr="0.0.0.0" \ 46 | --authrpc.port="8551" \ 47 | --authrpc.vhosts="*" \ 48 | --authrpc.jwtsecret="$JWT_SECRET_PATH" \ 49 | --gcmode=archive \ 50 | --trace.mptwitness=1 \ 51 | --port=30304 \ 52 | --discovery.port=30303 \ 53 | --metrics \ 54 | --metrics.addr=0.0.0.0 \ 55 | --bootnodes="$BOOT_NODES" \ 56 | --circuitparams.maxtxs=0 \ 57 | --gpo.maxprice=100000000 \ 58 | --maxpeers=200 \ 59 | --snapshot=false \ 60 | ${EXTENDED_ARG:-} \ 61 | "$@" 62 | -------------------------------------------------------------------------------- /upgrades/v1.2.1.md: -------------------------------------------------------------------------------- 1 | # Kroma `v1.2.1` Upgrade Instructions 2 | 3 | This document provides instructions to upgrade from Kroma `v1.1.1` to `v1.2.1`. 4 | For more details about `v1.2.1`, please refer the [release note](https://github.com/kroma-network/kroma/releases/tag/v1.2.1). 5 | This upgrade includes upstream of Optimism [`v1.3.0`](https://github.com/ethereum-optimism/optimism/releases/tag/op-node%2Fv1.3.0). 6 | This upgrade includes Canyon hardfork, so all full nodes and validators must complete the upgrade before the Canyon 7 | upgrade is activated. The activation time of Canyon upgrade is scheduled as below: 8 | 9 | - Kroma sepolia: `Wed Feb 14 2024 08:00:00 UTC`. 10 | - Kroma mainnet: `Wed Feb 21 2024 08:00:00 UTC` 11 | 12 | ## Guides for upgrade 13 | 14 | ### Stop Kroma 15 | 16 | For upgrade, stop your Kroma full node or validator. 17 | ```bash 18 | # for full node 19 | docker compose --profile fullnode down 20 | 21 | # for validator 22 | docker compose --profile validator down 23 | ``` 24 | 25 | ### Common 26 | 27 | You need to update your `.env` file. 28 | 29 | First, update the tag of `kroma-node` and `kroma-validator` docker image. 30 | ``` 31 | IMAGE_TAG__KROMA_GETH=v0.4.3 32 | IMAGE_TAG__KROMA_NODE=v1.2.1 33 | IMAGE_TAG__KROMA_VALIDATOR=v1.2.1 34 | ``` 35 | 36 | Also, additional fields are added to `rollup.json`. Please check your `rollup.json` and make sure that the following 37 | fields are added appropriately. You can also refer the modified [`rollup.json`](../config/sepolia/rollup.json). 38 | 39 | For Kroma sepolia, 40 | ```json 41 | { 42 | "regolith_time": 0, 43 | "canyon_time": 1707897600 44 | } 45 | ``` 46 | 47 | For Kroma mainnet, 48 | ```json 49 | { 50 | "regolith_time": 0, 51 | "canyon_time": 1708502400 52 | } 53 | ``` 54 | 55 | ### Start Kroma 56 | 57 | You can now start Kroma full node or validator with a new version. 58 | 59 | ```bash 60 | # for full node 61 | docker compose --profile fullnode up -d 62 | 63 | # for validator 64 | docker compose --profile validator up -d 65 | ``` 66 | -------------------------------------------------------------------------------- /upgrades/v0.3.0.md: -------------------------------------------------------------------------------- 1 | # Kroma `v0.3.0` Upgrade Instructions 2 | 3 | This document provides instructions to upgrade from Kroma `v0.2.2` to `v0.3.0`. 4 | For more details about `v0.3.0`, please refer the [release note](https://github.com/kroma-network/kroma/releases/tag/v0.3.0). 5 | 6 | ## Guides for upgrade 7 | 8 | ### Stop Kroma 9 | 10 | For upgrade, stop your Kroma full node or validator. 11 | ```bash 12 | # for full node 13 | docker compose --profile fullnode down 14 | 15 | # for validator 16 | docker compose --profile validator down 17 | ``` 18 | 19 | ### Common 20 | 21 | You need to update your `.env` file. 22 | 23 | First, update the tag of `kroma-geth`, `kroma-node`, and `kroma-validator` docker image. 24 | ``` 25 | IMAGE_TAG__KROMA_GETH=v0.2.1 26 | IMAGE_TAG__KROMA_NODE=v0.3.0 27 | IMAGE_TAG__KROMA_VALIDATOR=v0.3.0 28 | ``` 29 | 30 | ### Validator 31 | 32 | For validator, several changes have been made in validator flags. 33 | 34 | #### Changed 35 | 36 | - `KROMA_VALIDATOR__OUTPUT_SUBMITTER_DISABLED` is changed to `KROMA_VALIDATOR__OUTPUT_SUBMITTER_ENABLED`. 37 | So if you run a validator as an output submitter, set `KROMA_VALIDATOR__OUTPUT_SUBMITTER_ENABLED=true`. 38 | - `KROMA_VALIDATOR__CHALLENGER_DISABLED` is changed to `KROMA_VALIDATOR__CHALLENGER_ENABLED`. 39 | So if you run a validator as a challenger, set `KROMA_VALIDATOR__CHALLENGER_ENABLED=true` 40 | 41 | Both flags are required, so you should add both to `.env` file. 42 | 43 | - `KROMA_VALIDATOR__PROVER_GRPC` is changed to `KROMA_VALIDATOR__PROVER_RPC` since the prover is changed to use jsonRPC, not gRPC. 44 | It is required to enable challenger as before. 45 | 46 | #### Deleted 47 | 48 | - `KROMA_VALIDATOR__OUTPUT_SUBMITTER_BOND_AMOUNT` is deleted. 49 | A fixed amount of bond is used for submission of output and challenge. 50 | So you can remove this flag in your `.env` file. 51 | 52 | ### Start Kroma 53 | 54 | You can now start Kroma full node or validator with a new version. 55 | 56 | ```bash 57 | # for full node 58 | docker compose --profile fullnode up -d 59 | 60 | # for validator 61 | docker compose --profile validator up -d 62 | ``` 63 | -------------------------------------------------------------------------------- /upgrades/v1.4.3.md: -------------------------------------------------------------------------------- 1 | # Kroma `v1.4.3` Upgrade Instructions 2 | 3 | This document provides instructions to upgrade from Kroma `v1.4.2` to `v1.4.3`. 4 | 5 | For more details about `v1.4.3`, please refer the [release note](https://github.com/kroma-network/kroma/releases/tag/v1.4.3). 6 | This upgrade mainly includes upgrade of kroma-prover to `v0.1.6`, which replaces ZK backend to tachyon. 7 | It shortened the proof generation time by about 33%. For more details, please refer 8 | [this](https://github.com/kroma-network/tachyon/releases/tag/v0.2.0). 9 | 10 | This upgrade is only mandatory to Kroma validators. If you run a full node, it is optional. 11 | 12 | ## Guides for upgrade 13 | 14 | ### Pull the latest version of kroma-up 15 | 16 | First of all, pull the latest kroma-up and checkout to v1.4.3. 17 | 18 | ```bash 19 | git fetch origin 20 | git pull origin main 21 | git checkout tags/v1.4.3 22 | ``` 23 | 24 | ### Stop Kroma 25 | 26 | For upgrade, stop your Kroma full node or validator. 27 | ```bash 28 | # for full node 29 | docker compose -f docker-compose-.yml --profile fullnode down 30 | 31 | # for validator 32 | docker compose -f docker-compose-.yml --profile validator down 33 | ``` 34 | 35 | ### Common 36 | 37 | You need to update your `.env` file. 38 | 39 | First, update the tag of `kroma-node` and `kroma-validator` docker image. 40 | Please note that if you run a Kroma validator, you need to upgrade your kroma-prover and kroma-prover-proxy. 41 | 42 | ``` 43 | IMAGE_TAG__KROMA_GETH=v0.5.3 44 | IMAGE_TAG__KROMA_NODE=v1.4.3 45 | IMAGE_TAG__KROMA_VALIDATOR=v1.4.3 46 | 47 | IMAGE_TAG__KROMA_PROVER_PROXY=v0.1.3 48 | IMAGE_TAG__KROMA_PROVER=v0.1.6 49 | ``` 50 | 51 | ### Start Kroma 52 | 53 | You can now start Kroma full node or validator with a new version. 54 | 55 | ```bash 56 | # for full node 57 | docker compose -f docker-compose-.yml --profile fullnode up -d 58 | 59 | # for validator 60 | docker compose -f docker-compose-.yml --profile validator up -d 61 | 62 | # for validator running with prover-proxy 63 | docker compose -f docker-compose-.yml --profile validator+proxy up -d 64 | 65 | # for prover 66 | chmod +x setup_prover.sh 67 | ./setup_prover.sh 68 | docker compose -f docker-compose-.yml --profile prover up -d # network: mainnet or sepolia 69 | ``` 70 | 71 | If you plan to run a kroma-prover, make sure you run the kroma-prover after running the `setup_prover.sh` script. 72 | -------------------------------------------------------------------------------- /upgrades/v1.4.2.md: -------------------------------------------------------------------------------- 1 | # Kroma `v1.4.2` Upgrade Instructions 2 | 3 | This document provides instructions to upgrade from Kroma `v1.3.4` to `v1.4.2`. 4 | 5 | For more details about `v1.4.2`, please refer the [release note](https://github.com/kroma-network/kroma/releases/tag/v1.4.2). 6 | This upgrade mainly includes upstream of Optimism [`v1.7.2`](https://github.com/ethereum-optimism/optimism/releases/tag/v1.7.2) 7 | This upgrade includes Ecotone upgrade, which enables Kroma-batcher to post batch using blob-carrying transaction. 8 | So all full nodes and validators must complete the upgrade before the Ecotone upgrade is activated. 9 | The activation time of Ecotone upgrade is scheduled as below: 10 | 11 | - Kroma Sepolia: `Wed Apr 17 2024 08:00:00 UTC` 12 | - Kroma Mainnet: `Thu Apr 25 2024 08:00:01 UTC` 13 | 14 | ## Guides for upgrade 15 | 16 | ### Pull the latest version of kroma-up 17 | 18 | First of all, pull the latest kroma-up and checkout to v1.4.2. 19 | 20 | ```bash 21 | git pull origin main 22 | git checkout tags/v1.4.2 23 | ``` 24 | 25 | ### Stop Kroma 26 | 27 | For upgrade, stop your Kroma full node or validator. 28 | ```bash 29 | # for full node 30 | docker compose --profile fullnode down 31 | 32 | # for validator 33 | docker compose --profile validator down 34 | ``` 35 | 36 | ### Common 37 | 38 | You need to update your `.env` file. 39 | 40 | First, update the tag of `kroma-node` and `kroma-validator` docker image. 41 | ``` 42 | IMAGE_TAG__KROMA_GETH=v0.5.2 43 | IMAGE_TAG__KROMA_NODE=v1.4.2 44 | IMAGE_TAG__KROMA_VALIDATOR=v1.4.2 45 | ``` 46 | 47 | Also, after activation of Ecotone, you need L1 Beacon endpoint to get blob information. 48 | 49 | ``` 50 | KROMA_NODE__L1_BEACON_ENDPOINT= 51 | ``` 52 | 53 | And Ecotone activation time should be added to `rollup.json`. Please make sure that the following field is added. 54 | You can also refer the modified `rollup.json` file for [Kroma mainnet](../config/mainnet/rollup.json) or 55 | [Kroma sepolia](../config/sepolia/rollup.json). 56 | 57 | For Kroma Mainnet, 58 | ```json 59 | { 60 | "ecotone_time": 1714032001 61 | } 62 | ``` 63 | 64 | For Kroma Sepolia, 65 | ```json 66 | { 67 | "ecotone_time": 1713340800 68 | } 69 | ``` 70 | 71 | ### Start Kroma 72 | 73 | You can now start Kroma full node or validator with a new version. 74 | 75 | ```bash 76 | # for full node 77 | docker compose --profile fullnode up -d 78 | 79 | # for validator 80 | docker compose --profile validator up -d 81 | ``` 82 | -------------------------------------------------------------------------------- /upgrades/v1.3.1.md: -------------------------------------------------------------------------------- 1 | # Kroma `v1.3.1` Upgrade Instructions 2 | 3 | This document provides instructions to upgrade from Kroma `v1.2.0` to `v1.3.1`. 4 | For more details about `v1.3.1`, please refer the [release note](https://github.com/kroma-network/kroma/releases/tag/v1.3.1). 5 | This upgrade includes upstream of Optimism [`v1.4.0`](https://github.com/ethereum-optimism/optimism/releases/tag/op-node%2Fv1.4.0). 6 | This upgrade includes Delta upgrade, which enables Kroma-batcher to post batch data to L1 using 7 | [span batch](https://github.com/ethereum-optimism/specs/blob/main/specs/protocol/span-batches.md). 8 | So all full nodes and validators must complete the upgrade before the Delta upgrade is activated. 9 | The activation time of Delta upgrade is scheduled as below: 10 | 11 | - Kroma sepolia: `Tue Feb 20 2024 08:00:00 UTC` 12 | - Kroma mainnet: `Wed Feb 28 2024 08:00:00 UTC` 13 | 14 | ## Guides for upgrade 15 | 16 | ### Stop Kroma 17 | 18 | For upgrade, stop your Kroma full node or validator. 19 | ```bash 20 | # for full node 21 | docker compose --profile fullnode down 22 | 23 | # for validator 24 | docker compose --profile validator down 25 | ``` 26 | 27 | ### Common 28 | 29 | You need to update your `.env` file. 30 | 31 | First, update the tag of `kroma-node` and `kroma-validator` docker image. 32 | ``` 33 | IMAGE_TAG__KROMA_GETH=v0.4.3 34 | IMAGE_TAG__KROMA_NODE=v1.3.1 35 | IMAGE_TAG__KROMA_VALIDATOR=v1.3.1 36 | ``` 37 | 38 | Also, additional fields are added to `rollup.json`. Please check your `rollup.json` and make sure that the following 39 | fields are added appropriately. You can also refer the modified [`rollup.json`](../config/sepolia/rollup.json). 40 | 41 | For Kroma sepolia, 42 | ```json 43 | { 44 | "delta_time": 1708416000 45 | } 46 | ``` 47 | 48 | For Kroma mainnet, 49 | ```json 50 | { 51 | "delta_time": 1709107200 52 | } 53 | ``` 54 | 55 | ### Start Kroma 56 | 57 | You can now start Kroma full node or validator with a new version. 58 | 59 | ```bash 60 | # for full node 61 | docker compose --profile fullnode up -d 62 | 63 | # for validator 64 | docker compose --profile validator up -d 65 | ``` 66 | 67 | ## Upgrade Failure 68 | 69 | If your kroma-node fails to upgrade, it will be unable to derive span batches after the Delta upgrade. 70 | You may encounter logs like the following: 71 | 72 | ``` 73 | 2024-02-22 14:59:18 t=2024-02-22T05:59:18+0000 lvl=warn msg="Derivation process temporary error" attempts=1 err="engine stage failed: temp: cannot accept span batch in L1 block 0x...:100000 at time 1708417920" 74 | ``` 75 | 76 | In this case, you must stop and upgrade your kroma-node with the correct version and `rollup.json` within the sequencing 77 | window(12 hours). 78 | -------------------------------------------------------------------------------- /upgrades/v2.0.0.md: -------------------------------------------------------------------------------- 1 | # Kroma `v2.0.0` Upgrade Instructions 2 | 3 | This document provides instructions to upgrade from Kroma `v1.4.3` to `v2.0.0`. 4 | For more details about `v2.0.0`, please refer the [release note](https://github.com/kroma-network/kroma/releases/tag/v2.0.0). 5 | 6 | This upgrade mainly includes the transition of validator system from ETH-based to KRO-based. KRO-based validator system 7 | is Delegated Proof of Stake (DPoS) system based on Kroma's governance token (KRO) and Kroma Guardian House (KGH) NFT. 8 | For more details about the new validator system, please refer the [specification](https://specs.kroma.network/protocol/validator-v2/overview.html). 9 | 10 | After the transition to the KRO-based validator system, existing validators will no longer be able to operate as 11 | validators. To continue participating in the validator network, the validators should upgrade their node to `v2.0.0` and 12 | register to the KRO-based validator system. The activation time of KRO-based validator system is as follows: 13 | 14 | - Kroma Mainnet: after `Wed Oct 30 2024 05:20:00 UTC` (from output index `10107`) 15 | - Kroma Sepolia: after `Tue Sep 10 2024 06:04:12 UTC` (from output index `129446`) 16 | 17 | For a full guide to migrate to the KRO-based validator system, please check out [here](https://docs.kroma.network/builders/node-operators/running-a-kroma-v2-validator-node/how-to-migrate-your-validator-to-kro-based-validator-system). 18 | This document only includes instructions for upgrading the validator node, not how to register to the KRO-based 19 | validator system. 20 | 21 | This upgrade is optional for full node operators other than validators. 22 | 23 | ## Guides for upgrade 24 | 25 | ### Pull the latest version of kroma-up 26 | 27 | First of all, pull the latest kroma-up and checkout to `v2.0.0`. 28 | 29 | ```bash 30 | git fetch origin 31 | git pull origin main 32 | git checkout tags/v2.0.0 33 | ``` 34 | 35 | ### Stop Kroma 36 | 37 | For upgrade, stop your Kroma full node or validator. 38 | 39 | ```bash 40 | # for full node 41 | docker compose -f docker-compose-.yml --profile fullnode down 42 | 43 | # for validator 44 | docker compose -f docker-compose-.yml --profile validator down 45 | ``` 46 | 47 | ### Common 48 | 49 | You need to update your `.env` file. 50 | 51 | First, update the docker image tag of `kroma-node` and `kroma-validator`. 52 | 53 | ```text 54 | IMAGE_TAG__KROMA_NODE=v2.0.0 55 | IMAGE_TAG__KROMA_VALIDATOR=v2.0.0 56 | ``` 57 | 58 | Also, for the KRO-based validator system, you need to add the new contracts addresses in `validator.env`. Please make 59 | sure that the following fields are added. You can also refer the modified `validator.env` file for 60 | [Kroma Sepolia](../envs/sepolia/validator.env) or [Kroma Mainnet](../envs/mainnet/validator.env). 61 | 62 | For Kroma Sepolia, 63 | 64 | ```text 65 | VALIDATOR_VALMGR_ADDRESS=0x18189f55FD29759CE51F13DCF0A9cCC1E41dFCC7 66 | VALIDATOR_ASSETMANAGER_ADDRESS=0x5E9c8dB8f0aE21eA23eF53893dE2474E07D1CD91 67 | ``` 68 | 69 | For Kroma Mainnet, 70 | 71 | ```text 72 | VALIDATOR_VALMGR_ADDRESS=0x232277d9672eEdd53c4B26C0F386C2Eb88DC7363 73 | VALIDATOR_ASSETMANAGER_ADDRESS=0xa295310DE52b86F236A815AFb2f518F3C0F5A6D3 74 | ``` 75 | 76 | ### Start Kroma 77 | 78 | You can now start Kroma full node or validator node with a new version. 79 | 80 | ```bash 81 | # for full node 82 | docker compose -f docker-compose-.yml --profile fullnode up -d 83 | 84 | # for validator 85 | docker compose -f docker-compose-.yml --profile validator up -d 86 | ``` 87 | -------------------------------------------------------------------------------- /docker-compose-mainnet.yml: -------------------------------------------------------------------------------- 1 | services: 2 | kroma-geth: 3 | container_name: kroma-geth 4 | image: kromanetwork/geth:${IMAGE_TAG__KROMA_GETH} 5 | restart: unless-stopped 6 | stop_grace_period: 50s 7 | env_file: 8 | - envs/mainnet/geth.env 9 | entrypoint: 10 | - /bin/sh 11 | - /.kroma/entrypoint.sh 12 | ports: 13 | - 6060:6060 14 | - 8545:8545 15 | - 8546:8546 16 | - 8551:8551 17 | - 30304:30304/tcp 18 | - 30303:30303/udp 19 | volumes: 20 | - db-mainnet:/.kroma/db 21 | - ./keys/jwt-secret.txt:/.kroma/keys/jwt-secret.txt 22 | - ./config/mainnet/genesis.json:/.kroma/config/genesis.json 23 | - ./scripts/entrypoint.sh:/.kroma/entrypoint.sh 24 | profiles: 25 | - fullnode 26 | - validator 27 | - validator+proxy 28 | 29 | kroma-node: 30 | depends_on: 31 | - kroma-geth 32 | container_name: kroma-node 33 | image: kromanetwork/node:${IMAGE_TAG__KROMA_NODE} 34 | restart: unless-stopped 35 | stop_grace_period: 50s 36 | env_file: 37 | - envs/mainnet/node.env 38 | ports: 39 | - 9545:8545 40 | - 7300:7300 41 | - 9003:9003/tcp 42 | - 9003:9003/udp 43 | volumes: 44 | - ./keys/p2p-node-key.txt:/.kroma/keys/p2p-node-key.txt 45 | - ./keys/jwt-secret.txt:/.kroma/keys/jwt-secret.txt 46 | - ./config/mainnet/rollup.json:/.kroma/config/rollup.json 47 | profiles: 48 | - fullnode 49 | - validator 50 | - validator+proxy 51 | 52 | kroma-validator: 53 | depends_on: 54 | - kroma-node 55 | container_name: kroma-validator 56 | image: kromanetwork/validator:${IMAGE_TAG__KROMA_VALIDATOR} 57 | restart: unless-stopped 58 | stop_grace_period: 50s 59 | env_file: 60 | - envs/mainnet/validator.env 61 | profiles: 62 | - validator 63 | - validator+proxy 64 | 65 | kroma-prover-proxy: 66 | container_name: kroma-prover-proxy 67 | image: kromanetwork/prover-proxy:${IMAGE_TAG__KROMA_ZKEVM_PROVER_PROXY} 68 | restart: unless-stopped 69 | stop_grace_period: 50s 70 | env_file: 71 | - envs/mainnet/prover-proxy.env 72 | ports: 73 | - 6000:6000 74 | volumes: 75 | - db-mainnet:/.prover/proofs 76 | profiles: 77 | - validator+proxy 78 | 79 | # Because kroma-prover requires a lot of resources, 80 | # It is recommended to run it on a different server rather than on the same server. 81 | kroma-prover: 82 | container_name: kroma-prover 83 | image: kromanetwork/prover:${IMAGE_TAG__KROMA_ZKEVM_PROVER} 84 | restart: unless-stopped 85 | stop_grace_period: 50s 86 | env_file: 87 | - envs/mainnet/prover.env 88 | ports: 89 | - 3030:3030 90 | entrypoint: 91 | - /bin/sh 92 | - -c 93 | - './prover-server --endpoint 0.0.0.0:3030' 94 | volumes: 95 | - ./data:/usr/src/kroma-prover/out_proof 96 | - ./params/kzg_params:/usr/src/kroma-prover/kzg_params 97 | profiles: 98 | - prover 99 | sp1-witness-gen: 100 | container_name: sp1-witness-gen 101 | image: kromanetwork/sp1-wit-gen:${IMAGE_TAG__SP1_WITNESS_GEN} 102 | restart: unless-stopped 103 | stop_grace_period: 50s 104 | env_file: 105 | - envs/mainnet/sp1-witness-gen.env 106 | ports: 107 | - 3030:3030 108 | profiles: 109 | - validator+proxy 110 | 111 | sp1-prover-proxy: 112 | container_name: sp1-prover-proxy 113 | image: kromanetwork/zkvm-prover-proxy:${IMAGE_TAG__SP1_PROVER_PROXY} 114 | restart: unless-stopped 115 | stop_grace_period: 50s 116 | env_file: 117 | - envs/mainnet/sp1-prover-proxy.env 118 | ports: 119 | - 3031:3031 120 | profiles: 121 | - validator+proxy 122 | 123 | prometheus: 124 | container_name: kroma-prometheus 125 | image: prom/prometheus 126 | restart: unless-stopped 127 | ports: 128 | - '9090:9090' 129 | volumes: 130 | - ./config/monitoring/prometheus.yml:/etc/prometheus/prometheus.yml 131 | - db-prometheus:/prometheus 132 | command: 133 | - --config.file=/etc/prometheus/prometheus.yml 134 | profiles: 135 | - monitoring 136 | 137 | grafana: 138 | container_name: kroma-grafana 139 | image: grafana/grafana 140 | restart: unless-stopped 141 | ports: 142 | - '3000:3000' 143 | depends_on: 144 | - prometheus 145 | volumes: 146 | - db-grafana:/var/lib/grafana 147 | - ./config/monitoring/provisioning:/etc/grafana/provisioning 148 | - ./config/monitoring/grafana.ini:/etc/grafana/grafana.ini 149 | profiles: 150 | - monitoring 151 | 152 | volumes: 153 | db-mainnet: 154 | db-prometheus: 155 | db-grafana: 156 | -------------------------------------------------------------------------------- /docker-compose-sepolia.yml: -------------------------------------------------------------------------------- 1 | services: 2 | kroma-geth: 3 | container_name: kroma-geth 4 | image: kromanetwork/geth:${IMAGE_TAG__KROMA_GETH} 5 | restart: unless-stopped 6 | stop_grace_period: 50s 7 | env_file: 8 | - envs/sepolia/geth.env 9 | entrypoint: 10 | - /bin/sh 11 | - /.kroma/entrypoint.sh 12 | ports: 13 | - 6060:6060 14 | - 8545:8545 15 | - 8546:8546 16 | - 8551:8551 17 | - 30304:30304/tcp 18 | - 30303:30303/udp 19 | volumes: 20 | - db-sepolia:/.kroma/db 21 | - ./keys/jwt-secret.txt:/.kroma/keys/jwt-secret.txt 22 | - ./config/sepolia/genesis.json:/.kroma/config/genesis.json 23 | - ./scripts/entrypoint.sh:/.kroma/entrypoint.sh 24 | profiles: 25 | - fullnode 26 | - validator 27 | - validator+proxy 28 | 29 | kroma-node: 30 | depends_on: 31 | - kroma-geth 32 | container_name: kroma-node 33 | image: kromanetwork/node:${IMAGE_TAG__KROMA_NODE} 34 | restart: unless-stopped 35 | stop_grace_period: 50s 36 | env_file: 37 | - envs/sepolia/node.env 38 | ports: 39 | - 9545:8545 40 | - 7300:7300 41 | - 9003:9003/tcp 42 | - 9003:9003/udp 43 | volumes: 44 | - ./keys/p2p-node-key.txt:/.kroma/keys/p2p-node-key.txt 45 | - ./keys/jwt-secret.txt:/.kroma/keys/jwt-secret.txt 46 | - ./config/sepolia/rollup.json:/.kroma/config/rollup.json 47 | profiles: 48 | - fullnode 49 | - validator 50 | - validator+proxy 51 | 52 | kroma-validator: 53 | depends_on: 54 | - kroma-node 55 | container_name: kroma-validator 56 | image: kromanetwork/validator:${IMAGE_TAG__KROMA_VALIDATOR} 57 | restart: unless-stopped 58 | stop_grace_period: 50s 59 | env_file: 60 | - envs/sepolia/validator.env 61 | profiles: 62 | - validator 63 | - validator+proxy 64 | 65 | kroma-prover-proxy: 66 | container_name: kroma-prover-proxy 67 | image: kromanetwork/prover-proxy:${IMAGE_TAG__KROMA_ZKEVM_PROVER_PROXY} 68 | restart: unless-stopped 69 | stop_grace_period: 50s 70 | env_file: 71 | - envs/sepolia/prover-proxy.env 72 | ports: 73 | - 6000:6000 74 | volumes: 75 | - db-sepolia:/.prover/proofs 76 | profiles: 77 | - validator+proxy 78 | 79 | # Because kroma-prover requires a lot of resources, 80 | # It is recommended to run it on a different server rather than on the same server. 81 | kroma-prover: 82 | container_name: kroma-prover 83 | image: kromanetwork/prover:${IMAGE_TAG__KROMA_ZKEVM_PROVER} 84 | restart: unless-stopped 85 | stop_grace_period: 50s 86 | env_file: 87 | - envs/sepolia/prover.env 88 | ports: 89 | - 3030:3030 90 | entrypoint: 91 | - /bin/sh 92 | - -c 93 | - './prover-server --endpoint 0.0.0.0:3030' 94 | volumes: 95 | - ./data:/usr/src/kroma-prover/out_proof 96 | - ./params/kzg_params:/usr/src/kroma-prover/kzg_params 97 | profiles: 98 | - prover 99 | 100 | sp1-witness-gen: 101 | container_name: sp1-witness-gen 102 | image: kromanetwork/sp1-wit-gen:${IMAGE_TAG__SP1_WITNESS_GEN} 103 | restart: unless-stopped 104 | stop_grace_period: 50s 105 | env_file: 106 | - envs/sepolia/sp1-witness-gen.env 107 | ports: 108 | - 3030:3030 109 | profiles: 110 | - validator+proxy 111 | 112 | sp1-prover-proxy: 113 | container_name: sp1-prover-proxy 114 | image: kromanetwork/zkvm-prover-proxy:${IMAGE_TAG__SP1_PROVER_PROXY} 115 | restart: unless-stopped 116 | stop_grace_period: 50s 117 | env_file: 118 | - envs/sepolia/sp1-prover-proxy.env 119 | ports: 120 | - 3031:3031 121 | profiles: 122 | - validator+proxy 123 | 124 | prometheus: 125 | container_name: kroma-prometheus 126 | image: prom/prometheus 127 | restart: unless-stopped 128 | ports: 129 | - '9090:9090' 130 | volumes: 131 | - ./config/monitoring/prometheus.yml:/etc/prometheus/prometheus.yml 132 | - db-prometheus:/prometheus 133 | command: 134 | - --config.file=/etc/prometheus/prometheus.yml 135 | profiles: 136 | - monitoring 137 | 138 | grafana: 139 | container_name: kroma-grafana 140 | image: grafana/grafana 141 | restart: unless-stopped 142 | ports: 143 | - '3000:3000' 144 | depends_on: 145 | - prometheus 146 | volumes: 147 | - db-grafana:/var/lib/grafana 148 | - ./config/monitoring/provisioning:/etc/grafana/provisioning 149 | - ./config/monitoring/grafana.ini:/etc/grafana/grafana.ini 150 | profiles: 151 | - monitoring 152 | 153 | volumes: 154 | db-sepolia: 155 | db-prometheus: 156 | db-grafana: 157 | -------------------------------------------------------------------------------- /.env.mainnet: -------------------------------------------------------------------------------- 1 | # Network to run the node on ("mainnet") 2 | NETWORK_NAME=mainnet 3 | 4 | IMAGE_TAG__KROMA_GETH=v0.6.3 5 | IMAGE_TAG__KROMA_NODE=v2.1.2 6 | IMAGE_TAG__KROMA_VALIDATOR=v2.1.2 7 | IMAGE_TAG__KROMA_ZKEVM_PROVER_PROXY=v0.1.3 8 | IMAGE_TAG__KROMA_ZKEVM_PROVER=v0.1.6 9 | IMAGE_TAG__SP1_WITNESS_GEN=v1.2.0 10 | IMAGE_TAG__SP1_PROVER_PROXY=v1.2.0 11 | 12 | # L1 RPC endpoint. 13 | # You can check and use one of the list of RPC endpoints: https://chainlist.org/chain/1 14 | # Or you can also use Alchemy or Infura, etc. 15 | # After Ecotone activation, you need also L1 Beacon endpoint to get blob data. 16 | # You must use a websocket RPC endpoint to run a validator node for below reasons: 17 | # As an asserter, to respond if a challenge is created to the output you submitted. 18 | # As a challenger, to observe output submission events and create challenge to an invalid output. 19 | KROMA_NODE__L1_BEACON_ENDPOINT= 20 | KROMA_NODE__L1_RPC_ENDPOINT= 21 | KROMA_VALIDATOR__L1_RPC_ENDPOINT= 22 | 23 | KROMA_GETH__BOOT_NODES=enode://acf4af39e9d9f3bbdb700315fde6e909efc714bd9a012b0f6943c4f9110008e3da2cb6c2ac9d3b6d98184a5ead57c4409be4ae7b19da1f554ceee7ba86c1fc2e@p2p-0.kroma.network:30304?discport=30303,enode://a3b6a7087b3399eefdb1ce5870aa0e58a60bfeccf3f7f7c02f5e142b1a544d19c171f7688d08db786d5e9b3ba734482bf8cf29dab7d46917b9da7f61656fde39@p2p-1.kroma.network:30304?discport=30303 24 | KROMA_NODE__BOOT_NODES=enr:-J24QIRQ_Sxsn08UW2djuM7XIiKMqDnjIRmZV3Y82aBxI396bIligpv716MNmEDitgiNzTYLx9pWVBZUmBLGZao3cJKGAYpjUHvsgmlkgnY0gmlwhA3RbWiHb3BzdGFja4P_AQCJc2VjcDI1NmsxoQO6Fg_lxKa4bqrCTRndRjP6V0Ahh_CduFC4c4khUSiRK4N0Y3CCIyuDdWRwgiMr,enr:-J24QJ0TyKGwcMuY4PCVe7Qo77pSMMkFHMHHZG5IZTtfURttM7by94vRPmFZzlteuCESo8KQC7GxEUKtRxK9dXQpvpGGAYpjUH99gmlkgnY0gmlwhAMldxyHb3BzdGFja4P_AQCJc2VjcDI1NmsxoQJXGyNhwNUSIdGsWbLChN6a47_bfRBFlFCARgjHnl6r-YN0Y3CCIyuDdWRwgiMr 25 | 26 | # Historical RPC endpoint. If you want to set up your own historical RPC node, then replace it with your endpoint. 27 | KROMA_GETH__HISTORICAL_RPC=https://api-historical.mainnet.kroma.network 28 | 29 | # If you choose not to migrate to MPT, set this to true. 30 | KROMA_GETH__DISABLE_MPT_MIGRATION=false 31 | 32 | #===========================================================================# 33 | # ↓ The following settings are used to act as a Kroma-validator ↓ # 34 | #===========================================================================# 35 | 36 | # To run a validator, Account's PRIVATE_KEY or MNEMONIC and HD_PATH is/are required. 37 | 38 | # If you are using MNEMONIC and HD_PATH, enter them here 39 | KROMA_VALIDATOR__MNEMONIC= 40 | KROMA_VALIDATOR__HD_PATH= 41 | 42 | # If you are using PRIVATE_KEY, enter them here 43 | KROMA_VALIDATOR__PRIVATE_KEY= 44 | 45 | # Kroma-validator as an output submitter. If you want to submit an L2 output in public round, set KROMA_VALIDATOR__ALLOW_PUBLIC_ROUND true. 46 | KROMA_VALIDATOR__OUTPUT_SUBMITTER_ENABLED=true 47 | KROMA_VALIDATOR__ALLOW_PUBLIC_ROUND=false 48 | 49 | # Kroma-validator as a challenger. 50 | # Challenger is disabled by default. If you want to run a challenger, you need to run a Kroma-prover as well. 51 | KROMA_VALIDATOR__CHALLENGER_ENABLED=false 52 | 53 | # Kroma-validator as a guardian. 54 | # Guardian is disabled by default. Guardian is only for Security Council. 55 | KROMA_VALIDATOR__GUARDIAN_ENABLED=false 56 | 57 | # Kroma-prover is required if the challenger is enabled. 58 | # This is deprecated after transition to zkVM fault proof at Kroma MPT upgrade. 59 | # The RPC endpoint of Kroma-prover for zkEVM proof generation. 60 | KROMA_VALIDATOR__ZKEVM_PROVER_PROXY_RPC=http://kroma-prover-proxy:6000 61 | 62 | # SP1-prover-proxy and SP1-witness-generator are required if the challenger is enabled. 63 | # The RPC endpoint of SP1-prover-proxy for zkVM fault proof generation. 64 | KROMA_VALIDATOR__ZKVM_PROVER_PROXY_RPC=http://sp1-prover-proxy:3031 65 | 66 | # The RPC endpoint of SP1-witness-generator for zkVM witness generation. 67 | KROMA_VALIDATOR__ZKVM_WITNESS_GENERATOR_RPC=http://sp1-witness-gen:3030 68 | 69 | #===================================================================# 70 | # ↓ The following settings are used for Kroma-Prover-Proxy ↓ # 71 | # This is deprecated after KromaMPT hard fork upgrade. # 72 | #===================================================================# 73 | # We recommend to use the values provided by default 74 | KROMA_PROVER_PROXY__PROVER_BASE_DIR=/.prover/proofs 75 | KROMA_PROVER_PROXY__PROVER_URL_SCHEMA=http 76 | KROMA_PROVER_PROXY__PROVER_RPC_PORT=3030 77 | 78 | # If you are using aws access key, you must enter it. 79 | KROMA_PROVER_PROXY__AWS_REGION= 80 | KROMA_PROVER_PROXY__AWS_ACCESS_KEY_ID= 81 | KROMA_PROVER_PROXY__AWS_SECRET_ACCESS_KEY= 82 | 83 | # Currently, Kroma-prover-proxy only supports AWS, so you'll need to enter the AWS EC2 instance ID where the Kroma-prover is running. 84 | KROMA_PROVER_PROXY__PROVER_INSTANCE_ID= 85 | 86 | # You need to specify in which network environment the Kroma-prover-proxy will call Kroma-prover. 87 | # If Kroma-prover-proxy and Kroma-prover are on the same network, set it to `private` so that the communication is internal. 88 | # However, if they are on different networks, set it to `public` so that Kroma-prover can utilize the Public IP of the instance it is running on. 89 | KROMA_PROVER_PROXY__PROVER_ADDRESS_TYPE= 90 | 91 | 92 | #===========================================================================================# 93 | # ↓ The following settings are used for SP1-Prover-Proxy and SP1-Witness-Generator ↓ # 94 | # This is used after the KromaMPT hard fork upgrade. # 95 | #===========================================================================================# 96 | # API key in order to use SP1's prover network. 97 | # Need to be issued from Succinct team. 98 | SP1_PROVER_PROXY__PRIVATE_KEY= 99 | 100 | # Configuration for running a Witness generator. 101 | # !!! IMPORTANT !!! 102 | # L1_RPC and L2_RPC must have the debug API enabled. 103 | # This is a critical requirement for proper functionality. 104 | SP1_WITNESS_GEN__L1_RPC= 105 | SP1_WITNESS_GEN__L1_BEACON_RPC= 106 | SP1_WITNESS_GEN__L2_RPC= 107 | SP1_WITNESS_GEN__L2_NODE_RPC= 108 | 109 | # Represents the maximum batch interval for the batcher. 110 | # The relationship between MAX_BATCH_POST_DELAY_MIN and BATCHER_MAX_CHANNEL_DURATION is: 111 | # MAX_BATCH_POST_DELAY_MIN = BATCHER_MAX_CHANNEL_DURATION * 12 / 60. 112 | SP1_WITNESS_GEN__MAX_BATCH_POST_DELAY_MIN=20 113 | 114 | # Set SKIP_SIMULATION to true to enable self-verification of the generated witness. 115 | # If your system has fewer than 8 CPU cores, it is recommended to set it to false. 116 | SP1_WITNESS_GEN__SKIP_SIMULATION=false 117 | -------------------------------------------------------------------------------- /.env.sepolia: -------------------------------------------------------------------------------- 1 | # Network to run the node on ("sepolia") 2 | NETWORK_NAME=sepolia 3 | 4 | IMAGE_TAG__KROMA_GETH=v0.6.3 5 | IMAGE_TAG__KROMA_NODE=v2.1.2 6 | IMAGE_TAG__KROMA_VALIDATOR=v2.1.2 7 | IMAGE_TAG__KROMA_ZKEVM_PROVER_PROXY=v0.1.3 8 | IMAGE_TAG__KROMA_ZKEVM_PROVER=v0.1.6 9 | IMAGE_TAG__SP1_WITNESS_GEN=v1.2.0 10 | IMAGE_TAG__SP1_PROVER_PROXY=v1.2.0 11 | 12 | # L1 RPC endpoint. 13 | # You can check and use one of the list of RPC endpoints: https://chainlist.org/chain/11155111 14 | # Or you can also use Alchemy or Infura, etc. 15 | # After Ecotone activation, you need also L1 Beacon endpoint to get blob data. 16 | # You must use a websocket RPC endpoint to run a validator node for below reasons: 17 | # As an asserter, to respond if a challenge is created to the output you submitted. 18 | # As a challenger, to observe output submission events and create challenge to an invalid output. 19 | KROMA_NODE__L1_BEACON_ENDPOINT= 20 | KROMA_NODE__L1_RPC_ENDPOINT= 21 | KROMA_VALIDATOR__L1_RPC_ENDPOINT= 22 | 23 | KROMA_GETH__BOOT_NODES=enode://eb7d517a51f12d565c53fc3c2bd7d830951626403fd41ddcaa356a5a63aaf700a99856dea5f805ab52e956dbb09017c868af5c2503f0753d598449d0987d0867@p2p-0.sepolia.kroma.network:30304?discport=30303,enode://11a22dd7e0242395c0383679c046b6c37ed7bb085b5ef9229314219b6d56d676208a22ff33487e23bde4a4e2693c243ec38e18f385a5e9fcc89c01b907c65731@p2p-1.sepolia.kroma.network:30304?discport=30303 24 | KROMA_NODE__BOOT_NODES=enr:-J24QNScwSQ9xyCI9TuC4z55f1mUTH7UwwU6XrdRkXTry5okQDMDQVzeGXKGlCMGCjW09zZdGCLBppgx7I-IlyAHTL2GAYora1atgmlkgnY0gmlwhCvKZq2Hb3BzdGFja4O2EgCJc2VjcDI1NmsxoQI5RRcWthXDZBQIWy2V5f0F6vU5ULQ7Onz0J-jOwom-O4N0Y3CCIyuDdWRwgiMr,enr:-J24QOJ08WAtwmF8ZQf9xMYc1XNAheQYbWQmyDdsMJywUD1SLG6gfhGqgJp-wUgZTtIazd8WwUf9ziehfxF-grArB32GAYorbLu4gmlkgnY0gmlwhDRPliiHb3BzdGFja4O2EgCJc2VjcDI1NmsxoQJxu9bJv02qtIehfeOmtA8B_RWqZylpHOGOOBuWQo-xXoN0Y3CCIyuDdWRwgiMr 25 | 26 | # Historical RPC endpoint. If you want to set up your own historical RPC node, then replace it with your endpoint. 27 | KROMA_GETH__HISTORICAL_RPC=https://api-historical.sepolia.kroma.network 28 | 29 | # If you choose not to migrate to MPT, set this to true. 30 | KROMA_GETH__DISABLE_MPT_MIGRATION=false 31 | 32 | #===========================================================================# 33 | # ↓ The following settings are used to act as a Kroma-validator ↓ # 34 | #===========================================================================# 35 | 36 | # To run a validator, Account's PRIVATE_KEY or MNEMONIC and HD_PATH is/are required. 37 | 38 | # If you are using MNEMONIC and HD_PATH, enter them here 39 | KROMA_VALIDATOR__MNEMONIC= 40 | KROMA_VALIDATOR__HD_PATH= 41 | 42 | # If you are using PRIVATE_KEY, enter them here 43 | KROMA_VALIDATOR__PRIVATE_KEY= 44 | 45 | # Kroma-validator as an output submitter. If you want to submit an L2 output in public round, set KROMA_VALIDATOR__ALLOW_PUBLIC_ROUND true. 46 | KROMA_VALIDATOR__OUTPUT_SUBMITTER_ENABLED=true 47 | KROMA_VALIDATOR__ALLOW_PUBLIC_ROUND=false 48 | 49 | # Kroma-validator as a challenger. 50 | # Challenger is disabled by default. If you want to run a challenger, you need to run a Kroma-prover as well. 51 | KROMA_VALIDATOR__CHALLENGER_ENABLED=false 52 | 53 | # Kroma-validator as a guardian. 54 | # Guardian is disabled by default. Guardian is only for Security Council. 55 | KROMA_VALIDATOR__GUARDIAN_ENABLED=false 56 | 57 | # Kroma-prover is required if the challenger is enabled. 58 | # This is deprecated after transition to zkVM fault proof at Kroma MPT upgrade. 59 | # The RPC endpoint of Kroma-prover for zkEVM proof generation. 60 | KROMA_VALIDATOR__ZKEVM_PROVER_PROXY_RPC=http://kroma-prover-proxy:6000 61 | 62 | # SP1-prover-proxy and SP1-witness-generator are required if the challenger is enabled. 63 | # The RPC endpoint of SP1-prover-proxy for zkVM fault proof generation. 64 | KROMA_VALIDATOR__ZKVM_PROVER_PROXY_RPC=http://sp1-prover-proxy:3031 65 | 66 | # The RPC endpoint of SP1-witness-generator for zkVM witness generation. 67 | KROMA_VALIDATOR__ZKVM_WITNESS_GENERATOR_RPC=http://sp1-witness-gen:3030 68 | 69 | #===================================================================# 70 | # ↓ The following settings are used for Kroma-Prover-Proxy ↓ # 71 | # This is deprecated after KromaMPT hard fork upgrade. # 72 | #===================================================================# 73 | # We recommend to use the values provided by default 74 | KROMA_PROVER_PROXY__PROVER_BASE_DIR=/.prover/proofs 75 | KROMA_PROVER_PROXY__PROVER_URL_SCHEMA=http 76 | KROMA_PROVER_PROXY__PROVER_RPC_PORT=3030 77 | 78 | # If you are using aws access key, you must enter it. 79 | KROMA_PROVER_PROXY__AWS_REGION= 80 | KROMA_PROVER_PROXY__AWS_ACCESS_KEY_ID= 81 | KROMA_PROVER_PROXY__AWS_SECRET_ACCESS_KEY= 82 | 83 | # Currently, Kroma-prover-proxy only supports AWS, so you'll need to enter the AWS EC2 instance ID where the Kroma-prover is running. 84 | KROMA_PROVER_PROXY__PROVER_INSTANCE_ID= 85 | 86 | # You need to specify in which network environment the Kroma-prover-proxy will call Kroma-prover. 87 | # If Kroma-prover-proxy and Kroma-prover are on the same network, set it to `private` so that the communication is internal. 88 | # However, if they are on different networks, set it to `public` so that Kroma-prover can utilize the Public IP of the instance it is running on. 89 | KROMA_PROVER_PROXY__PROVER_ADDRESS_TYPE= 90 | 91 | 92 | #===========================================================================================# 93 | # ↓ The following settings are used for SP1-Prover-Proxy and SP1-Witness-Generator ↓ # 94 | # This is used after the KromaMPT hard fork upgrade. # 95 | #===========================================================================================# 96 | # API key in order to use SP1's prover network. 97 | # Need to be issued from Succinct team. 98 | SP1_PROVER_PROXY__PRIVATE_KEY= 99 | 100 | # Configuration for running a Witness generator. 101 | # !!! IMPORTANT !!! 102 | # L1_RPC and L2_RPC must have the debug API enabled. 103 | # This is a critical requirement for proper functionality. 104 | SP1_WITNESS_GEN__L1_RPC= 105 | SP1_WITNESS_GEN__L1_BEACON_RPC= 106 | SP1_WITNESS_GEN__L2_RPC= 107 | SP1_WITNESS_GEN__L2_NODE_RPC= 108 | 109 | # Represents the maximum batch interval for the batcher. 110 | # The relationship between MAX_BATCH_POST_DELAY_MIN and BATCHER_MAX_CHANNEL_DURATION is: 111 | # MAX_BATCH_POST_DELAY_MIN = BATCHER_MAX_CHANNEL_DURATION * 12 / 60. 112 | SP1_WITNESS_GEN__MAX_BATCH_POST_DELAY_MIN=20 113 | 114 | # Set SKIP_SIMULATION to true to enable self-verification of the generated witness. 115 | # If your system has fewer than 8 CPU cores, it is recommended to set it to false. 116 | SP1_WITNESS_GEN__SKIP_SIMULATION=false 117 | -------------------------------------------------------------------------------- /upgrades/v2.1.1+geth.v0.6.1.md: -------------------------------------------------------------------------------- 1 | # Kroma `v2.1.1+geth.v0.6.1` Upgrade Instructions 2 | 3 | This document provides instructions to upgrade from Kroma `v2.0.0+geth.v0.5.4` to `v2.1.1+geth.v0.6.1`. 4 | For more details about `v2.1.1+geth.v0.6.1`, please refer the [Kroma release note](https://github.com/kroma-network/kroma/releases/tag/v2.1.1) and [Kroma-geth release note](https://github.com/kroma-network/go-ethereum/releases/tag/v0.6.1). 5 | 6 | This upgrade mainly includes the transition of fault proof from zkEVM to zkVM and the Kroma MPT upgrade. For more 7 | details about the fault proof transition and Kroma MPT upgrade, please refer the [zkVM fault proof system specification](https://specs.kroma.network/zk-fault-proof/zkvm-prover.html) and [MPT migration specification](https://specs.kroma.network/protocol/mpt-migration/overview.html). 8 | 9 | This upgrade will trigger migrator program at the kroma-geth to migrate the state trie from ZK Trie to Merkle Patricia 10 | Tree. This may take over 36 hours in the worst case depending on the machine spec, so all full nodes and validators 11 | are recommended to complete the upgrade with a few extra days before the Kroma MPT time. 12 | The activation time of Kroma MPT upgrade is scheduled as below: 13 | 14 | - Kroma sepolia: `Thu Jan 17 2025 05:00:00 UTC` 15 | - Kroma mainnet: `Tue Feb 11 2025 05:00:01 UTC` 16 | 17 | ## Guides for upgrade 18 | 19 | ### Pull the latest version of kroma-up 20 | 21 | First of all, pull the latest kroma-up and checkout to `v2.1.1+geth.v0.6.1`. 22 | 23 | ```bash 24 | git fetch origin 25 | git pull origin main 26 | git checkout tags/v2.1.1+geth.v0.6.1 27 | ``` 28 | 29 | ### Stop Kroma 30 | 31 | For upgrade, stop your Kroma full node or validator. 32 | 33 | ```bash 34 | # for full node 35 | docker compose -f docker-compose-.yml --profile fullnode down 36 | 37 | # for validator 38 | docker compose -f docker-compose-.yml --profile validator down 39 | ``` 40 | 41 | ### Common 42 | 43 | You need to update your `.env` file. 44 | 45 | First, update the docker image tag of `kroma-geth`, `kroma-node` and `kroma-validator`. 46 | 47 | ```text 48 | IMAGE_TAG__KROMA_GETH=v0.6.1 49 | IMAGE_TAG__KROMA_NODE=v2.1.1 50 | IMAGE_TAG__KROMA_VALIDATOR=v2.1.1 51 | ``` 52 | 53 | Also, additional fields are added to `rollup.json`. Please check your `rollup.json` and make sure that the following 54 | fields are added appropriately. You can also refer the modified [`rollup.json`](../config/sepolia/rollup.json) for 55 | Kroma Sepolia and [`rollup.json`](../config/mainnet/rollup.json) for Kroma Mainnet. 56 | 57 | For Kroma sepolia, 58 | 59 | ```json 60 | { 61 | "kroma_mpt_time": 1737090000 62 | } 63 | ``` 64 | 65 | For Kroma Mainnet, 66 | 67 | ```json 68 | { 69 | "kroma_mpt_time": 1739250001 70 | } 71 | ``` 72 | 73 | For the zkVM fault proof, you need to add new RPC URLs and update the variables in `validator.env`. Please make 74 | sure that the following fields are added. You can also refer the modified `validator.env` file for 75 | [Kroma Sepolia](../envs/sepolia/validator.env) or [Kroma Mainnet](../envs/mainnet/validator.env). 76 | 77 | - `VALIDATOR_CHALLENGER_POLL_INTERVAL` is changed to `VALIDATOR_CHALLENGE_POLL_INTERVAL`. 78 | - `VALIDATOR_FETCHING_PROOF_TIMEOUT` is changed to `VALIDATOR_CHALLENGER_ZKEVM_NETWORK_TIMEOUT`. 79 | - `VALIDATOR_PROVER_RPC` is changed to `VALIDATOR_CHALLENGER_ZKEVM_PROVER_RPC`, and deprecated after Kroma MPT time. 80 | - `VALIDATOR_CHALLENGER_ZKVM_PROVER_RPC` and `VALIDATOR_CHALLENGER_WITNESS_GENERATOR_RPC` is added. So if you run 81 | a challenger, set the RPC URLs for the prover and witness generator. 82 | 83 | If you run a challenger, you should set up the prover-proxy and witness-generator. For more details about the 84 | components, refer the [prover migration guide](https://docs.kroma.network/builders/node-operators/kroma-mpt-migration-guide#prover-migration). 85 | To spin up prover-proxy and witness-generator for zkVM proof generation, add the following fields in your `.env`. 86 | For Prover Proxy, 87 | 88 | ```text 89 | SP1_PROVER_PROXY__PRIVATE_KEY= 90 | ``` 91 | 92 | For Witness Generator, 93 | 94 | ```text 95 | SP1_WITNESS_GEN__L1_RPC= 96 | SP1_WITNESS_GEN__L1_BEACON_RPC= 97 | SP1_WITNESS_GEN__L2_RPC= 98 | SP1_WITNESS_GEN__L2_NODE_RPC= 99 | MAX_BATCH_POST_DELAY_MIN=20 100 | SKIP_SIMULATION=false 101 | ``` 102 | 103 | If you run an archive node or a validator node, you need to set the `KROMA_GETH__HISTORICAL_RPC` as follows, 104 | for retrieving accurate data of pre-MPT blocks after Kroma MPT time. 105 | 106 | For Kroma sepolia, 107 | 108 | ```text 109 | KROMA_GETH__HISTORICAL_RPC=https://api-historical.sepolia.kroma.network 110 | KROMA_GETH__DISABLE_MPT_MIGRATION=false 111 | ``` 112 | 113 | For Kroma Mainnet, 114 | 115 | ```text 116 | KROMA_GETH__HISTORICAL_RPC=https://api-historical.mainnet.kroma.network 117 | KROMA_GETH__DISABLE_MPT_MIGRATION=false 118 | ``` 119 | 120 | Then, you need to add the following variable at `geth.env`. You can also refer the modified `geth.env` file for 121 | [Kroma Sepolia](../envs/sepolia/geth.env) or [Kroma Mainnet](../envs/mainnet/geth.env). 122 | 123 | ```text 124 | HISTORICAL_RPC=${KROMA_GETH__HISTORICAL_RPC} 125 | DISABLE_MIGRATION=${KROMA_GETH__DISABLE_MPT_MIGRATION} 126 | ``` 127 | 128 | Optionally, you may choose not to proceed with the MPT upgrade through the migrator by setting the following 129 | variable as true as follows in your `.env`. 130 | 131 | ```text 132 | KROMA_GETH__DISABLE_MPT_MIGRATION=true 133 | ``` 134 | 135 | This will temporarily trigger the halt of geth at the Kroma MPT time. It is recommended to deactivate the P2P 136 | connections in this period. Afterward, you can resume the node by syncing it with the post-MPT snapshot that will be 137 | provided shortly after the Kroma MPT time. 138 | 139 | If you run a challenger, it is recommended to turn off the prover-proxy that is used previously used for generating 140 | zkEVM proof after Kroma MPT time. Then you may remove the URL at `KROMA_VALIDATOR__ZKEVM_PROVER_PROXY_RPC` in your 141 | `.env` file. 142 | 143 | ### Start Kroma 144 | 145 | You can now start Kroma full node or validator node with a new version. 146 | 147 | ```bash 148 | # for full node 149 | docker compose -f docker-compose-.yml --profile fullnode up -d 150 | 151 | # for validator 152 | docker compose -f docker-compose-.yml --profile validator up -d 153 | ``` 154 | 155 | ### Restart Kroma after MPT hardfork completed 156 | 157 | When the Kroma MPT hardfork has been completed (confirmed by the `All states have been transitioned to MPT` log in kroma-geth), 158 | restarting your node is recommended for smooth P2P connections. Please follow the steps below to restart your node: 159 | 160 | ```bash 161 | docker compose -f docker-compose-.yml --profile fullnode down 162 | docker compose -f docker-compose-.yml --profile fullnode up -d 163 | ``` 164 | -------------------------------------------------------------------------------- /config/monitoring/provisioning/dashboards/dashbaord-validator.json: -------------------------------------------------------------------------------- 1 | { 2 | "annotations": { 3 | "list": [ 4 | { 5 | "builtIn": 1, 6 | "datasource": { 7 | "type": "datasource", 8 | "uid": "grafana" 9 | }, 10 | "enable": true, 11 | "hide": true, 12 | "iconColor": "rgba(0, 211, 255, 1)", 13 | "name": "Annotations & Alerts", 14 | "target": { 15 | "limit": 100, 16 | "matchAny": false, 17 | "tags": [], 18 | "type": "dashboard" 19 | }, 20 | "type": "dashboard" 21 | } 22 | ] 23 | }, 24 | "editable": true, 25 | "fiscalYearStartMonth": 0, 26 | "graphTooltip": 0, 27 | "id": 2, 28 | "links": [], 29 | "panels": [ 30 | { 31 | "fieldConfig": { 32 | "defaults": {}, 33 | "overrides": [] 34 | }, 35 | "gridPos": { 36 | "h": 6, 37 | "w": 4, 38 | "x": 0, 39 | "y": 0 40 | }, 41 | "id": 66, 42 | "options": { 43 | "code": { 44 | "language": "plaintext", 45 | "showLineNumbers": false, 46 | "showMiniMap": false 47 | }, 48 | "content": "![kroma](https://kroma.network/kroma-og.png)", 49 | "mode": "markdown" 50 | }, 51 | "pluginVersion": "11.3.0", 52 | "title": "", 53 | "transparent": true, 54 | "type": "text" 55 | }, 56 | { 57 | "datasource": { 58 | "type": "prometheus", 59 | "uid": "PBFA97CFB590B2093" 60 | }, 61 | "description": "The version of Kroma validator node", 62 | "fieldConfig": { 63 | "defaults": { 64 | "color": { 65 | "mode": "thresholds" 66 | }, 67 | "mappings": [], 68 | "thresholds": { 69 | "mode": "absolute", 70 | "steps": [ 71 | { 72 | "color": "green", 73 | "value": null 74 | }, 75 | { 76 | "color": "red", 77 | "value": 80 78 | } 79 | ] 80 | } 81 | }, 82 | "overrides": [] 83 | }, 84 | "gridPos": { 85 | "h": 3, 86 | "w": 3, 87 | "x": 4, 88 | "y": 0 89 | }, 90 | "id": 67, 91 | "options": { 92 | "colorMode": "value", 93 | "graphMode": "none", 94 | "justifyMode": "auto", 95 | "orientation": "auto", 96 | "percentChangeColorMode": "standard", 97 | "reduceOptions": { 98 | "calcs": [ 99 | "lastNotNull" 100 | ], 101 | "fields": "/^v2\\.0\\.0$/", 102 | "values": false 103 | }, 104 | "showPercentChange": false, 105 | "textMode": "name", 106 | "wideLayout": true 107 | }, 108 | "pluginVersion": "11.3.0", 109 | "targets": [ 110 | { 111 | "datasource": { 112 | "type": "prometheus" 113 | }, 114 | "editorMode": "code", 115 | "expr": "kroma_validator_default_info", 116 | "instant": false, 117 | "legendFormat": "{{version}}", 118 | "range": true, 119 | "refId": "A" 120 | } 121 | ], 122 | "title": "Validator Version", 123 | "type": "stat" 124 | }, 125 | { 126 | "datasource": { 127 | "type": "prometheus" 128 | }, 129 | "description": "ETH balance of the validator account you specified in the .env file (KROMA_VALIDATOR__MNEMONIC, KROMA_VALIDATOR__HD_PATH, KROMA_VALIDATOR__PRIVATE_KEY)", 130 | "fieldConfig": { 131 | "defaults": { 132 | "color": { 133 | "mode": "thresholds" 134 | }, 135 | "mappings": [], 136 | "noValue": "0", 137 | "thresholds": { 138 | "mode": "absolute", 139 | "steps": [ 140 | { 141 | "color": "green", 142 | "value": null 143 | } 144 | ] 145 | }, 146 | "unit": "ETH" 147 | }, 148 | "overrides": [] 149 | }, 150 | "gridPos": { 151 | "h": 3, 152 | "w": 3, 153 | "x": 7, 154 | "y": 0 155 | }, 156 | "id": 50, 157 | "options": { 158 | "colorMode": "value", 159 | "graphMode": "none", 160 | "justifyMode": "auto", 161 | "orientation": "auto", 162 | "percentChangeColorMode": "standard", 163 | "reduceOptions": { 164 | "calcs": [ 165 | "lastNotNull" 166 | ], 167 | "fields": "", 168 | "values": false 169 | }, 170 | "showPercentChange": false, 171 | "textMode": "auto", 172 | "wideLayout": true 173 | }, 174 | "pluginVersion": "11.3.0", 175 | "targets": [ 176 | { 177 | "datasource": { 178 | "type": "prometheus" 179 | }, 180 | "editorMode": "code", 181 | "expr": "kroma_validator_default_balance", 182 | "legendFormat": "{{job}}", 183 | "range": true, 184 | "refId": "A" 185 | } 186 | ], 187 | "title": "Balance (ETH)", 188 | "type": "stat" 189 | }, 190 | { 191 | "datasource": { 192 | "type": "prometheus" 193 | }, 194 | "description": "The L2 latest block number which your kroma-node has", 195 | "fieldConfig": { 196 | "defaults": { 197 | "color": { 198 | "mode": "thresholds" 199 | }, 200 | "mappings": [], 201 | "thresholds": { 202 | "mode": "absolute", 203 | "steps": [ 204 | { 205 | "color": "green", 206 | "value": null 207 | } 208 | ] 209 | }, 210 | "unit": "Block" 211 | }, 212 | "overrides": [] 213 | }, 214 | "gridPos": { 215 | "h": 3, 216 | "w": 4, 217 | "x": 10, 218 | "y": 0 219 | }, 220 | "id": 47, 221 | "options": { 222 | "colorMode": "value", 223 | "graphMode": "none", 224 | "justifyMode": "center", 225 | "orientation": "auto", 226 | "percentChangeColorMode": "standard", 227 | "reduceOptions": { 228 | "calcs": [ 229 | "lastNotNull" 230 | ], 231 | "fields": "", 232 | "values": false 233 | }, 234 | "showPercentChange": false, 235 | "textMode": "auto", 236 | "wideLayout": true 237 | }, 238 | "pluginVersion": "11.3.0", 239 | "targets": [ 240 | { 241 | "datasource": { 242 | "type": "prometheus" 243 | }, 244 | "editorMode": "code", 245 | "expr": "kroma_validator_default_refs_number{layer=\"l2\"}", 246 | "legendFormat": "{{layer}}", 247 | "range": true, 248 | "refId": "A" 249 | } 250 | ], 251 | "title": "L2 Latest Block Number", 252 | "type": "stat" 253 | }, 254 | { 255 | "datasource": { 256 | "type": "prometheus" 257 | }, 258 | "description": "The transaction fee of your output submission tx (This metric will appear after the first output submission tx is submitted, and reset when your validator node is restarted)", 259 | "fieldConfig": { 260 | "defaults": { 261 | "color": { 262 | "mode": "thresholds" 263 | }, 264 | "mappings": [], 265 | "noValue": "0", 266 | "thresholds": { 267 | "mode": "absolute", 268 | "steps": [ 269 | { 270 | "color": "green", 271 | "value": null 272 | } 273 | ] 274 | }, 275 | "unit": "Gwei" 276 | }, 277 | "overrides": [] 278 | }, 279 | "gridPos": { 280 | "h": 6, 281 | "w": 3, 282 | "x": 14, 283 | "y": 0 284 | }, 285 | "id": 30, 286 | "options": { 287 | "colorMode": "value", 288 | "graphMode": "none", 289 | "justifyMode": "auto", 290 | "orientation": "auto", 291 | "percentChangeColorMode": "standard", 292 | "reduceOptions": { 293 | "calcs": [ 294 | "lastNotNull" 295 | ], 296 | "fields": "", 297 | "values": false 298 | }, 299 | "showPercentChange": false, 300 | "textMode": "auto", 301 | "wideLayout": true 302 | }, 303 | "pluginVersion": "11.3.0", 304 | "targets": [ 305 | { 306 | "datasource": { 307 | "type": "prometheus" 308 | }, 309 | "editorMode": "code", 310 | "expr": "kroma_validator_default_txmgr_tx_fee_gwei", 311 | "legendFormat": "{{pod}}", 312 | "range": true, 313 | "refId": "A" 314 | } 315 | ], 316 | "title": "Output Submission Tx Fee", 317 | "type": "stat" 318 | }, 319 | { 320 | "datasource": { 321 | "type": "prometheus" 322 | }, 323 | "description": "The total number of successful output submission txs by your validator node (This metric will appear after the first output submission tx is submitted, and reset when your validator node is restarted)", 324 | "fieldConfig": { 325 | "defaults": { 326 | "color": { 327 | "mode": "thresholds" 328 | }, 329 | "mappings": [], 330 | "noValue": "0", 331 | "thresholds": { 332 | "mode": "absolute", 333 | "steps": [ 334 | { 335 | "color": "green", 336 | "value": null 337 | } 338 | ] 339 | } 340 | }, 341 | "overrides": [] 342 | }, 343 | "gridPos": { 344 | "h": 3, 345 | "w": 4, 346 | "x": 17, 347 | "y": 0 348 | }, 349 | "id": 65, 350 | "options": { 351 | "colorMode": "value", 352 | "graphMode": "none", 353 | "justifyMode": "center", 354 | "orientation": "auto", 355 | "percentChangeColorMode": "standard", 356 | "reduceOptions": { 357 | "calcs": [ 358 | "lastNotNull" 359 | ], 360 | "fields": "", 361 | "values": false 362 | }, 363 | "showPercentChange": false, 364 | "textMode": "value", 365 | "wideLayout": true 366 | }, 367 | "pluginVersion": "11.3.0", 368 | "targets": [ 369 | { 370 | "datasource": { 371 | "type": "prometheus" 372 | }, 373 | "editorMode": "code", 374 | "expr": "kroma_validator_default_txmgr_confirm_total{status=\"success\"}", 375 | "legendFormat": "", 376 | "range": true, 377 | "refId": "A" 378 | } 379 | ], 380 | "title": "Output Submission Tx Success Confirmed", 381 | "type": "stat" 382 | }, 383 | { 384 | "datasource": { 385 | "type": "prometheus" 386 | }, 387 | "description": "The total number of output submission txs published by your validator node (This metric will appear after the first output submission tx is submitted, and reset when your validator node is restarted)", 388 | "fieldConfig": { 389 | "defaults": { 390 | "color": { 391 | "mode": "thresholds" 392 | }, 393 | "mappings": [], 394 | "noValue": "0", 395 | "thresholds": { 396 | "mode": "absolute", 397 | "steps": [ 398 | { 399 | "color": "green", 400 | "value": null 401 | } 402 | ] 403 | } 404 | }, 405 | "overrides": [] 406 | }, 407 | "gridPos": { 408 | "h": 6, 409 | "w": 3, 410 | "x": 21, 411 | "y": 0 412 | }, 413 | "id": 64, 414 | "options": { 415 | "colorMode": "value", 416 | "graphMode": "none", 417 | "justifyMode": "center", 418 | "orientation": "auto", 419 | "percentChangeColorMode": "standard", 420 | "reduceOptions": { 421 | "calcs": [ 422 | "lastNotNull" 423 | ], 424 | "fields": "", 425 | "values": false 426 | }, 427 | "showPercentChange": false, 428 | "textMode": "auto", 429 | "wideLayout": true 430 | }, 431 | "pluginVersion": "11.3.0", 432 | "targets": [ 433 | { 434 | "datasource": { 435 | "type": "prometheus" 436 | }, 437 | "editorMode": "code", 438 | "expr": "kroma_validator_default_txmgr_publish_total", 439 | "legendFormat": "__auto", 440 | "range": true, 441 | "refId": "A" 442 | } 443 | ], 444 | "title": "Output Submission Tx Published", 445 | "type": "stat" 446 | }, 447 | { 448 | "datasource": { 449 | "type": "prometheus", 450 | "uid": "PBFA97CFB590B2093" 451 | }, 452 | "description": "The status of your validator (to submit output, should be 5. More info about the status, refer https://specs.kroma.network/protocol/validator-v2/validator-manager.html#status-of-validator)", 453 | "fieldConfig": { 454 | "defaults": { 455 | "color": { 456 | "mode": "thresholds" 457 | }, 458 | "mappings": [], 459 | "noValue": "0", 460 | "thresholds": { 461 | "mode": "absolute", 462 | "steps": [ 463 | { 464 | "color": "red", 465 | "value": null 466 | }, 467 | { 468 | "color": "green", 469 | "value": 5 470 | } 471 | ] 472 | } 473 | }, 474 | "overrides": [] 475 | }, 476 | "gridPos": { 477 | "h": 3, 478 | "w": 3, 479 | "x": 4, 480 | "y": 3 481 | }, 482 | "id": 68, 483 | "options": { 484 | "colorMode": "value", 485 | "graphMode": "none", 486 | "justifyMode": "auto", 487 | "orientation": "auto", 488 | "percentChangeColorMode": "standard", 489 | "reduceOptions": { 490 | "calcs": [ 491 | "lastNotNull" 492 | ], 493 | "fields": "", 494 | "values": false 495 | }, 496 | "showPercentChange": false, 497 | "textMode": "value", 498 | "wideLayout": true 499 | }, 500 | "pluginVersion": "11.3.0", 501 | "targets": [ 502 | { 503 | "editorMode": "code", 504 | "expr": "kroma_validator_default_validator_status", 505 | "legendFormat": "__auto", 506 | "range": true, 507 | "refId": "A" 508 | } 509 | ], 510 | "title": "Validator Status", 511 | "type": "stat" 512 | }, 513 | { 514 | "datasource": { 515 | "type": "prometheus" 516 | }, 517 | "description": "The amount of deposited KRO from the validator (not including bonded KRO)", 518 | "fieldConfig": { 519 | "defaults": { 520 | "color": { 521 | "mode": "thresholds" 522 | }, 523 | "mappings": [], 524 | "noValue": "0", 525 | "thresholds": { 526 | "mode": "absolute", 527 | "steps": [ 528 | { 529 | "color": "yellow", 530 | "value": null 531 | }, 532 | { 533 | "color": "green", 534 | "value": 0 535 | } 536 | ] 537 | }, 538 | "unit": "KRO" 539 | }, 540 | "overrides": [] 541 | }, 542 | "gridPos": { 543 | "h": 3, 544 | "w": 3, 545 | "x": 7, 546 | "y": 3 547 | }, 548 | "id": 63, 549 | "options": { 550 | "colorMode": "value", 551 | "graphMode": "none", 552 | "justifyMode": "center", 553 | "orientation": "auto", 554 | "percentChangeColorMode": "standard", 555 | "reduceOptions": { 556 | "calcs": [ 557 | "lastNotNull" 558 | ], 559 | "fields": "", 560 | "values": false 561 | }, 562 | "showPercentChange": false, 563 | "textMode": "auto", 564 | "wideLayout": true 565 | }, 566 | "pluginVersion": "11.3.0", 567 | "targets": [ 568 | { 569 | "datasource": { 570 | "type": "prometheus" 571 | }, 572 | "editorMode": "code", 573 | "expr": "kroma_validator_default_unbonded_deposit_amount", 574 | "legendFormat": "__auto", 575 | "range": true, 576 | "refId": "A" 577 | } 578 | ], 579 | "title": "Deposit Amount (KRO)", 580 | "type": "stat" 581 | }, 582 | { 583 | "datasource": { 584 | "type": "prometheus" 585 | }, 586 | "description": "The L1 latest block number which your L1 RPC node has", 587 | "fieldConfig": { 588 | "defaults": { 589 | "color": { 590 | "mode": "thresholds" 591 | }, 592 | "mappings": [], 593 | "thresholds": { 594 | "mode": "absolute", 595 | "steps": [ 596 | { 597 | "color": "green", 598 | "value": null 599 | } 600 | ] 601 | }, 602 | "unit": "Block" 603 | }, 604 | "overrides": [] 605 | }, 606 | "gridPos": { 607 | "h": 3, 608 | "w": 4, 609 | "x": 10, 610 | "y": 3 611 | }, 612 | "id": 40, 613 | "options": { 614 | "colorMode": "value", 615 | "graphMode": "none", 616 | "justifyMode": "center", 617 | "orientation": "auto", 618 | "percentChangeColorMode": "standard", 619 | "reduceOptions": { 620 | "calcs": [ 621 | "lastNotNull" 622 | ], 623 | "fields": "", 624 | "values": false 625 | }, 626 | "showPercentChange": false, 627 | "textMode": "auto", 628 | "wideLayout": true 629 | }, 630 | "pluginVersion": "11.3.0", 631 | "targets": [ 632 | { 633 | "datasource": { 634 | "type": "prometheus" 635 | }, 636 | "editorMode": "code", 637 | "expr": "kroma_validator_default_refs_number{layer=\"l1_origin\"}", 638 | "legendFormat": "{{layer}}", 639 | "range": true, 640 | "refId": "A" 641 | } 642 | ], 643 | "title": "L1 Latest Block Number", 644 | "type": "stat" 645 | }, 646 | { 647 | "datasource": { 648 | "type": "prometheus" 649 | }, 650 | "description": "The total number of failed output submission txs by your validator node (This metric will appear after the first output submission tx is submitted, and reset when your validator node is restarted)", 651 | "fieldConfig": { 652 | "defaults": { 653 | "color": { 654 | "mode": "thresholds" 655 | }, 656 | "mappings": [], 657 | "noValue": "0", 658 | "thresholds": { 659 | "mode": "absolute", 660 | "steps": [ 661 | { 662 | "color": "green", 663 | "value": null 664 | }, 665 | { 666 | "color": "orange", 667 | "value": 1 668 | }, 669 | { 670 | "color": "dark-red", 671 | "value": 10 672 | } 673 | ] 674 | } 675 | }, 676 | "overrides": [] 677 | }, 678 | "gridPos": { 679 | "h": 3, 680 | "w": 4, 681 | "x": 17, 682 | "y": 3 683 | }, 684 | "id": 46, 685 | "options": { 686 | "colorMode": "value", 687 | "graphMode": "none", 688 | "justifyMode": "center", 689 | "orientation": "auto", 690 | "percentChangeColorMode": "standard", 691 | "reduceOptions": { 692 | "calcs": [ 693 | "lastNotNull" 694 | ], 695 | "fields": "", 696 | "values": false 697 | }, 698 | "showPercentChange": false, 699 | "textMode": "value", 700 | "wideLayout": true 701 | }, 702 | "pluginVersion": "11.3.0", 703 | "targets": [ 704 | { 705 | "datasource": { 706 | "type": "prometheus" 707 | }, 708 | "editorMode": "code", 709 | "expr": "kroma_validator_default_txmgr_confirm_total{status=\"failed\"}", 710 | "legendFormat": "", 711 | "range": true, 712 | "refId": "A" 713 | } 714 | ], 715 | "title": "Output Submission Tx Failed Confirmed", 716 | "type": "stat" 717 | }, 718 | { 719 | "datasource": { 720 | "type": "prometheus" 721 | }, 722 | "description": "Count of L1 RPC errors(ex. timeouts) that have occurred from the endpoint that you specified in the .env file (KROMA_VALIDATOR__L1_RPC_ENDPOINT)", 723 | "fieldConfig": { 724 | "defaults": { 725 | "color": { 726 | "mode": "palette-classic" 727 | }, 728 | "custom": { 729 | "axisBorderShow": false, 730 | "axisCenteredZero": false, 731 | "axisColorMode": "text", 732 | "axisLabel": "", 733 | "axisPlacement": "auto", 734 | "barAlignment": 0, 735 | "barWidthFactor": 0.6, 736 | "drawStyle": "line", 737 | "fillOpacity": 0, 738 | "gradientMode": "none", 739 | "hideFrom": { 740 | "legend": false, 741 | "tooltip": false, 742 | "viz": false 743 | }, 744 | "insertNulls": false, 745 | "lineInterpolation": "linear", 746 | "lineWidth": 1, 747 | "pointSize": 1, 748 | "scaleDistribution": { 749 | "type": "linear" 750 | }, 751 | "showPoints": "auto", 752 | "spanNulls": false, 753 | "stacking": { 754 | "group": "A", 755 | "mode": "none" 756 | }, 757 | "thresholdsStyle": { 758 | "mode": "off" 759 | } 760 | }, 761 | "mappings": [], 762 | "thresholds": { 763 | "mode": "absolute", 764 | "steps": [ 765 | { 766 | "color": "green", 767 | "value": null 768 | }, 769 | { 770 | "color": "red", 771 | "value": 80 772 | } 773 | ] 774 | } 775 | }, 776 | "overrides": [] 777 | }, 778 | "gridPos": { 779 | "h": 8, 780 | "w": 24, 781 | "x": 0, 782 | "y": 6 783 | }, 784 | "id": 28, 785 | "options": { 786 | "legend": { 787 | "calcs": [], 788 | "displayMode": "list", 789 | "placement": "bottom", 790 | "showLegend": true 791 | }, 792 | "tooltip": { 793 | "mode": "single", 794 | "sort": "none" 795 | } 796 | }, 797 | "pluginVersion": "11.3.0", 798 | "targets": [ 799 | { 800 | "datasource": { 801 | "type": "prometheus" 802 | }, 803 | "editorMode": "code", 804 | "expr": "kroma_validator_default_txmgr_rpc_error_count", 805 | "legendFormat": "{{instance}}", 806 | "range": true, 807 | "refId": "A" 808 | } 809 | ], 810 | "title": "L1 RPC Error Count", 811 | "type": "timeseries" 812 | } 813 | ], 814 | "preload": false, 815 | "refresh": "30s", 816 | "schemaVersion": 40, 817 | "tags": [], 818 | "templating": { 819 | "list": [] 820 | }, 821 | "time": { 822 | "from": "now-1h", 823 | "to": "now" 824 | }, 825 | "timepicker": { 826 | "refresh_intervals": [ 827 | "10s", 828 | "30s", 829 | "1m", 830 | "5m", 831 | "15m", 832 | "30m", 833 | "1h", 834 | "2h", 835 | "1d" 836 | ] 837 | }, 838 | "timezone": "", 839 | "title": "Validator", 840 | "uid": "KROMA_VALIDATOR", 841 | "version": 1, 842 | "weekStart": "" 843 | } 844 | --------------------------------------------------------------------------------