Files
linea-monorepo/docker/compose.yml
jonesho fad0db4fc6 3822 rejected transaction api service (#101)
* feat: first commit for transaction exclusion api service

* feat: removed debug logs and improved params error handling

* fix: jacocoRootReport error

* feat: improved json request param parsings

* feat: added docker container and github workflow pipeline for transaction exclusion api

* feat: added rejection stage in response and use txHash and rejectReason as primary key of tables

* feat: separate database into read and write config and each with dedicated connection

* fix: e2e testing error

* feat: removed redundant commands in Makefile

* feat: updated transaction exclusion api default image tag in compose file

* feat: added metric and change param name from reasonMessage to reason

* feat: added integration and unit tests and use reasonMessage for both request and response

* fix: transaction-exclusion-api unit test

* feat: added e2e tests and remove reasonMessage from get response and redundant codes

* feat: updated README.md and removed abi file

* feat: updated image version of transaction exclusion api service in compose file

* feat: updated README and added more test cases

* feat: updated transaction exclusion api default image tag in compose file

* feat: decoupled transaction exclusion api from coordinator package

* feat: removed unnecessary dependencies to prover client

* feat: moved persistence:db package to jvm-libs

* feat: removed migration file dir location config from transaction exclusion api

* fix: db migration location for fee history integration test

* changed db column name timestamp to reject_timestamp and add dto for ModuleOverflow to remove all jackson dependencies in core module

* feat: rejected transaction dao and config refactoring

* feat: removed repository service and using persistence retryer

* feat: updated transaction exclusion api default image tag in compose file

* feat: updated log and increase retry backoff delay to avoid repetitive error logs

* feat: added support of list request on save method and added dto for RejectedTransaction

* feat: revised gradle.build dependencies

* feat: switch from shadow jar to zipped jar

* feat: updated transaction exclusion api default image tag in compose file

* feat: updated sql and tables and changes for PR comments

* feat: improved log message for duplicate key error

* feat: updated transaction exclusion api default image tag in compose file

* feat: avoid redundant logs on periodic db cleanup

* feat: revised request handlers plus better test assertions on insertion

* fix: test case

* feat: parse save method json request with jackson

* feat: extracted db migrations from the coordinator and transaction-exclusion app

* feat: decoupled coordinator modules from jvm-libs persistence db test module

* feat: updated dockerfile of transaction-exclusion-api

* feat: removed the find check before metric increment on save rejected transaction

* feat: updated docker base image for tx-exclusion-api image buid and queryable window config

* feat: skip migration scripts on read db instance

* feat: updated more percise jvm-libs change filtering on transaction-exclusion-api

* feat: updated coordinator config for geth node l2 gas pricing recipients

* feat: update runners with specific version and removed the use of retry for transaction exclusion api testing

* feat: add integration test for transaction exclusion app

* feat: update local stack docker compose and workflow for transaction exclusion

* feat: add e2e test for transaction exclusion

* feat: skip the sequencer test in transaction exclusion e2e test

* feat: revert sequencer config poa-block-txs-selection-max-time

* feat: remove incorrect comment

* feat: added explicitly assertion if tx exclusion is not defined and simplify the localStackPostgresDbOnly in build.gradle

* feat: remove beforeAll in test suite with it.concurrent

* feat: set coordinator config blob-compressor-version as V1_0_1 explicitly for traces-v2

* feat: update coordinator config test

* feat: change default prefix not to be coordinator specific

* feat: place persistence:db under jvm-libs:generic and fixed conflicts from latest main

* fix: remove dependency to resolve circular dependency issue

* test: switch from localStackPostgresDbOnlyComposeUp to localStackComposeUp

* feat: replace GITHUB_SHA with github.event.pull_request.head.sha in computing commit tag

* feat: update filter change file lists for transaction exclusion api
2024-10-22 15:50:44 +08:00

746 lines
26 KiB
YAML

volumes:
local-dev:
name: "linea-local-dev"
logs:
name: "linea-logs"
networks:
linea:
driver: bridge
ipam:
config:
- subnet: 11.11.11.0/24
l1-network:
driver: bridge
ipam:
config:
- subnet: 10.10.10.0/24
# 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:${SEQUENCER_TAG:-24.10-delivery34}
profiles: [ "l2", "l2-bc", "debug" ]
depends_on:
linea-besu-sequencer-plugin-downloader:
condition: service_completed_successfully
linea-besu-sequencer-finalized-tag-updater-plugin-downloader:
condition: service_completed_successfully
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-v1.toml:/var/lib/besu/traces-limits.toml:ro
- ../tmp/linea-besu-sequencer/plugins:/opt/besu/plugins/
networks:
l1-network:
linea:
ipv4_address: 11.11.11.101
linea-besu-sequencer-plugin-downloader:
image: busybox:1.36.1
# profiles: ["l2", "l2-bc"] this works locally but breakes on CI, maybe Docker compose version issue
command: [ "sh", "/file-downloader.sh", "https://github.com/Consensys/linea-sequencer/releases/download/v0.1.4-test35/besu-sequencer-plugins-v0.1.4-test35.jar", "/linea-besu-sequencer" ]
volumes:
- ./scripts/file-downloader.sh:/file-downloader.sh:ro
- ../tmp/linea-besu-sequencer/plugins:/linea-besu-sequencer/
linea-besu-sequencer-finalized-tag-updater-plugin-downloader:
image: busybox:1.36.1
command: [ "sh", "/file-downloader.sh", "https://github.com/Consensys/linea-monorepo/releases/download/finalized-tag-updater-v0.0.2/finalized-tag-updater-v0.0.2.jar", "/linea-besu-sequencer" ]
volumes:
- ./scripts/file-downloader.sh:/file-downloader.sh:ro
- ../tmp/linea-besu-sequencer/plugins:/linea-besu-sequencer/
l2-node:
container_name: l2-node
hostname: l2-node
image: consensys/linea-geth:${ZKGETH_TAG:-0588665}
platform: linux/amd64
profiles: [ "l2", "l2-bc", "debug" ]
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: ""
command: [ "sh", "/scripts/node.sh", "1337", "/genesis.json", "0x0", "0x1C9C380", "0xF4240" ]
volumes:
- ./geth/scripts:/scripts:ro
- ./config/linea-local-dev-genesis-PoA.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:24.10-delivery34
profiles: [ "l2", "l2-bc", "debug" ]
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-v1.toml:/var/lib/besu/traces-limits.toml:ro
- ../tmp/linea-besu-sequencer/plugins:/opt/besu/plugins/
- ../tmp/local/:/data/:rw
networks:
l1-network:
linea:
ipv4_address: 11.11.11.119
traces-node:
container_name: traces-node
hostname: traces-node
image: consensys/linea-geth:${ZKGETH_TAG:-0588665}
platform: linux/amd64
profiles: [ "l2", "l2-bc", "debug" ]
depends_on:
sequencer:
condition: service_healthy
ports:
- "8645:8545" # http
- "8646:8546" # websockets
- "8651:8551" # engine_ API
environment:
DATA_DIR: "/l2-zkgeth-traces-node/"
NETRESTRICT: "11.11.11.0/24"
# ETHSTATS_URL: "zkgeth-traces-node:${WS_SECRET:-dummy-secret}@l2-ethstats:3000"
BOOTNODES: "enode://14408801a444dafc44afbccce2eb755f902aed3b5743fed787b3c790e021fef28b8c827ed896aa4e8fb46e22bd67c39f994a73768b4b382f8597b0d44370e15d@11.11.11.101:30303"
TRACES_DIR: "/data/traces/raw"
MAX_BLOCK_GAS: 10000000 #10M
MAX_BLOCKDATA_BYTES: 35000 #35 KBytes
MAX_TXDATA_BYTES: 30000 #30 KBytes
VERSION: "0.2.0"
TRACES_FILE_EXTENSION: ".json.gz"
entrypoint: ""
command: [ "sh", "/scripts/node.sh", "1337", "/genesis.json", "0xa", "0x1C9C380", "0xF4240" ]
volumes:
- ./geth/scripts:/scripts:ro
- ./config/linea-local-dev-genesis-PoA.json:/genesis.json:ro
- local-dev:/data/
# - ../tmp/:/data/
networks:
linea:
ipv4_address: 11.11.11.102
prover:
container_name: prover
hostname: prover
image: consensys/linea-prover:b4550ce-untested
platform: linux/amd64
# to avoid spinning up on CI for now
profiles: [ "l2" ]
environment:
GOMAXPROCS: 16
CONTROLLER_CONFIG: "/opt/linea/prover/config/controller/controller.config.toml"
GOMEMLIMIT: "10GiB"
WORKER_ID: prover-i1 # keep this prover- to mimic prod env prover-aggregation-91
volumes:
- local-dev:/data
- logs:/logs
- ./config/prover/v2/prover-controller.config.toml:/opt/linea/prover/config/controller/controller.config.toml
- ./config/prover/v2/prover-execution.config.toml:/opt/linea/prover/config/executor/execution.config.toml
- ./config/prover/v2/prover-decompression.config.toml:/opt/linea/prover/config/executor/decompression.config.toml
- ./config/prover/v2/prover-aggregation.config.toml:/opt/linea/prover/config/executor/aggregation.config.toml
- ../config/common/traces-limits-v1.toml:/opt/linea/prover/config/executor/traces-limits-M.toml
networks:
linea:
ipv4_address: 11.11.11.108
postman:
container_name: postman
hostname: postman
image: consensys/linea-postman:${POSTMAN_TAG:-5a6fdf3}
profiles: [ "l2", "debug" ]
platform: linux/amd64
restart: on-failure
depends_on:
sequencer:
condition: service_healthy
postgres:
condition: service_healthy
environment:
L1_RPC_URL: "http://l1-el-node:8545"
L1_CONTRACT_ADDRESS: "0xCf7Ed3AccA5a467e9e704C703E8D87F634fB0Fc9"
# WARNING: FOR LOCAL DEV ONLY - DO NOT REUSE THESE KEYS ELSEWHERE
L1_SIGNER_PRIVATE_KEY: "0x8b3a350cf5c34c9194ca85829a2df0ec3153be0318b5e2d3348e872092edffba"
L1_LISTENER_INTERVAL: 2000
L1_LISTENER_INITIAL_FROM_BLOCK: 0
L1_LISTENER_BLOCK_CONFIRMATION: 1
L1_MAX_BLOCKS_TO_FETCH_LOGS: 1000
L1_MAX_GAS_FEE_ENFORCED: "true"
L2_RPC_URL: "http://l2-node:8545"
L2_CONTRACT_ADDRESS: "0xe537D669CA013d86EBeF1D64e40fC74CADC91987"
# WARNING: FOR LOCAL DEV ONLY - DO NOT REUSE THESE KEYS ELSEWHERE
L2_SIGNER_PRIVATE_KEY: "0xfcf854e0a0bc6fd7e97d7050e61a362c915cecd6767a32267b22e8b7af572e58"
L2_LISTENER_INTERVAL: 2000
L2_LISTENER_INITIAL_FROM_BLOCK: 0
L2_LISTENER_BLOCK_CONFIRMATION: 0 # set confirmation as zero since L2 block won't auto increase
L2_MAX_BLOCKS_TO_FETCH_LOGS: 1000
L2_MAX_GAS_FEE_ENFORCED: "false"
L2_MESSAGE_TREE_DEPTH: 5
MESSAGE_SUBMISSION_TIMEOUT: 300000
MAX_FETCH_MESSAGES_FROM_DB: 1000
MAX_NONCE_DIFF: 10000
MAX_FEE_PER_GAS: 100000000000
GAS_ESTIMATION_PERCENTILE: 50
PROFIT_MARGIN: 0.0
MAX_NUMBER_OF_RETRIES: 100
RETRY_DELAY_IN_SECONDS: 30
MAX_CLAIM_GAS_LIMIT: 2560000
L1_L2_EOA_ENABLED: "true"
L1_L2_CALLDATA_ENABLED: "true"
L1_L2_AUTO_CLAIM_ENABLED: "true"
L2_L1_EOA_ENABLED: "true"
L2_L1_CALLDATA_ENABLED: "true"
L2_L1_AUTO_CLAIM_ENABLED: "true"
POSTGRES_HOST: "postgres"
POSTGRES_PORT: 5432
POSTGRES_USER: "postgres"
POSTGRES_PASSWORD: "postgres"
POSTGRES_DB: "postman_db"
networks:
l1-network:
ipv4_address: 10.10.10.222
linea:
ipv4_address: 11.11.11.222
traces-api:
hostname: traces-api
container_name: traces-api
image: consensys/linea-traces-api-facade:${TRACES_API_TAG:-e9f2bcc}
profiles: [ "l2", "debug" ]
restart: on-failure
depends_on:
traces-node:
condition: service_started
ports:
- "8080:8080"
command: [ 'java', '-Dvertx.configurationFile=config/vertx-options.json', '-Dlog4j2.configurationFile=config/log4j2-dev.xml', '-jar', 'libs/app-all.jar', 'config/traces-app-docker.config.toml', ]
volumes:
- ../config/traces-api/traces-app-docker.config.toml:/opt/consensys/linea/traces-api-facade/config/traces-app-docker.config.toml:ro
- ../config/traces-api/vertx-options.json:/opt/consensys/linea/traces-api-facade/config/vertx-options.json:ro
- ../config/traces-api/log4j2-dev.xml:/opt/consensys/linea/traces-api-facade/config/log4j2-dev.xml:ro
- local-dev:/data/
networks:
linea:
ipv4_address: 11.11.11.105
transaction-exclusion-api:
hostname: transaction-exclusion-api
container_name: transaction-exclusion-api
image: consensys/linea-transaction-exclusion-api:${TRANSACTION_EXCLUSION_API_TAG:-d227ddf}
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
- local-dev:/data/
networks:
linea:
ipv4_address: 11.11.11.110
coordinator:
hostname: coordinator
container_name: coordinator
image: consensys/linea-coordinator:${COORDINATOR_TAG:-2ee4363}
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
- ../testdata/type2state-manager/state-proof.json:/opt/consensys/linea/coordinator/testdata/type2state-manager/state-proof.json
- local-dev:/data/
networks:
l1-network:
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" ]
ports:
- "9000:9000"
command:
- --key-store-path=/keyFiles/
- --http-host-allowlist=*
- eth1
volumes:
- ./web3signer/keyFiles/:/keyFiles/
networks:
- linea
l2-ethstats:
container_name: l2-ethstats
image: puppeth/ethstats:latest
profiles: [ "l2-observability", "debug" ]
environment:
WS_SECRET: ${WS_SECRET:-dummy-secret}
ports:
- "3000:3000"
restart: on-failure
networks:
linea:
ipv4_address: 11.11.11.200
postgres:
image: postgres:14.5
hostname: postgres
container_name: postgres
profiles: [ "l2", "debug" ]
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
- l1-network
l1-el-node:
container_name: l1-el-node
hostname: l1-el-node
image: hyperledger/besu:24.6.0
profiles: [ "l1", "debug" ]
depends_on:
l1-node-genesis-generator:
condition: service_completed_successfully
healthcheck:
test: [ "CMD-SHELL", "bash -c \"[ -f /tmp/pid ]\"" ]
interval: 1s
timeout: 1s
retries: 120
environment:
LOG4J_CONFIGURATION_FILE: /var/lib/besu/log4j.xml
command: [ "--config-file=/config/config.toml" ]
volumes:
- ./config/l1-node/el/besu.key:/config/keys/besu.key:ro
- ./config/l1-node/el/config.toml:/config/config.toml:ro
- ./config/l1-node/jwtsecret.txt:/config/jwtsecret.txt:ro
- ./config/l1-node/el/log4j.xml:/var/lib/besu/log4j.xml:ro
- local-dev:/data
ports:
- "8445:8545"
- "8446:8546"
- "8551:8551/tcp"
- "30303:30303"
- "9001:9001/tcp"
networks:
l1-network:
ipv4_address: 10.10.10.201
l1-cl-node:
container_name: l1-cl-node
hostname: l1-cl-node
image: consensys/teku:24.2.0
profiles: [ "l1", "debug" ]
depends_on:
l1-el-node:
condition: service_healthy
l1-node-genesis-generator:
condition: service_completed_successfully
command: [ "--config-file=/config/config-file.yaml" ]
volumes:
- ./config/l1-node/cl/teku.key:/config/keys/teku.key:ro
- ./config/l1-node/cl/teku-keys:/config/keys/teku-keys:ro
- ./config/l1-node/cl/teku-secrets:/config/keys/teku-secrets:ro
- ./config/l1-node/jwtsecret.txt:/config/jwtsecret.txt:ro
- ./config/l1-node/cl/config.yaml:/config/config-file.yaml:ro
- local-dev:/data
ports:
- "9002:9000"
- "8008:8008/tcp"
- "4003:4000/tcp"
- "5051/tcp"
networks:
l1-network:
ipv4_address: 10.10.10.202
l1-node-genesis-generator:
build:
context: ./config/l1-node/
profiles: [ "l1", "debug" ]
entrypoint:
- /bin/sh
- -c
- |
/config/generate-genesis.sh \
--genesis-time ${L1_GENESIS_TIME} \
--l1-genesis /config/l1-genesis.json \
--network-config /config/network-config.yml \
--mnemonics /config/mnemonics.yaml \
--output-dir /data/l1-node-config
volumes:
- ./config/l1-node/cl/network-config.yml:/config/network-config.yml:ro
- ./config/l1-node/cl/mnemonics.yaml:/config/mnemonics.yaml:ro
- ./config/l1-node/el/genesis.json:/config/l1-genesis.json
- ./config/l1-node/generate-genesis.sh:/config/generate-genesis.sh
- local-dev:/data
l1-blockscout:
container_name: l1-blockscout
hostname: l1-blockscout
image: blockscout/blockscout:${BLOCKSCOUT_TAG:-5.0.0}
profiles: [ "debug" ]
depends_on:
postgres:
condition: service_healthy
l1-el-node:
condition: service_started
command: bash -c "bin/blockscout eval \"Elixir.Explorer.ReleaseTasks.create_and_migrate()\" && bin/blockscout start"
env_file:
- ../config/blockscout/l1-blockscout.env
environment:
ETHEREUM_JSONRPC_HTTP_URL: http://l1-el-node:8545/
ETHEREUM_JSONRPC_TRACE_URL: http://l1-el-node:8545/
ETHEREUM_JSONRPC_WS_URL: ws://l1-el-node:8546/
DATABASE_URL: postgresql://${POSTGRES_USER:-postgres}:${POSTGRES_PASSWORD:-postgres}@postgres:5432/l1_blockscout_db?ssl=false
ECTO_USE_SSL: 'false'
ports:
- "4001:4000"
volumes:
- ./config/l1-node/el/genesis.json:/app/genesis.json:ro
networks:
- l1-network
zkbesu-shomei:
image: consensys/linea-besu:linea-delivery-27
hostname: zkbesu-shomei
container_name: zkbesu-shomei
profiles: [ "l2", "l2-bc" ]
depends_on:
shomei-plugin-downloader:
condition: service_completed_successfully
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
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 \
--Xbonsai-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
- ../tmp/zkbesu-shomei/plugins:/opt/besu/plugins/
shomei:
image: consensys/linea-shomei:2.2.0
hostname: shomei
container_name: shomei
profiles: [ "l2", "l2-bc" ]
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:
- local-dev:/data/
- ./config/shomei/log4j.xml:/log4j.xml:ro
# - ../tmp/local/shomei:/data/shomei/:z
shomei-frontend:
image: consensys/linea-shomei:2.2.0
hostname: shomei-frontend
container_name: shomei-frontend
profiles: [ "l2", "l2-bc" ]
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:
- local-dev:/data/
- ./config/shomei/log4j.xml:/log4j.xml:ro
shomei-plugin-downloader:
container_name: shomei-plugin-downloader
profiles: ["l2", "l2-bc"]
image: busybox:1.36.1
command: [ "sh", "/file-downloader.sh", "https://github.com/Consensys/besu-shomei-plugin/releases/download/v0.3.1/besu-shomei-plugin-v0.3.1.jar", "/shomei-plugin" ]
volumes:
- ./scripts/file-downloader.sh:/file-downloader.sh:ro
- ../tmp/zkbesu-shomei/plugins:/shomei-plugin/
l2-blockscout:
container_name: l2-blockscout
hostname: l2-blockscout
image: blockscout/blockscout:${BLOCKSCOUT_TAG:-5.0.0}
profiles: [ "debug" ]
depends_on:
postgres:
condition: service_healthy
l2-node:
condition: service_started
# - smart-contract-verifier not supported for v0.1
command: bash -c "bin/blockscout eval \"Elixir.Explorer.ReleaseTasks.create_and_migrate()\" && bin/blockscout start"
env_file:
- ../config/blockscout/l2-blockscout.env
environment:
ETHEREUM_JSONRPC_HTTP_URL: http://l2-node:8545/
ETHEREUM_JSONRPC_TRACE_URL: http://l2-node:8545/
ETHEREUM_JSONRPC_WS_URL: ws://l2-node:8546/
DATABASE_URL: postgresql://${POSTGRES_USER:-postgres}:${POSTGRES_PASSWORD:-postgres}@postgres:5432/l2_blockscout_db?ssl=false
ECTO_USE_SSL: 'false'
ports:
- "4000:4000"
volumes:
- ./config/linea-local-dev-genesis-PoA.json:/app/genesis.json:ro
networks:
- linea
loki:
container_name: loki
hostname: loki
image: grafana/loki:2.9.7
profiles: [ "observability" ]
ports:
- "3100:3100"
command: -config.file=/etc/loki/loki-config.yaml
volumes:
- ./config/observability/loki-config.yaml:/etc/loki/loki-config.yaml
networks:
- linea
promtail:
container_name: promtail
hostname: promtail
image: grafana/promtail:2.9.7 # use same version as loki
profiles: [ "observability" ]
volumes:
- ./config/observability/promtail-config.yaml:/etc/promtail/promtail-config.yaml
- ./../tmp/logs/:/var/log/
command: -config.file=/etc/promtail/promtail-config.yaml
networks:
- linea
prometheus:
container_name: prometheus
hostname: prometheus
image: prom/prometheus:v2.26.0
profiles: [ "observability" ]
ports:
- "9090:9090"
volumes:
- ./config/observability/prometheus-config.yaml:/etc/prometheus/prometheus-config.yaml
command:
- '--config.file=/etc/prometheus/prometheus-config.yaml'
networks:
- linea
grafana:
container_name: grafana
hostname: grafana
image: grafana/grafana:10.2.2
profiles: [ "observability" ]
ports:
- "3001:3000"
volumes:
- ./config/observability/grafana.ini:/etc/grafana/grafana.ini
- ./config/observability/grafana-datasources:/etc/grafana/provisioning/datasources
depends_on:
- loki
networks:
- linea