# To debug inside the network and volumes: # docker run --rm -it --network=docker_linea -v=linea-local-dev:/data -v=linea-logs:/logs weibeld/ubuntu-networking bash services: sequencer: hostname: sequencer container_name: sequencer image: consensys/linea-besu-package:${BESU_PACKAGE_TAG:-sepolia-3e31c8f} profiles: [ "l2", "l2-bc", "debug", "external-to-monorepo" ] ports: - "8545:8545" - "8546:8546" - "8550:8550" - "19545:9545" # metrics - "30301:30301" - "30305:30303" healthcheck: test: [ "CMD-SHELL", "bash -c \"[ -f /tmp/pid ]\"" ] interval: 1s timeout: 1s retries: 120 restart: "no" environment: LOG4J_CONFIGURATION_FILE: /var/lib/besu/log4j.xml entrypoint: - /bin/bash - -c - | /opt/besu/bin/besu \ --config-file=/var/lib/besu/sequencer.config.toml \ --node-private-key-file="/var/lib/besu/key" \ --plugin-linea-l1-polling-interval="PT12S" \ --plugin-linea-l1-smart-contract-address="0xCf7Ed3AccA5a467e9e704C703E8D87F634fB0Fc9" \ --plugin-linea-l1-rpc-endpoint="http://l1-el-node:8545" \ --plugin-linea-rejected-tx-endpoint="http://transaction-exclusion-api:8080" \ --plugin-linea-node-type="SEQUENCER" volumes: - ./config/linea-besu-sequencer/sequencer.config.toml:/var/lib/besu/sequencer.config.toml:ro - ./config/linea-besu-sequencer/deny-list.txt:/var/lib/besu/deny-list.txt:ro - ./config/linea-local-dev-genesis-PoA-besu.json/:/var/lib/besu/genesis.json:ro - ./config/linea-besu-sequencer/key:/var/lib/besu/key:ro - ./config/linea-besu-sequencer/log4j.xml:/var/lib/besu/log4j.xml:ro - ../config/common/traces-limits-besu-v2.toml:/var/lib/besu/traces-limits.toml:ro networks: l1network: linea: ipv4_address: 11.11.11.101 l2-node: container_name: l2-node hostname: l2-node image: consensys/linea-geth:${ZKGETH_TAG:-0588665} platform: linux/amd64 profiles: [ "l2", "l2-bc", "debug", "external-to-monorepo" ] depends_on: sequencer: condition: service_healthy ports: - "8845:8545" - "8846:8546" - "30306:30303" environment: DATA_DIR: "/data/l2-zkgeth-l2-node/" BOOTNODES: "enode://14408801a444dafc44afbccce2eb755f902aed3b5743fed787b3c790e021fef28b8c827ed896aa4e8fb46e22bd67c39f994a73768b4b382f8597b0d44370e15d@11.11.11.101:30303" NETRESTRICT: "11.11.11.0/24" DISABLE_ZKEVM: "true" MAX_BLOCK_GAS: 10000000 #10M MAX_BLOCKDATA_BYTES: 35000 #35 KBytes MAX_TXDATA_BYTES: 30000 #30 KBytes ZKGETH_LOWER_GAS_MARGIN_PERCENTS: 120 ZKGETH_UPPER_GAS_MARGIN_PERCENTS: 300 entrypoint: [ "sh", "/scripts/node.sh", "1337", "/genesis.json", "0x0", "0x1C9C380", "0xF4240" ] volumes: - ./geth/scripts:/scripts:ro - ./config/linea-local-dev-genesis-PoA-geth.json:/genesis.json:ro - ./geth/geth-l2-node.key:/boot.key:ro - local-dev:/data/ networks: linea: ipv4_address: 11.11.11.209 l2-node-besu: hostname: l2-node-besu container_name: l2-node-besu image: consensys/linea-besu-package:${BESU_PACKAGE_TAG:-sepolia-3e31c8f} profiles: [ "l2", "l2-bc", "debug", "external-to-monorepo" ] depends_on: sequencer: condition: service_healthy ports: - "9045:8545" - "9046:8546" - "9050:8550" - "9051:8548" - "30309:30303" healthcheck: test: [ "CMD-SHELL", "bash -c \"[ -f /tmp/pid ]\"" ] interval: 1s timeout: 1s retries: 120 restart: "no" environment: LOG4J_CONFIGURATION_FILE: /var/lib/besu/log4j.xml entrypoint: - /bin/bash - -c - | /opt/besu/bin/besu \ --config-file=/var/lib/besu/l2-node-besu.config.toml \ --genesis-file=/var/lib/besu/genesis.json \ --plugin-linea-l1-polling-interval="PT12S" \ --plugin-linea-l1-smart-contract-address="0xCf7Ed3AccA5a467e9e704C703E8D87F634fB0Fc9" \ --plugin-linea-l1-rpc-endpoint="http://l1-el-node:8545" \ --plugin-linea-rejected-tx-endpoint="http://transaction-exclusion-api:8080" \ --plugin-linea-node-type="RPC" \ --bootnodes=enode://14408801a444dafc44afbccce2eb755f902aed3b5743fed787b3c790e021fef28b8c827ed896aa4e8fb46e22bd67c39f994a73768b4b382f8597b0d44370e15d@11.11.11.101:30303 volumes: - ./config/l2-node-besu/l2-node-besu-config.toml:/var/lib/besu/l2-node-besu.config.toml:ro - ./config/linea-besu-sequencer/deny-list.txt:/var/lib/besu/deny-list.txt:ro - ./config/l2-node-besu/log4j.xml:/var/lib/besu/log4j.xml:ro - ./config/linea-local-dev-genesis-PoA-besu.json/:/var/lib/besu/genesis.json:ro - ../config/common/traces-limits-besu-v2.toml:/var/lib/besu/traces-limits.toml:ro - ../tmp/local/:/data/:rw networks: l1network: linea: ipv4_address: 11.11.11.119 traces-node-v2: hostname: traces-node-v2 container_name: traces-node-v2 image: consensys/linea-besu-package:${BESU_PACKAGE_TAG:-sepolia-3e31c8f} profiles: [ "l2", "l2-bc", "debug", "external-to-monorepo" ] depends_on: sequencer: condition: service_healthy ports: - "8745:8545" - "8746:8546" - "8750:8550" - "8751:8548" - "30308:30303" healthcheck: test: [ "CMD-SHELL", "bash -c \"[ -f /tmp/pid ]\"" ] interval: 1s timeout: 1s retries: 120 restart: "no" environment: JAVA_OPTS: -Xmx1g -XX:+UnlockExperimentalVMOptions -XX:-UseG1GC -XX:+UseZGC LOG4J_CONFIGURATION_FILE: /var/lib/besu/log4j.xml entrypoint: - /bin/bash - -c - | /opt/besu/bin/besu \ --config-file=/var/lib/besu/traces-node-v2.config.toml \ --genesis-file=/var/lib/besu/genesis.json \ --bootnodes=enode://14408801a444dafc44afbccce2eb755f902aed3b5743fed787b3c790e021fef28b8c827ed896aa4e8fb46e22bd67c39f994a73768b4b382f8597b0d44370e15d@11.11.11.101:30303 volumes: - ./config/traces-node-v2/traces-node-v2-config.toml:/var/lib/besu/traces-node-v2.config.toml:ro - ./config/traces-node-v2/log4j.xml:/var/lib/besu/log4j.xml:ro - ./config/linea-local-dev-genesis-PoA-besu.json/:/var/lib/besu/genesis.json:ro - ../tmp/local/:/data/:rw networks: linea: ipv4_address: 11.11.11.115 prover-v3: # prover compatible with the traces from zkbesu container_name: prover-v3 hostname: prover-v3 image: consensys/linea-prover:${PROVER_TAG:-052958b} platform: linux/amd64 # to avoid spinning up on CI for now profiles: [ "l2" ] environment: GOMAXPROCS: 16 CONFIG_FILE: "/opt/linea/prover/config.toml" GOMEMLIMIT: "10GiB" WORKER_ID: prover-i1 # keep this prover- to mimic prod env prover-aggregation-91 volumes: - ../tmp/local/:/data/ - logs:/logs - ./config/prover/v3/prover-config.toml:/opt/linea/prover/config.toml:ro - ../prover/prover-assets:/opt/linea/prover/prover-assets:ro networks: linea: ipv4_address: 11.11.11.109 postman: container_name: postman hostname: postman image: consensys/linea-postman:${POSTMAN_TAG:-052958b} profiles: [ "l2", "debug" ] platform: linux/amd64 restart: on-failure ports: - "9090:3000" depends_on: sequencer: condition: service_healthy postgres: condition: service_healthy env_file: "./config/postman/env" networks: l1network: ipv4_address: 10.10.10.222 linea: ipv4_address: 11.11.11.222 coordinator: hostname: coordinator container_name: coordinator image: consensys/linea-coordinator:${COORDINATOR_TAG:-052958b} platform: linux/amd64 profiles: [ "l2", "debug" ] depends_on: postgres: condition: service_healthy l1-el-node: condition: service_started sequencer: condition: service_started shomei: condition: service_started # shomei-frontend: # condition: service_started ports: - "9545:9545" restart: on-failure command: [ 'java', '-Dvertx.configurationFile=/var/lib/coordinator/vertx-options.json', '-Dlog4j2.configurationFile=/var/lib/coordinator/log4j2-dev.xml', '-jar', 'libs/coordinator.jar', '--traces-limits', 'config/traces-limits-v1.toml', '--smart-contract-errors', 'config/smart-contract-errors.toml', '--gas-price-cap-time-of-day-multipliers', 'config/gas-price-cap-time-of-day-multipliers.toml', 'config/coordinator-docker.config.toml', 'config/coordinator-docker-web3signer-override.config.toml' ] volumes: - ../config/coordinator/coordinator-docker.config.toml:/opt/consensys/linea/coordinator/config/coordinator-docker.config.toml:ro - ../config/coordinator/coordinator-docker-web3signer-override.config.toml:/opt/consensys/linea/coordinator/config/coordinator-docker-web3signer-override.config.toml:ro - ../config/common/traces-limits-v1.toml:/opt/consensys/linea/coordinator/config/traces-limits-v1.toml:ro - ../config/common/smart-contract-errors.toml:/opt/consensys/linea/coordinator/config/smart-contract-errors.toml:ro - ../config/common/gas-price-cap-time-of-day-multipliers.toml:/opt/consensys/linea/coordinator/config/gas-price-cap-time-of-day-multipliers.toml:ro - ../config/coordinator/vertx-options.json:/var/lib/coordinator/vertx-options.json:ro - ../config/coordinator/log4j2-dev.xml:/var/lib/coordinator/log4j2-dev.xml:ro - ../tmp/local/:/data/ networks: l1network: ipv4_address: 10.10.10.106 linea: ipv4_address: 11.11.11.106 web3signer: hostname: web3signer container_name: web3signer image: consensys/web3signer:23.3-jdk17 profiles: [ "l2", "debug", "external-to-monorepo" ] ports: - "9000:9000" command: - --key-store-path=/keyFiles/ - --http-host-allowlist=* - eth1 volumes: - ./web3signer/keyFiles/:/keyFiles/ networks: - linea postgres: image: postgres:16.0 hostname: postgres container_name: postgres profiles: [ "l2", "debug", "external-to-monorepo", "staterecovery" ] environment: POSTGRES_USER: ${POSTGRES_USER:-postgres} POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:-postgres} PGDATA: /data/postgres command: postgres -c config_file=/etc/postgresql/postgresql.conf # uncomment command below if you need to log and debug queries to PG # command: # - postgres # - -c # - config_file=/etc/postgresql/postgresql.conf ports: - "5432:5432" healthcheck: test: [ "CMD-SHELL", "pg_isready" ] interval: 1s timeout: 1s retries: 120 restart: unless-stopped volumes: - ./postgres/init:/docker-entrypoint-initdb.d/ - ./postgres/conf/:/etc/postgresql/ networks: - linea - l1network zkbesu-shomei: image: consensys/linea-besu-package:${BESU_PACKAGE_TAG:-sepolia-3e31c8f} hostname: zkbesu-shomei container_name: zkbesu-shomei profiles: [ "l2", "l2-bc", "external-to-monorepo" ] depends_on: sequencer: condition: service_healthy privileged: true restart: always user: root ports: - "8945:8545" # http - "8946:8546" # websockets - "8950:8550" - "30307:30303" healthcheck: test: [ "CMD-SHELL", "bash -c \"[ -f /tmp/pid ]\"" ] interval: 1s timeout: 1s retries: 120 networks: linea: ipv4_address: 11.11.11.113 environment: LOG4J_CONFIGURATION_FILE: /var/lib/besu/log4j.xml JAVA_OPTS: -Xmx512m -XX:+UnlockExperimentalVMOptions -XX:-UseG1GC -XX:+UseZGC entrypoint: - /bin/bash - -c - | /opt/besu/bin/besu \ --config-file=/var/lib/besu/zkbesu-config.toml \ --genesis-file=/var/lib/besu/genesis.json \ --plugin-shomei-http-host="11.11.11.114" \ --plugin-shomei-http-port=8888 \ --bonsai-limit-trie-logs-enabled=false \ --bootnodes=enode://14408801a444dafc44afbccce2eb755f902aed3b5743fed787b3c790e021fef28b8c827ed896aa4e8fb46e22bd67c39f994a73768b4b382f8597b0d44370e15d@11.11.11.101:30303 volumes: - ./config/zkbesu-shomei/zkbesu-config.toml:/var/lib/besu/zkbesu-config.toml:ro - ./config/zkbesu-shomei/log4j.xml:/var/lib/besu/log4j.xml:ro - ./config/linea-local-dev-genesis-PoA-besu.json/:/var/lib/besu/genesis.json:ro shomei: image: consensys/linea-shomei:2.3.0 hostname: shomei container_name: shomei profiles: [ "l2", "l2-bc", "external-to-monorepo" ] depends_on: zkbesu-shomei: condition: service_started privileged: true user: root ports: - "8998:8888" healthcheck: test: [ "CMD-SHELL", "bash -c \"[ -f /data/shomei/LOCK ]\"" ] interval: 1s timeout: 1s retries: 60 networks: linea: ipv4_address: 11.11.11.114 environment: LOG4J_CONFIGURATION_FILE: /log4j.xml command: - --besu-rpc-http-host=11.11.11.113 - --besu-rpc-http-port=8545 - --rpc-http-host=11.11.11.114 - --rpc-http-host-allow-list=* - --rpc-http-port=8888 - --min-confirmations-before-importing=0 - --trace-start-block-number=0 - --data-path=/data/shomei volumes: - ./config/shomei/log4j.xml:/log4j.xml:ro # - ../tmp/local/shomei:/data/shomei/:z shomei-frontend: image: consensys/linea-shomei:2.3.0 hostname: shomei-frontend container_name: shomei-frontend profiles: [ "l2", "l2-bc", "external-to-monorepo" ] depends_on: zkbesu-shomei: condition: service_started privileged: true user: root restart: always ports: - "8889:8888" healthcheck: test: [ "CMD-SHELL", "bash -c \"[ -f /data/shomei/LOCK ]\"" ] interval: 1s timeout: 1s retries: 60 networks: linea: ipv4_address: 11.11.11.107 environment: LOG4J_CONFIGURATION_FILE: /log4j.xml command: - --besu-rpc-http-host=11.11.11.113 - --besu-rpc-http-port=8545 - --rpc-http-host=11.11.11.107 - --rpc-http-host-allow-list=* - --rpc-http-port=8888 - --min-confirmations-before-importing=0 - --trace-start-block-number=0 - --data-path=/data/shomei-frontend - --metrics-http-host=0.0.0.0 - --metrics-http-port=9545 - --enable-trace-generation=false - --enable-finalized-block-limit=true - --use-finalized-block-number=0 - --use-finalized-block-hash=0x0ca7c811d834d51a08e390bef9ae24db8623338bad13176d420b2f03bc282b90 #some unlikely hash volumes: - ./config/shomei/log4j.xml:/log4j.xml:ro transaction-exclusion-api: hostname: transaction-exclusion-api container_name: transaction-exclusion-api image: consensys/linea-transaction-exclusion-api:${TRANSACTION_EXCLUSION_API_TAG:-052958b} profiles: [ "l2", "debug" ] restart: on-failure depends_on: postgres: condition: service_healthy ports: - "8082:8080" command: [ 'java', '-Dvertx.configurationFile=config/vertx-options.json', '-Dlog4j2.configurationFile=config/log4j2-dev.xml', '-jar', 'libs/transaction-exclusion-api.jar', 'config/transaction-exclusion-app-docker.config.toml', ] volumes: - ../config/transaction-exclusion-api/transaction-exclusion-app-docker.config.toml:/opt/consensys/linea/transaction-exclusion-api/config/transaction-exclusion-app-docker.config.toml:ro - ../config/transaction-exclusion-api/vertx-options.json:/opt/consensys/linea/transaction-exclusion-api/config/vertx-options.json:ro - ../config/transaction-exclusion-api/log4j2-dev.xml:/opt/consensys/linea/transaction-exclusion-api/config/log4j2-dev.xml:ro networks: linea: ipv4_address: 11.11.11.110 ######################## # Blob Scan stack, used for state recover app ######################## blobscan-api: container_name: blobscan-api hostname: blobscan-api image: blossomlabs/blobscan-api:1.7.0 platform: linux/amd64 # only linux available profiles: [ "staterecovery" ] ports: - "4001:4001" env_file: "./config/blobscan/env" restart: always # healthcheck: # test: [ "CMD", "curl", "-f", "http://localhost:4001/healthcheck" ] # disable: true # interval: 30s # timeout: 10s # retries: 20 # start_period: 5s networks: l1network: ipv4_address: 10.10.10.203 depends_on: postgres: condition: service_healthy redis: condition: service_healthy l1-cl-node: condition: service_healthy l1-el-node: condition: service_healthy blobscan-indexer: container_name: blobscan-indexer hostname: blobscan-indexer image: blossomlabs/blobscan-indexer:0.3.1 platform: linux/amd64 # only linux available profiles: [ "staterecovery" ] env_file: "./config/blobscan/env" networks: l1network: ipv4_address: 10.10.10.204 restart: always depends_on: postgres: condition: service_healthy blobscan-api: condition: service_started l1-cl-node: condition: service_healthy l1-el-node: condition: service_healthy redis: container_name: redis hostname: redis image: "redis:7.4.1-alpine" profiles: [ "staterecovery" ] ports: - "6379:6379" environment: - REDIS_REPLICATION_MODE=master - REDIS_PASSWORD=s3cr3t - REDIS_USERNAME=blobscan healthcheck: test: [ "CMD", "redis-cli", "ping" ] interval: 30s timeout: 10s retries: 3 start_period: 30s networks: l1network: ipv4_address: 10.10.10.205 zkbesu-shomei-sr: image: consensys/linea-besu-package:${BESU_PACKAGE_TAG:-sepolia-3e31c8f} hostname: zkbesu-shomei-sr container_name: zkbesu-shomei-sr profiles: [ "external-to-monorepo", "staterecovery" ] privileged: true user: root ports: - "9145:8545" # http - "9146:8546" # websockets - "9150:8550" - "10545:9545" healthcheck: test: [ "CMD-SHELL", "bash -c \"[ -f /tmp/pid ]\"" ] interval: 1s timeout: 1s retries: 120 restart: "no" networks: l1network: ipv4_address: 10.10.10.206 linea: ipv4_address: 11.11.11.116 environment: LOG4J_CONFIGURATION_FILE: /var/lib/besu/log4j.xml L1_ROLLUP_CONTRACT_ADDRESS: ${L1_ROLLUP_CONTRACT_ADDRESS:-0xCf7Ed3AccA5a467e9e704C703E8D87F634fB0Fc9} STATERECOVERY_OVERRIDE_START_BLOCK_NUMBER: ${STATERECOVERY_OVERRIDE_START_BLOCK_NUMBER:-1} entrypoint: - /bin/bash - -c - | (rm /opt/besu/plugins/linea-staterecovery-besu-plugin-v* || true) && \ (rm /opt/besu/plugins/linea-finalized-tag-updater* || true) && \ ls -lh /opt/besu/plugins && \ sed -i '/^CLASSPATH/c\CLASSPATH=/opt/besu/lib/\*\:/opt/besu/plugins/\*' /opt/besu/bin/besu && \ /opt/besu/bin/besu \ --config-file=/var/lib/besu/zkbesu-config.toml \ --genesis-file=/var/lib/besu/genesis.json \ --plugins=BesuShomeiRpcPlugin,ZkTrieLogPlugin,LineaStateRecoveryPlugin \ --rpc-http-api=ADMIN,DEBUG,NET,ETH,WEB3,PLUGINS,MINER,SHOMEI \ --bonsai-limit-trie-logs-enabled=false \ --plugin-shomei-http-host="11.11.11.117" \ --plugin-shomei-http-port=8888 \ --plugin-staterecovery-l1-endpoint=http://l1-el-node:8545 \ --plugin-staterecovery-l1-polling-interval=PT1S \ --plugin-staterecovery-l1-earliest-search-block=EARLIEST \ --plugin-staterecovery-l1-highest-search-block=LATEST \ --plugin-staterecovery-shomei-endpoint=http://shomei-sr:8888 \ --plugin-staterecovery-blobscan-endpoint=http://blobscan-api:4001 \ --plugin-staterecovery-linea-sequencer-beneficiary-address=0x6d976c9b8ceee705d4fe8699b44e5eb58242f484 \ --bootnodes=enode://14408801a444dafc44afbccce2eb755f902aed3b5743fed787b3c790e021fef28b8c827ed896aa4e8fb46e22bd67c39f994a73768b4b382f8597b0d44370e15d@11.11.11.101:30303 volumes: - ./config/zkbesu-shomei/zkbesu-config.toml:/var/lib/besu/zkbesu-config.toml:ro - ./config/zkbesu-shomei/log4j-staterecovery.xml:/var/lib/besu/log4j.xml:ro - ./config/linea-local-dev-genesis-PoA-besu.json/:/var/lib/besu/genesis.json:ro - ../besu-plugins/state-recovery/besu-plugin/build/libs/linea-staterecovery-besu-plugin-SNAPSHOT.jar:/opt/besu/plugins/linea-staterecovery-besu-plugin-SNAPSHOT.jar shomei-sr: image: consensys/linea-shomei:2.3.0 hostname: shomei-sr container_name: shomei-sr profiles: [ "external-to-monorepo", "staterecovery" ] depends_on: zkbesu-shomei-sr: condition: service_started privileged: true user: root ports: - "8890:8888" healthcheck: test: [ "CMD-SHELL", "bash -c \"[ -f /data/shomei/LOCK ]\"" ] interval: 1s timeout: 1s retries: 60 networks: linea: ipv4_address: 11.11.11.117 environment: LOG4J_CONFIGURATION_FILE: /log4j.xml command: - --besu-rpc-http-host=11.11.11.116 - --besu-rpc-http-port=8545 - --rpc-http-host=11.11.11.117 - --rpc-http-host-allow-list=* - --rpc-http-port=8888 - --min-confirmations-before-importing=0 - --trace-start-block-number=0 volumes: - ./config/shomei/log4j.xml:/log4j.xml:ro