From 498981c61f5747ce32bc59dc8b93a175c02b0421 Mon Sep 17 00:00:00 2001 From: ancient123 Date: Wed, 19 Jul 2023 10:22:50 -0600 Subject: [PATCH] DRAFT: compose adjustments --- .env | 10 +- docker-compose-geth.yaml | 5 +- docker-compose.yaml | 9 +- permissionless-docker-compose.yaml | 182 +++++++++++------------------ 4 files changed, 85 insertions(+), 121 deletions(-) diff --git a/.env b/.env index a01e794..6bf0a81 100644 --- a/.env +++ b/.env @@ -26,7 +26,7 @@ ESPRESSO_ZKEVM_L1_PROVIDER=http://zkevm-mock-l1-network:$ESPRESSO_ZKEVM_L1_PORT # Hotshot commitment task ESPRESSO_SEQUENCER_HOTSHOT_ADDRESS=0x5fbdb2315678afecb367f032d93f642f64180aa3 ESPRESSO_SEQUENCER_ETH_MNEMONIC="test test test test test test test test test test test junk" -ESPRESSO_SEQUENCER_L1_PROVIDER=http://zkevm-mock-l1-network:$ESPRESSO_ZKEVM_L1_PORT +ESPRESSO_SEQUENCER_L1_PROVIDER=$ESPRESSO_ZKEVM_L1_PROVIDER ESPRESSO_SEQUENCER_QUERY_SERVICE_URL=http://sequencer0:$ESPRESSO_SEQUENCER_API_PORT # Config shared between both zkevm-nodes @@ -43,8 +43,8 @@ ESPRESSO_ZKEVM_KEYSTORE_DIR=./zkevm-node/test ESPRESSO_ZKEVM_KEYSTORE_NAME=aggregator.keystore # zkevm-node 1 -ESPRESSO_ZKEVM_1_L2_PORT=18126 -ESPRESSO_ZKEVM_1_L2_PORT_WS=18133 +ESPRESSO_ZKEVM_1_L2_PORT=8123 +ESPRESSO_ZKEVM_1_L2_PORT_WS=8133 ESPRESSO_ZKEVM_1_VERIFIER_ADDRESS=0xe7f1725e7734ce288f8367e1bb143e90bb3f0512 ESPRESSO_ZKEVM_1_MATIC_ADDRESS=0x9fe46736679d2d9a65f0992f2272de9f3c7fa6e0 ESPRESSO_ZKEVM_1_GER_ADDRESS=0xcf7ed3acca5a467e9e704c703e8d87f634fb0fc9 @@ -62,8 +62,8 @@ ESPRESSO_ZKEVM_1_FAUCET_PORT=18111 ESPRESSO_ZKEVM_1_FAUCET_WEB3_PROVIDER_URL_WS=ws://zkevm-1-permissionless-node:$ESPRESSO_ZKEVM_1_L2_PORT_WS # zkevm-node 2 -ESPRESSO_ZKEVM_2_L2_PORT=28126 -ESPRESSO_ZKEVM_2_L2_PORT_WS=28133 +ESPRESSO_ZKEVM_2_L2_PORT=8123 +ESPRESSO_ZKEVM_2_L2_PORT_WS=8133 ESPRESSO_ZKEVM_2_VERIFIER_ADDRESS=0x2279b7a0a67db372996a5fab50d91eaa73d2ebe6 ESPRESSO_ZKEVM_2_MATIC_ADDRESS=0x8a791620dd6260079bf849dc5567adc3f2fdc318 ESPRESSO_ZKEVM_2_GER_ADDRESS=0x610178da211fef7d417bc0e6fed39f05609ad788 diff --git a/docker-compose-geth.yaml b/docker-compose-geth.yaml index bd717cb..e1f5843 100644 --- a/docker-compose-geth.yaml +++ b/docker-compose-geth.yaml @@ -36,4 +36,7 @@ services: - $ESPRESSO_ZKEVM_L1_PORT:$ESPRESSO_ZKEVM_L1_PORT stop_signal: SIGKILL healthcheck: - test: ["CMD", "curl", "-s", "-f", "http://localhost:$ESPRESSO_ZKEVM_L1_PORT"] + test: "curl --fail http://localhost:$ESPRESSO_ZKEVM_L1_PORT" + interval: 1s + timeout: 0.5s + retries: 120 diff --git a/docker-compose.yaml b/docker-compose.yaml index 125abaf..0403ed2 100644 --- a/docker-compose.yaml +++ b/docker-compose.yaml @@ -50,6 +50,11 @@ services: condition: service_healthy zkevm-mock-l1-network: condition: service_healthy + healthcheck: + test: "curl --fail http://localhost:$ESPRESSO_SEQUENCER_API_PORT" + interval: 1s + timeout: 0.5s + retries: 120 sequencer1: image: ghcr.io/espressosystems/espresso-sequencer/sequencer:main # Run consensus *plus* the commitment task to post commitments to the @@ -132,7 +137,7 @@ services: sequencer0: condition: service_started healthcheck: - test: "curl http://localhost:$ESPRESSO_ZKEVM_1_ADAPTOR_QUERY_PORT" + test: "curl --fail http://localhost:$ESPRESSO_ZKEVM_1_ADAPTOR_QUERY_PORT" interval: 1s timeout: 0.5s retries: 120 @@ -155,7 +160,7 @@ services: sequencer0: condition: service_started healthcheck: - test: "curl http://localhost:$ESPRESSO_ZKEVM_2_ADAPTOR_QUERY_PORT" + test: "curl --fail http://localhost:$ESPRESSO_ZKEVM_2_ADAPTOR_QUERY_PORT" interval: 1s timeout: 0.5s retries: 120 diff --git a/permissionless-docker-compose.yaml b/permissionless-docker-compose.yaml index df66833..689b982 100644 --- a/permissionless-docker-compose.yaml +++ b/permissionless-docker-compose.yaml @@ -1,18 +1,13 @@ version: "3" services: - zkevm-1-aggregator: - image: ghcr.io/espressosystems/zkevm-node:hotshot-integration - expose: + image: ghcr.io/espressosystems/espresso-polygon-zkevm-demo/zkevm-node:main + ports: - 50081 - 9091 # needed if metrics enabled environment: - - ZKEVM_NODE_STATEDB_USER=state_user - - ZKEVM_NODE_STATEDB_PASSWORD=state_password - - ZKEVM_NODE_STATEDB_NAME=state_db + - ZKEVM_NODE_LOG_LEVEL=warn - ZKEVM_NODE_STATEDB_HOST=zkevm-1-state-db - # - ZKEVM_NODE_AGGREGATOR_VERIFYPROOFINTERVAL=10s # Defaults to 90s - # - ZKEVM_NODE_AGGREGATOR_RETRYTIME=2s # Defaults to 5s - ZKEVM_NODE_ETHERMAN_POEADDR=$ESPRESSO_ZKEVM_1_ROLLUP_ADDRESS - ZKEVM_NODE_ETHERMAN_MATICADDR=$ESPRESSO_ZKEVM_1_MATIC_ADDRESS - ZKEVM_NODE_ETHERMAN_GLOBALEXITROOTMANAGERADDR=$ESPRESSO_ZKEVM_1_GER_ADDRESS @@ -38,18 +33,16 @@ services: # Avoid running DB migrations at the same time: zkevm-1-permissionless-node: condition: service_healthy + healthcheck: + test: "curl --fail http://localhost:9091/metrics" + interval: 1s + timeout: 0.5s + retries: 120 zkevm-1-state-db: - image: postgres - expose: - - 5432 - volumes: - - ./zkevm-node/db/scripts/init_prover_db.sql:/docker-entrypoint-initdb.d/1.sql - - ./zkevm-node-additions/init_pool_db.sql:/docker-entrypoint-initdb.d/2.sql - environment: - - POSTGRES_USER=state_user - - POSTGRES_PASSWORD=state_password - - POSTGRES_DB=state_db + image: ghcr.io/espressosystems/espresso-polygon-zkevm-demo/state-db:main + ports: + - 5432 # DB command: [ "postgres", "-N", "500" ] healthcheck: # Postgres can be falsely "ready" once before running init scripts. @@ -60,18 +53,12 @@ services: retries: 20 zkevm-1-prover: - image: hermeznetwork/zkevm-prover:88f3835 - expose: + image: ghcr.io/espressosystems/espresso-polygon-zkevm-demo/zkevm-prover:main + ports: - 50052 # Mock prover - 50061 # MT - 50071 # Executor - volumes: - # The prover does not support configuration via env vars. The only - # difference between the prover of zkevm-1 and zkevm-2 are the values of - # "aggregatorClientHost" and "databaseURL". - - ./zkevm-node/test/config/test.prover.1.config.json:/usr/src/app/config.json - command: > - zkProver -c /usr/src/app/config.json + - 9091 # Metrics depends_on: zkevm-1-state-db: condition: service_healthy @@ -83,49 +70,36 @@ services: retries: 20 zkevm-1-permissionless-node: - image: ghcr.io/espressosystems/zkevm-node:hotshot-integration + image: ghcr.io/espressosystems/espresso-polygon-zkevm-demo/zkevm-node:main ports: - - $ESPRESSO_ZKEVM_1_L2_PORT:$ESPRESSO_ZKEVM_1_L2_PORT - - $ESPRESSO_ZKEVM_1_L2_PORT_WS:$ESPRESSO_ZKEVM_1_L2_PORT_WS + - 8123 # RPC + - 8133 # RPC WS + - 9091 # Metrics environment: + - ZKEVM_NODE_LOG_LEVEL=warn - ZKEVM_NODE_TRUSTED=false - - ZKEVM_NODE_STATEDB_USER=state_user - - ZKEVM_NODE_STATEDB_PASSWORD=state_password - - ZKEVM_NODE_STATEDB_NAME=state_db - ZKEVM_NODE_STATEDB_HOST=zkevm-1-state-db - - ZKEVM_NODE_POOL_DB_USER=state_user - - ZKEVM_NODE_POOL_DB_PASSWORD=state_password - - ZKEVM_NODE_POOL_DB_NAME=pool_db # different DB name to run pool migrations - ZKEVM_NODE_POOL_DB_HOST=zkevm-1-state-db - - ZKEVM_NODE_RPC_PORT=$ESPRESSO_ZKEVM_1_L2_PORT - - ZKEVM_NODE_RPC_WEBSOCKETS_PORT=$ESPRESSO_ZKEVM_1_L2_PORT_WS - - ZKEVM_NODE_RPC_SEQUENCERNODEURI=$ESPRESSO_ZKEVM_1_ADAPTOR_RPC_URL - - ZKEVM_NODE_ETHERMAN_URL=http://zkevm-mock-l1-network:$ESPRESSO_ZKEVM_L1_PORT - - ZKEVM_NODE_ETHERMAN_POEADDR=$ESPRESSO_ZKEVM_1_ROLLUP_ADDRESS - - ZKEVM_NODE_ETHERMAN_MATICADDR=$ESPRESSO_ZKEVM_1_MATIC_ADDRESS - - ZKEVM_NODE_ETHERMAN_GLOBALEXITROOTMANAGERADDR=$ESPRESSO_ZKEVM_1_GER_ADDRESS - - ZKEVM_NODE_ETHERMAN_HOTSHOTQUERYSERVICEURL=$ESPRESSO_ZKEVM_1_ADAPTOR_QUERY_URL - - ZKEVM_NODE_ETHERMAN_HOTSHOTADDR=$ESPRESSO_SEQUENCER_HOTSHOT_ADDRESS - - ZKEVM_NODE_SYNCHRONIZER_GENBLOCKNUMBER=$ESPRESSO_ZKEVM_1_GENBLOCKNUMBER - - ZKEVM_NODE_SYNCHRONIZER_IGNOREGENBLOCKNUMBERCHECK=$ESPRESSO_ZKEVM_IGNORE_GEN_BLOCK_NUMBER_CHECK - - ZKEVM_NODE_MTCLIENT_URI=$ESPRESSO_ZKEVM_1_MTCLIENT_URI - - ZKEVM_NODE_EXECUTOR_URI=$ESPRESSO_ZKEVM_1_EXECUTOR_URI + - ZKEVM_NODE_RPC_SEQUENCERNODEURI=$ESPRESSO_ZKEVM_1_ADAPTOR_RPC_URL # polygon-zkevm-1-adaptor RPC + - ZKEVM_NODE_ETHERMAN_URL=$ESPRESSO_ZKEVM_L1_PROVIDER # zkevm-mock-l1-network RPC + - ZKEVM_NODE_ETHERMAN_POEADDR=$ESPRESSO_ZKEVM_1_ROLLUP_ADDRESS # Contract address?? + - ZKEVM_NODE_ETHERMAN_MATICADDR=$ESPRESSO_ZKEVM_1_MATIC_ADDRESS # Contract address?? + - ZKEVM_NODE_ETHERMAN_GLOBALEXITROOTMANAGERADDR=$ESPRESSO_ZKEVM_1_GER_ADDRESS # Contract address?? + - ZKEVM_NODE_ETHERMAN_HOTSHOTQUERYSERVICEURL=$ESPRESSO_ZKEVM_1_ADAPTOR_QUERY_URL # polygon-zkevm-1-adaptor Query + - ZKEVM_NODE_ETHERMAN_HOTSHOTADDR=$ESPRESSO_SEQUENCER_HOTSHOT_ADDRESS # Contract address?? + - ZKEVM_NODE_SYNCHRONIZER_GENBLOCKNUMBER=$ESPRESSO_ZKEVM_1_GENBLOCKNUMBER # ?? + - ZKEVM_NODE_SYNCHRONIZER_IGNOREGENBLOCKNUMBERCHECK=$ESPRESSO_ZKEVM_IGNORE_GEN_BLOCK_NUMBER_CHECK # Ignore the last thing? + - ZKEVM_NODE_MTCLIENT_URI=$ESPRESSO_ZKEVM_1_MTCLIENT_URI # Prover MT + - ZKEVM_NODE_EXECUTOR_URI=$ESPRESSO_ZKEVM_1_EXECUTOR_URI # Prover Executor volumes: - - ./zkevm-node/test/sequencer.keystore:/pk/keystore - ./zkevm-node/test/config/test.node.config.toml:/app/config.toml - - ./zkevm-node/test/config/test.genesis.config.json:/app/genesis.json - command: - - "/bin/sh" - - "-c" - - "/app/zkevm-node run --genesis /app/genesis.json --cfg /app/config.toml --components \"rpc,synchronizer\"" depends_on: zkevm-mock-l1-network: condition: service_started zkevm-1-state-db: condition: service_healthy healthcheck: - # curl not installed in container, but wget is - test: "wget http://localhost:$ESPRESSO_ZKEVM_1_L2_PORT -q --spider --tries 1 || exit 1" + test: "curl --fail http://localhost:9091/metrics" interval: 1s timeout: 0.5s retries: 120 @@ -133,16 +107,16 @@ services: - "host.docker.internal:host-gateway" zkevm-1-eth-tx-manager: - image: ghcr.io/espressosystems/zkevm-node:hotshot-integration + image: ghcr.io/espressosystems/espresso-polygon-zkevm-demo/zkevm-node:main + ports: + - 9091 # needed if metrics enabled environment: - - ZKEVM_NODE_STATEDB_USER=state_user - - ZKEVM_NODE_STATEDB_PASSWORD=state_password - - ZKEVM_NODE_STATEDB_NAME=state_db + - ZKEVM_NODE_LOG_LEVEL=warn - ZKEVM_NODE_STATEDB_HOST=zkevm-1-state-db - ZKEVM_NODE_ETHERMAN_POEADDR=$ESPRESSO_ZKEVM_1_ROLLUP_ADDRESS - ZKEVM_NODE_ETHERMAN_MATICADDR=$ESPRESSO_ZKEVM_1_MATIC_ADDRESS - ZKEVM_NODE_ETHERMAN_GLOBALEXITROOTMANAGERADDR=$ESPRESSO_ZKEVM_1_GER_ADDRESS - - ZKEVM_NODE_ETHERMAN_URL=http://zkevm-mock-l1-network:$ESPRESSO_ZKEVM_L1_PORT + - ZKEVM_NODE_ETHERMAN_URL=$ESPRESSO_ZKEVM_L1_PROVIDER - ZKEVM_NODE_ETHERMAN_HOTSHOTQUERYSERVICEURL=$ESPRESSO_ZKEVM_1_ADAPTOR_QUERY_URL - ZKEVM_NODE_ETHERMAN_HOTSHOTADDR=$ESPRESSO_SEQUENCER_HOTSHOT_ADDRESS - ZKEVM_NODE_MTCLIENT_URI=$ESPRESSO_ZKEVM_1_MTCLIENT_URI @@ -159,6 +133,11 @@ services: depends_on: zkevm-1-permissionless-node: condition: service_healthy + healthcheck: + test: "curl --fail http://localhost:9091/metrics" + interval: 1s + timeout: 0.5s + retries: 120 zkevm-1-faucet: image: ghcr.io/espressosystems/espresso-polygon-zkevm-demo/faucet:main @@ -185,32 +164,22 @@ services: # Polygon zkevm-node 2 zkevm-2-aggregator: - image: ghcr.io/espressosystems/zkevm-node:hotshot-integration - expose: - - 50081 + image: ghcr.io/espressosystems/espresso-polygon-zkevm-demo/zkevm-node:main + ports: + - 50081 # aggregator port - 9091 # needed if metrics enabled environment: - - ZKEVM_NODE_STATEDB_USER=state_user - - ZKEVM_NODE_STATEDB_PASSWORD=state_password - - ZKEVM_NODE_STATEDB_NAME=state_db - ZKEVM_NODE_STATEDB_HOST=zkevm-2-state-db - # - ZKEVM_NODE_AGGREGATOR_VERIFYPROOFINTERVAL=10s # Defaults to 90s - # - ZKEVM_NODE_AGGREGATOR_RETRYTIME=2s # Defaults to 5s - ZKEVM_NODE_ETHERMAN_POEADDR=$ESPRESSO_ZKEVM_2_ROLLUP_ADDRESS - ZKEVM_NODE_ETHERMAN_MATICADDR=$ESPRESSO_ZKEVM_2_MATIC_ADDRESS - ZKEVM_NODE_ETHERMAN_GLOBALEXITROOTMANAGERADDR=$ESPRESSO_ZKEVM_2_GER_ADDRESS - - ZKEVM_NODE_ETHERMAN_URL=http://zkevm-mock-l1-network:$ESPRESSO_ZKEVM_L1_PORT + - ZKEVM_NODE_ETHERMAN_URL=$ESPRESSO_ZKEVM_L1_PROVIDER - ZKEVM_NODE_ETHERMAN_HOTSHOTQUERYSERVICEURL=$ESPRESSO_ZKEVM_2_ADAPTOR_QUERY_URL - ZKEVM_NODE_ETHERMAN_HOTSHOTADDR=$ESPRESSO_SEQUENCER_HOTSHOT_ADDRESS # Use the deployer account to match zkevm-contracts geth L1 deployment. - ZKEVM_NODE_AGGREGATOR_SENDERADDRESS=0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266 - ZKEVM_NODE_MTCLIENT_URI=$ESPRESSO_ZKEVM_2_MTCLIENT_URI - ZKEVM_NODE_EXECUTOR_URI=$ESPRESSO_ZKEVM_2_EXECUTOR_URI - volumes: - - ./zkevm-node/test/sequencer.keystore:/pk/sequencer.keystore - - ./zkevm-node/test/aggregator.keystore:/pk/aggregator.keystore - - ./zkevm-node/test/config/test.node.config.toml:/app/config.toml - - ./zkevm-node/test/config/test.genesis.config.json:/app/genesis.json command: - "/bin/sh" - "-c" @@ -221,18 +190,16 @@ services: # Avoid running DB migrations at the same time: zkevm-2-permissionless-node: condition: service_healthy + healthcheck: + test: "curl --fail http://localhost:9091/metrics" + interval: 1s + timeout: 0.5s + retries: 120 zkevm-2-state-db: - image: postgres - expose: - - 5432 - volumes: - - ./zkevm-node/db/scripts/init_prover_db.sql:/docker-entrypoint-initdb.d/1.sql - - ./zkevm-node-additions/init_pool_db.sql:/docker-entrypoint-initdb.d/2.sql - environment: - - POSTGRES_USER=state_user - - POSTGRES_PASSWORD=state_password - - POSTGRES_DB=state_db + image: ghcr.io/espressosystems/espresso-polygon-zkevm-demo/state-db:main + ports: + - 5432 # DB command: [ "postgres", "-N", "500" ] healthcheck: # Postgres can be falsely "ready" once before running init scripts. @@ -243,15 +210,13 @@ services: retries: 20 zkevm-2-prover: - image: hermeznetwork/zkevm-prover:88f3835 - expose: + image: ghcr.io/espressosystems/espresso-polygon-zkevm-demo/zkevm-prover:main + ports: - 50052 # Mock prover - 50061 # MT - 50071 # Executor volumes: - - ./zkevm-node/test/config/test.prover.2.config.json:/usr/src/app/config.json - command: > - zkProver -c /usr/src/app/config.json + - ./zkevm-node/test/config/test.prover.2.config.json:/app/config.json depends_on: zkevm-2-state-db: condition: service_healthy @@ -263,22 +228,15 @@ services: retries: 20 zkevm-2-permissionless-node: - image: ghcr.io/espressosystems/zkevm-node:hotshot-integration + image: ghcr.io/espressosystems/espresso-polygon-zkevm-demo/zkevm-node:main ports: - - $ESPRESSO_ZKEVM_2_L2_PORT:$ESPRESSO_ZKEVM_2_L2_PORT - - $ESPRESSO_ZKEVM_2_L2_PORT_WS:$ESPRESSO_ZKEVM_2_L2_PORT_WS + - 8123 # RPC + - 8133 # RPC WS + - 9091 # Metrics environment: - ZKEVM_NODE_TRUSTED=false - - ZKEVM_NODE_STATEDB_USER=state_user - - ZKEVM_NODE_STATEDB_PASSWORD=state_password - - ZKEVM_NODE_STATEDB_NAME=state_db - ZKEVM_NODE_STATEDB_HOST=zkevm-2-state-db - - ZKEVM_NODE_POOL_DB_USER=state_user - - ZKEVM_NODE_POOL_DB_PASSWORD=state_password - - ZKEVM_NODE_POOL_DB_NAME=pool_db # different DB name to run pool migrations - ZKEVM_NODE_POOL_DB_HOST=zkevm-2-state-db - - ZKEVM_NODE_RPC_PORT=$ESPRESSO_ZKEVM_2_L2_PORT - - ZKEVM_NODE_RPC_WEBSOCKETS_PORT=$ESPRESSO_ZKEVM_2_L2_PORT_WS - ZKEVM_NODE_RPC_SEQUENCERNODEURI=$ESPRESSO_ZKEVM_2_ADAPTOR_RPC_URL - ZKEVM_NODE_ETHERMAN_URL=http://zkevm-mock-l1-network:$ESPRESSO_ZKEVM_L1_PORT - ZKEVM_NODE_ETHERMAN_POEADDR=$ESPRESSO_ZKEVM_2_ROLLUP_ADDRESS @@ -290,22 +248,13 @@ services: - ZKEVM_NODE_SYNCHRONIZER_IGNOREGENBLOCKNUMBERCHECK=$ESPRESSO_ZKEVM_IGNORE_GEN_BLOCK_NUMBER_CHECK - ZKEVM_NODE_MTCLIENT_URI=$ESPRESSO_ZKEVM_2_MTCLIENT_URI - ZKEVM_NODE_EXECUTOR_URI=$ESPRESSO_ZKEVM_2_EXECUTOR_URI - volumes: - - ./zkevm-node/test/sequencer.keystore:/pk/keystore - - ./zkevm-node/test/config/test.node.config.toml:/app/config.toml - - ./zkevm-node/test/config/test.genesis.config.json:/app/genesis.json - command: - - "/bin/sh" - - "-c" - - "/app/zkevm-node run --genesis /app/genesis.json --cfg /app/config.toml --components \"rpc,synchronizer\"" depends_on: zkevm-mock-l1-network: condition: service_started zkevm-2-state-db: condition: service_healthy healthcheck: - # curl not installed in container, but wget is - test: "wget http://localhost:$ESPRESSO_ZKEVM_2_L2_PORT -q --spider --tries 1 || exit 1" + test: "curl --fail http://localhost:9091/metrics" interval: 1s timeout: 0.5s retries: 120 @@ -313,7 +262,9 @@ services: - "host.docker.internal:host-gateway" zkevm-2-eth-tx-manager: - image: ghcr.io/espressosystems/zkevm-node:hotshot-integration + image: ghcr.io/espressosystems/espresso-polygon-zkevm-demo/zkevm-node:main + ports: + - 9091 # Metrics environment: - ZKEVM_NODE_STATEDB_USER=state_user - ZKEVM_NODE_STATEDB_PASSWORD=state_password @@ -339,6 +290,11 @@ services: depends_on: zkevm-2-permissionless-node: condition: service_healthy + healthcheck: + test: "curl --fail http://localhost:9091/metrics" + interval: 1s + timeout: 0.5s + retries: 120 zkevm-2-faucet: image: ghcr.io/espressosystems/espresso-polygon-zkevm-demo/faucet:main