diff --git a/.env b/.env index ff1ec25..5006774 100644 --- a/.env +++ b/.env @@ -27,7 +27,7 @@ ESPRESSO_SEQUENCER_URL=http://sequencer0:$ESPRESSO_SEQUENCER_API_PORT ESPRESSO_SEQUENCER_STORAGE_PATH=/store/sequencer ESPRESSO_ZKEVM_L1_PORT=8545 -ESPRESSO_ZKEVM_L1_PROVIDER=http://zkevm-mock-l1-network:$ESPRESSO_ZKEVM_L1_PORT +ESPRESSO_ZKEVM_L1_PROVIDER=http://demo-l1-network:$ESPRESSO_ZKEVM_L1_PORT ESPRESSO_ZKEVM_L1_BLOCK_PERIOD=1 # Hotshot commitment task @@ -35,7 +35,7 @@ ESPRESSO_SEQUENCER_HOTSHOT_ADDRESS=0x5fbdb2315678afecb367f032d93f642f64180aa3 ESPRESSO_SEQUENCER_ETH_MNEMONIC="test test test test test test test test test test test junk" # Use a different account than the L2 aggregators use, to avoid nonce collisions. ESPRESSO_SEQUENCER_ETH_ACCOUNT_INDEX=1 -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 @@ -71,7 +71,7 @@ ESPRESSO_ZKEVM_1_GENESIS_BLOCK_NUMBER=16 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 ESPRESSO_ZKEVM_1_FAUCET_WEB3_PROVIDER_URL_HTTP=http://zkevm-1-permissionless-node:$ESPRESSO_ZKEVM_1_L2_PORT -ESPRESSO_ZKEVM_1_GENESIS_HOTSHOT_BLOCK_NUMBER="UNSET" +ESPRESSO_ZKEVM_1_GENESIS_HOTSHOT_BLOCK_NUMBER=0 # zkevm-preconfirmations-node 1 ESPRESSO_ZKEVM_1_PRECONFIRMATIONS_L2_PORT=18127 @@ -79,31 +79,3 @@ ESPRESSO_ZKEVM_1_PRECONFIRMATIONS_L2_PORT_WS=18134 ESPRESSO_ZKEVM_1_PRECONFIRMATIONS_SYNC_INTERVAL=1s ESPRESSO_ZKEVM_1_PRECONFIRMATIONS_MTCLIENT_URI=zkevm-1-preconfirmations-prover:50061 ESPRESSO_ZKEVM_1_PRECONFIRMATIONS_EXECUTOR_URI=zkevm-1-preconfirmations-prover:50071 - -# zkevm-node 2 -ESPRESSO_ZKEVM_2_L2_PORT=28126 -ESPRESSO_ZKEVM_2_L2_PORT_WS=28133 -ESPRESSO_ZKEVM_2_VERIFIER_ADDRESS=0x2279b7a0a67db372996a5fab50d91eaa73d2ebe6 -ESPRESSO_ZKEVM_2_MATIC_ADDRESS=0x8a791620dd6260079bf849dc5567adc3f2fdc318 -ESPRESSO_ZKEVM_2_GER_ADDRESS=0x610178da211fef7d417bc0e6fed39f05609ad788 -ESPRESSO_ZKEVM_2_BRIDGE_ADDRESS=0xb7f8bc63bbcad18155201308c8f3540b07f84f5e -ESPRESSO_ZKEVM_2_ROLLUP_ADDRESS=0xa51c1fc2f0d1a1b8494ed1fe312d7c3a78ed91c0 -ESPRESSO_ZKEVM_2_MTCLIENT_URI=zkevm-2-prover:50061 -ESPRESSO_ZKEVM_2_EXECUTOR_URI=zkevm-2-prover:50071 -ESPRESSO_ZKEVM_2_SEQUENCER_MNEMONIC="test test test test test test test test test test test junk" -ESPRESSO_ZKEVM_2_ADAPTOR_RPC_PORT=28130 -ESPRESSO_ZKEVM_2_ADAPTOR_RPC_URL=http://polygon-zkevm-2-adaptor:$ESPRESSO_ZKEVM_2_ADAPTOR_RPC_PORT -ESPRESSO_ZKEVM_2_ADAPTOR_QUERY_PORT=50200 -ESPRESSO_ZKEVM_2_ADAPTOR_QUERY_URL=http://polygon-zkevm-2-adaptor:$ESPRESSO_ZKEVM_2_ADAPTOR_QUERY_PORT -ESPRESSO_ZKEVM_2_GENESIS_BLOCK_NUMBER=30 -ESPRESSO_ZKEVM_2_FAUCET_PORT=28111 -ESPRESSO_ZKEVM_2_FAUCET_WEB3_PROVIDER_URL_WS=ws://zkevm-2-permissionless-node:$ESPRESSO_ZKEVM_2_L2_PORT_WS -ESPRESSO_ZKEVM_2_FAUCET_WEB3_PROVIDER_URL_HTTP=http://zkevm-2-permissionless-node:$ESPRESSO_ZKEVM_2_L2_PORT -ESPRESSO_ZKEVM_2_GENESIS_HOTSHOT_BLOCK_NUMBER="UNSET" - -# zkevm-preconfirmations-node 2 -ESPRESSO_ZKEVM_2_PRECONFIRMATIONS_L2_PORT=28127 -ESPRESSO_ZKEVM_2_PRECONFIRMATIONS_L2_PORT_WS=28134 -ESPRESSO_ZKEVM_2_PRECONFIRMATIONS_SYNC_INTERVAL=1s -ESPRESSO_ZKEVM_2_PRECONFIRMATIONS_MTCLIENT_URI=zkevm-2-preconfirmations-prover:50061 -ESPRESSO_ZKEVM_2_PRECONFIRMATIONS_EXECUTOR_URI=zkevm-2-preconfirmations-prover:50071 diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 3c77bfa..a0da6ab 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -58,7 +58,7 @@ jobs: password: ${{ secrets.GITHUB_TOKEN }} - name: Pull all docker compose images - run: docker-compose -f docker-compose.yaml -f docker-compose-anvil.yaml -f permissionless-docker-compose.yaml pull + run: docker compose -f standalone-docker-compose.yaml -f docker-compose-anvil.yaml pull - uses: Swatinem/rust-cache@v2 name: Enable Rust Caching diff --git a/README.md b/README.md index e2ae4d6..93514ec 100644 --- a/README.md +++ b/README.md @@ -176,8 +176,8 @@ simultaneous L2s but don't want the overhead of the secondary preconfirmations n To know more about the environment check out the following files - [.env](.env): Environment variables -- [docker-compose.yaml](docker-compose.yaml): Espresso Sequencer services -- [permissionless-docker-compose.yaml](permissionless-docker-compose.yaml): Polygon zkEVM services +- [docker-compose.yaml](docker-compose.yaml): Polygon zkEVM services +- [standalone-docker-compose.yaml](standalone-docker-compose.yaml): Espresso Sequencer services Another good place to start is the end-to-end test in [polygon-zkevm-adaptor/tests/end_to_end.rs](polygon-zkevm-adaptor/tests/end_to_end.rs). diff --git a/docker-compose-anvil.yaml b/docker-compose-anvil.yaml index 767196f..d92a569 100644 --- a/docker-compose-anvil.yaml +++ b/docker-compose-anvil.yaml @@ -1,6 +1,6 @@ version: "3" services: - zkevm-mock-l1-network: + demo-l1-network: image: ghcr.io/foundry-rs/foundry:latest ports: - $ESPRESSO_ZKEVM_L1_PORT:$ESPRESSO_ZKEVM_L1_PORT @@ -17,4 +17,4 @@ services: stop_signal: SIGKILL healthcheck: - test: ["CMD", "cast", "chain-id"] \ No newline at end of file + test: ["CMD", "cast", "chain-id"] diff --git a/docker-compose-geth.yaml b/docker-compose-geth.yaml index 81c6b80..04c0b59 100644 --- a/docker-compose-geth.yaml +++ b/docker-compose-geth.yaml @@ -1,6 +1,6 @@ version: "3" services: - zkevm-mock-l1-network: + demo-l1-network: # This image is pinned because the deployment step is not deterministic. The # block number at which the contracts are deployed changes between runs. # image: ghcr.io/espressosystems/espresso-polygon-zkevm-demo/geth-with-contracts@sha256:8dfb508b77af42e511553e609fa6e0ef68818852737085f40cc5c769dc0ccf96 diff --git a/docker-compose.yaml b/docker-compose.yaml index 8b498a3..017a9d1 100644 --- a/docker-compose.yaml +++ b/docker-compose.yaml @@ -1,175 +1,180 @@ version: "3" + +networks: + default: + name: espresso-sequencer + services: - orchestrator: - image: ghcr.io/espressosystems/espresso-sequencer/orchestrator:main - ports: - - "$ESPRESSO_ORCHESTRATOR_PORT:$ESPRESSO_ORCHESTRATOR_PORT" - environment: - - ESPRESSO_ORCHESTRATOR_PORT - - ESPRESSO_ORCHESTRATOR_NUM_NODES=5 - - ESPRESSO_ORCHESTRATOR_START_DELAY=5s - - ESPRESSO_ORCHESTRATOR_MIN_PROPOSE_TIME - - ESPRESSO_ORCHESTRATOR_MAX_PROPOSE_TIME - - ESPRESSO_ORCHESTRATOR_NEXT_VIEW_TIMEOUT - - RUST_LOG - - RUST_LOG_FORMAT - da-server: - image: ghcr.io/espressosystems/espresso-sequencer/web-server:main - ports: - - "$ESPRESSO_DA_SERVER_PORT:$ESPRESSO_WEB_SERVER_PORT" - environment: - - ESPRESSO_WEB_SERVER_PORT - - RUST_LOG - depends_on: - orchestrator: - condition: service_healthy - consensus-server: - image: ghcr.io/espressosystems/espresso-sequencer/web-server:main + + polygon-zkevm-1-adaptor: + extends: + file: services.yaml + service: adaptor ports: - - "$ESPRESSO_CONSENSUS_SERVER_PORT:$ESPRESSO_WEB_SERVER_PORT" + - "$ESPRESSO_ZKEVM_1_ADAPTOR_RPC_PORT:$ESPRESSO_ZKEVM_1_ADAPTOR_RPC_PORT" + - "$ESPRESSO_ZKEVM_1_ADAPTOR_QUERY_PORT:$ESPRESSO_ZKEVM_1_ADAPTOR_QUERY_PORT" environment: - - ESPRESSO_WEB_SERVER_PORT - - RUST_LOG - depends_on: - orchestrator: - condition: service_healthy + - ESPRESSO_ZKEVM_ADAPTOR_RPC_PORT=$ESPRESSO_ZKEVM_1_ADAPTOR_RPC_PORT + - ESPRESSO_ZKEVM_ADAPTOR_QUERY_PORT=$ESPRESSO_ZKEVM_1_ADAPTOR_QUERY_PORT + profiles: + - zkevm1 + - zkevm1-preconfirmations - sequencer0: - image: ghcr.io/espressosystems/espresso-sequencer/sequencer:main - # Run consensus *plus* the sequencer API server. - command: /bin/sequencer -- http -- query -- submit - ports: - - "$ESPRESSO_SEQUENCER_API_PORT:$ESPRESSO_SEQUENCER_API_PORT" + zkevm-1-aggregator: + extends: + file: services.yaml + service: aggregator environment: - - ESPRESSO_SEQUENCER_ORCHESTRATOR_URL - - ESPRESSO_SEQUENCER_DA_SERVER_URL - - ESPRESSO_SEQUENCER_CONSENSUS_SERVER_URL - - ESPRESSO_SEQUENCER_API_PORT - - ESPRESSO_SEQUENCER_STORAGE_PATH - - ESPRESSO_SEQUENCER_L1_PROVIDER - - RUST_LOG - - RUST_LOG_FORMAT + - 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=$ESPRESSO_ZKEVM_L1_PROVIDER + - ZKEVM_NODE_ETHERMAN_HOTSHOTQUERYSERVICEURL=$ESPRESSO_ZKEVM_1_ADAPTOR_QUERY_URL + - ZKEVM_NODE_ETHERMAN_HOTSHOTADDR=$ESPRESSO_SEQUENCER_HOTSHOT_ADDRESS + - ZKEVM_NODE_AGGREGATOR_SENDERADDRESS=0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266 + - ZKEVM_NODE_MTCLIENT_URI=$ESPRESSO_ZKEVM_1_MTCLIENT_URI + - ZKEVM_NODE_EXECUTOR_URI=$ESPRESSO_ZKEVM_1_EXECUTOR_URI depends_on: - orchestrator: + zkevm-1-prover: condition: service_healthy - zkevm-mock-l1-network: + # Avoid running DB migrations at the same time: + zkevm-1-permissionless-node: condition: service_healthy - sequencer1: - image: ghcr.io/espressosystems/espresso-sequencer/sequencer:main - # Run consensus *plus* the commitment task to post commitments to the - # hotshot contract. - command: /bin/sequencer -- http -- commitment-task - environment: - - ESPRESSO_SEQUENCER_ORCHESTRATOR_URL - - ESPRESSO_SEQUENCER_DA_SERVER_URL - - ESPRESSO_SEQUENCER_CONSENSUS_SERVER_URL - - ESPRESSO_SEQUENCER_API_PORT - - ESPRESSO_SEQUENCER_ETH_MNEMONIC - - ESPRESSO_SEQUENCER_ETH_ACCOUNT_INDEX - - ESPRESSO_SEQUENCER_HOTSHOT_ADDRESS - - ESPRESSO_SEQUENCER_L1_PROVIDER - - ESPRESSO_SEQUENCER_QUERY_SERVICE_URL - - RUST_LOG - - RUST_LOG_FORMAT + profiles: + - zkevm1 + + zkevm-1-state-db: + extends: + file: services.yaml + service: state-db + profiles: + - zkevm1 + + zkevm-1-preconfirmations-state-db: + extends: + file: services.yaml + service: state-db + profiles: + - zkevm1-preconfirmations + + zkevm-1-prover: + extends: + file: services.yaml + service: prover + volumes: + - ./zkevm-node/test/config/test.prover.1.config.json:/usr/src/app/config.json depends_on: - orchestrator: + zkevm-1-state-db: condition: service_healthy - sequencer0: - condition: service_started - sequencer2: - image: ghcr.io/espressosystems/espresso-sequencer/sequencer:main - environment: - - ESPRESSO_SEQUENCER_ORCHESTRATOR_URL - - ESPRESSO_SEQUENCER_DA_SERVER_URL - - ESPRESSO_SEQUENCER_CONSENSUS_SERVER_URL - - ESPRESSO_SEQUENCER_API_PORT - - ESPRESSO_SEQUENCER_L1_PROVIDER - - RUST_LOG - - RUST_LOG_FORMAT + profiles: + - zkevm1 + + zkevm-1-preconfirmations-prover: + extends: + file: services.yaml + service: prover + volumes: + - ./zkevm-node/test/config/test.prover.1.config.json:/usr/src/app/config.json depends_on: - orchestrator: + zkevm-1-preconfirmations-state-db: condition: service_healthy - sequencer0: - condition: service_started - sequencer3: - image: ghcr.io/espressosystems/espresso-sequencer/sequencer:main + profiles: + - zkevm1-preconfirmations + + zkevm-1-permissionless-node: + extends: + file: services.yaml + service: permissionless-node + ports: + - $ESPRESSO_ZKEVM_1_L2_PORT:$ESPRESSO_ZKEVM_1_L2_PORT + - $ESPRESSO_ZKEVM_1_L2_PORT_WS:$ESPRESSO_ZKEVM_1_L2_PORT_WS environment: - - ESPRESSO_SEQUENCER_ORCHESTRATOR_URL - - ESPRESSO_SEQUENCER_DA_SERVER_URL - - ESPRESSO_SEQUENCER_CONSENSUS_SERVER_URL - - ESPRESSO_SEQUENCER_API_PORT - - ESPRESSO_SEQUENCER_L1_PROVIDER - - RUST_LOG - - RUST_LOG_FORMAT + - ZKEVM_NODE_STATEDB_HOST=zkevm-1-state-db + - 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=$ESPRESSO_ZKEVM_L1_PROVIDER + - 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_ETHERMAN_GENESISHOTSHOTBLOCKNUMBER=$ESPRESSO_ZKEVM_1_GENESIS_HOTSHOT_BLOCK_NUMBER + - ZKEVM_NODE_SYNCHRONIZER_GENBLOCKNUMBER=$ESPRESSO_ZKEVM_1_GENESIS_BLOCK_NUMBER + - 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 depends_on: - orchestrator: + zkevm-1-state-db: condition: service_healthy - sequencer0: - condition: service_started - sequencer4: - image: ghcr.io/espressosystems/espresso-sequencer/sequencer:main + profiles: + - zkevm1 + + zkevm-1-preconfirmations-node: + extends: + file: services.yaml + service: permissionless-node + ports: + - $ESPRESSO_ZKEVM_1_PRECONFIRMATIONS_L2_PORT:$ESPRESSO_ZKEVM_1_PRECONFIRMATIONS_L2_PORT + - $ESPRESSO_ZKEVM_1_PRECONFIRMATIONS_L2_PORT_WS:$ESPRESSO_ZKEVM_1_PRECONFIRMATIONS_L2_PORT_WS environment: - - ESPRESSO_SEQUENCER_ORCHESTRATOR_URL - - ESPRESSO_SEQUENCER_DA_SERVER_URL - - ESPRESSO_SEQUENCER_CONSENSUS_SERVER_URL - - ESPRESSO_SEQUENCER_API_PORT - - ESPRESSO_SEQUENCER_L1_PROVIDER - - RUST_LOG - - RUST_LOG_FORMAT + - ZKEVM_NODE_STATEDB_HOST=zkevm-1-preconfirmations-state-db + - ZKEVM_NODE_POOL_DB_HOST=zkevm-1-preconfirmations-state-db + - ZKEVM_NODE_RPC_PORT=$ESPRESSO_ZKEVM_1_PRECONFIRMATIONS_L2_PORT + - ZKEVM_NODE_RPC_WEBSOCKETS_PORT=$ESPRESSO_ZKEVM_1_PRECONFIRMATIONS_L2_PORT_WS + - ZKEVM_NODE_RPC_SEQUENCERNODEURI=$ESPRESSO_ZKEVM_1_ADAPTOR_RPC_URL + - ZKEVM_NODE_ETHERMAN_URL=$ESPRESSO_ZKEVM_L1_PROVIDER + - 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_ETHERMAN_GENESISHOTSHOTBLOCKNUMBER=$ESPRESSO_ZKEVM_1_GENESIS_HOTSHOT_BLOCK_NUMBER + - ZKEVM_NODE_SYNCHRONIZER_GENBLOCKNUMBER=$ESPRESSO_ZKEVM_1_GENESIS_BLOCK_NUMBER + - ZKEVM_NODE_SYNCHRONIZER_PRECONFIRMATIONSSYNCINTERVAL=$ESPRESSO_ZKEVM_1_PRECONFIRMATIONS_SYNC_INTERVAL + - ZKEVM_NODE_SYNCHRONIZER_IGNOREGENBLOCKNUMBERCHECK=$ESPRESSO_ZKEVM_IGNORE_GEN_BLOCK_NUMBER_CHECK + - ZKEVM_NODE_MTCLIENT_URI=$ESPRESSO_ZKEVM_1_PRECONFIRMATIONS_MTCLIENT_URI + - ZKEVM_NODE_EXECUTOR_URI=$ESPRESSO_ZKEVM_1_PRECONFIRMATIONS_EXECUTOR_URI depends_on: - orchestrator: + zkevm-1-preconfirmations-state-db: condition: service_healthy - sequencer0: - condition: service_started + profiles: + - zkevm1-preconfirmations - polygon-zkevm-1-adaptor: - image: ghcr.io/espressosystems/espresso-polygon-zkevm-demo/polygon-zkevm-adaptor:main - ports: - - "$ESPRESSO_ZKEVM_1_ADAPTOR_RPC_PORT:$ESPRESSO_ZKEVM_1_ADAPTOR_RPC_PORT" - - "$ESPRESSO_ZKEVM_1_ADAPTOR_QUERY_PORT:$ESPRESSO_ZKEVM_1_ADAPTOR_QUERY_PORT" + zkevm-1-eth-tx-manager: + extends: + file: services.yaml + service: eth-tx-manager environment: - - ESPRESSO_SEQUENCER_URL - - ESPRESSO_ZKEVM_L1_PROVIDER - - ESPRESSO_ZKEVM_ROLLUP_ADDRESS=$ESPRESSO_ZKEVM_1_ROLLUP_ADDRESS - - ESPRESSO_ZKEVM_MATIC_ADDRESS=$ESPRESSO_ZKEVM_1_MATIC_ADDRESS - - ESPRESSO_ZKEVM_ADAPTOR_RPC_PORT=$ESPRESSO_ZKEVM_1_ADAPTOR_RPC_PORT - - ESPRESSO_ZKEVM_ADAPTOR_QUERY_PORT=$ESPRESSO_ZKEVM_1_ADAPTOR_QUERY_PORT - - RUST_LOG - - RUST_LOG_FORMAT + - 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=$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 + - ZKEVM_NODE_EXECUTOR_URI=$ESPRESSO_ZKEVM_1_EXECUTOR_URI + - ZKEVM_NODE_ETHTXMANAGER_POLLINGINTERVAL=$ESPRESSO_ZKEVM_ETH_TX_MANAGER_POLLING_INTERVAL depends_on: - sequencer0: - condition: service_started - healthcheck: - test: "curl http://localhost:$ESPRESSO_ZKEVM_1_ADAPTOR_QUERY_PORT" - interval: 5s - timeout: 3s - retries: 120 + zkevm-1-permissionless-node: + condition: service_healthy profiles: - zkevm1 - - zkevm1-preconfirmations - polygon-zkevm-2-adaptor: - image: ghcr.io/espressosystems/espresso-polygon-zkevm-demo/polygon-zkevm-adaptor:main + zkevm-1-faucet: + extends: + file: services.yaml + service: faucet ports: - - "$ESPRESSO_ZKEVM_2_ADAPTOR_RPC_PORT:$ESPRESSO_ZKEVM_2_ADAPTOR_RPC_PORT" - - "$ESPRESSO_ZKEVM_2_ADAPTOR_QUERY_PORT:$ESPRESSO_ZKEVM_2_ADAPTOR_QUERY_PORT" + - $ESPRESSO_ZKEVM_1_FAUCET_PORT:$ESPRESSO_ZKEVM_1_FAUCET_PORT environment: - - ESPRESSO_SEQUENCER_URL - - ESPRESSO_ZKEVM_L1_PROVIDER - - ESPRESSO_ZKEVM_ROLLUP_ADDRESS=$ESPRESSO_ZKEVM_2_ROLLUP_ADDRESS - - ESPRESSO_ZKEVM_MATIC_ADDRESS=$ESPRESSO_ZKEVM_2_MATIC_ADDRESS - - ESPRESSO_ZKEVM_ADAPTOR_RPC_PORT=$ESPRESSO_ZKEVM_2_ADAPTOR_RPC_PORT - - ESPRESSO_ZKEVM_ADAPTOR_QUERY_PORT=$ESPRESSO_ZKEVM_2_ADAPTOR_QUERY_PORT - - RUST_LOG - - RUST_LOG_FORMAT + - ESPRESSO_DISCORD_FAUCET_PORT=$ESPRESSO_ZKEVM_1_FAUCET_PORT + - ESPRESSO_DISCORD_FAUCET_WEB3_PROVIDER_URL_WS=$ESPRESSO_ZKEVM_1_FAUCET_WEB3_PROVIDER_URL_WS + - ESPRESSO_DISCORD_FAUCET_WEB3_PROVIDER_URL_HTTP=$ESPRESSO_ZKEVM_1_FAUCET_WEB3_PROVIDER_URL_HTTP depends_on: - sequencer0: - condition: service_started - healthcheck: - test: "curl http://localhost:$ESPRESSO_ZKEVM_2_ADAPTOR_QUERY_PORT" - interval: 5s - timeout: 3s - retries: 120 + zkevm-1-permissionless-node: + condition: service_healthy profiles: - - zkevm2 - - zkevm2-preconfirmations + - zkevm1 diff --git a/justfile b/justfile index 74417ac..fed4fac 100644 --- a/justfile +++ b/justfile @@ -1,9 +1,7 @@ # The zkevm-node docker-compose file currently only works if run from the zkevm-node/test directory. -compose-base := "docker compose --project-name demo -f docker-compose.yaml -f permissionless-docker-compose.yaml" -compose-espresso := "docker compose --project-name demo -f docker-compose.yaml" +compose-base := "docker compose --project-name demo -f standalone-docker-compose.yaml" compose-anvil := compose-base + " -f docker-compose-anvil.yaml" compose := compose-base + " -f docker-compose-geth.yaml" -compose-zkevm-node := "docker compose --project-name demo -f permissionless-docker-compose.yaml -f docker-compose-geth.yaml" default: just --list @@ -11,7 +9,7 @@ default: zkevm-node: cargo run --all-features --bin zkevm-node -demo *args: (demo-profiles "zkevm1" "zkevm1-preconfirmations" "zkevm2" "zkevm2-preconfirmations" args) +demo *args: (demo-profiles "zkevm1" "zkevm1-preconfirmations" args) demo-profiles *args: scripts/check-architecture diff --git a/permissionless-docker-compose.yaml b/permissionless-docker-compose.yaml deleted file mode 100644 index 4ef52bc..0000000 --- a/permissionless-docker-compose.yaml +++ /dev/null @@ -1,587 +0,0 @@ -version: "3" -services: - - zkevm-1-aggregator: - image: ghcr.io/espressosystems/zkevm-node:hotshot-integration - expose: - - 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_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 - - ZKEVM_NODE_ETHERMAN_URL=http://zkevm-mock-l1-network:$ESPRESSO_ZKEVM_L1_PORT - - ZKEVM_NODE_ETHERMAN_HOTSHOTQUERYSERVICEURL=$ESPRESSO_ZKEVM_1_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_1_MTCLIENT_URI - - ZKEVM_NODE_EXECUTOR_URI=$ESPRESSO_ZKEVM_1_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" - - "/app/zkevm-node run --genesis /app/genesis.json --cfg /app/config.toml --components aggregator" - depends_on: - zkevm-1-prover: - condition: service_healthy - # Avoid running DB migrations at the same time: - zkevm-1-permissionless-node: - condition: service_healthy - profiles: - - "zkevm1" - - 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 - command: [ "postgres", "-N", "500" ] - healthcheck: - # Postgres can be falsely "ready" once before running init scripts. - # See https://github.com/docker-library/postgres/issues/146 for discusson. - test: "pg_isready -U state_user -d state_db && sleep 1 && pg_isready -U state_user -d state_db" - interval: 5s - timeout: 4s - retries: 20 - profiles: - - "zkevm1" - - zkevm-1-preconfirmations-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 - command: [ "postgres", "-N", "500" ] - healthcheck: - # Postgres can be falsely "ready" once before running init scripts. - # See https://github.com/docker-library/postgres/issues/146 for discusson. - test: "pg_isready -U state_user -d state_db && sleep 1 && pg_isready -U state_user -d state_db" - interval: 5s - timeout: 4s - retries: 20 - profiles: - - "zkevm1-preconfirmations" - - zkevm-1-prover: - image: hermeznetwork/zkevm-prover:88f3835 - expose: - - 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 - depends_on: - zkevm-1-state-db: - condition: service_healthy - stop_signal: SIGKILL - healthcheck: - test: timeout 1 bash -c "cat < /dev/null > /dev/tcp/localhost/50071" - interval: 5s - timeout: 4s - retries: 20 - profiles: - - "zkevm1" - - zkevm-1-preconfirmations-prover: - image: hermeznetwork/zkevm-prover:88f3835 - expose: - - 50052 # Mock prover - - 50061 # MT - - 50071 # Executor - volumes: - # The prover does not support configuration via env vars. The only difference between the - # preconfirmations prover and the regular prover is the state database that they use. - - ./zkevm-node/test/config/test.prover.1.preconf.config.json:/usr/src/app/config.json - command: > - zkProver -c /usr/src/app/config.json - depends_on: - zkevm-1-preconfirmations-state-db: - condition: service_healthy - stop_signal: SIGKILL - healthcheck: - test: timeout 1 bash -c "cat < /dev/null > /dev/tcp/localhost/50071" - interval: 1s - timeout: 2s - retries: 20 - profiles: - - "zkevm1-preconfirmations" - - zkevm-1-permissionless-node: - image: ghcr.io/espressosystems/zkevm-node:hotshot-integration - ports: - - $ESPRESSO_ZKEVM_1_L2_PORT:$ESPRESSO_ZKEVM_1_L2_PORT - - $ESPRESSO_ZKEVM_1_L2_PORT_WS:$ESPRESSO_ZKEVM_1_L2_PORT_WS - 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-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_ETHERMAN_GENESISHOTSHOTBLOCKNUMBER=$ESPRESSO_ZKEVM_1_GENESIS_HOTSHOT_BLOCK_NUMBER - - ZKEVM_NODE_SYNCHRONIZER_GENBLOCKNUMBER=$ESPRESSO_ZKEVM_1_GENESIS_BLOCK_NUMBER - - 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 - 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" - interval: 3s - timeout: 2s - retries: 120 - extra_hosts: - - "host.docker.internal:host-gateway" - profiles: - - "zkevm1" - - zkevm-1-preconfirmations-node: - image: ghcr.io/espressosystems/zkevm-node:hotshot-integration - ports: - - $ESPRESSO_ZKEVM_1_PRECONFIRMATIONS_L2_PORT:$ESPRESSO_ZKEVM_1_PRECONFIRMATIONS_L2_PORT - - $ESPRESSO_ZKEVM_1_PRECONFIRMATIONS_L2_PORT_WS:$ESPRESSO_ZKEVM_1_PRECONFIRMATIONS_L2_PORT_WS - 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-1-preconfirmations-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-preconfirmations-state-db - - ZKEVM_NODE_RPC_PORT=$ESPRESSO_ZKEVM_1_PRECONFIRMATIONS_L2_PORT - - ZKEVM_NODE_RPC_WEBSOCKETS_PORT=$ESPRESSO_ZKEVM_1_PRECONFIRMATIONS_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_ETHERMAN_GENESISHOTSHOTBLOCKNUMBER=$ESPRESSO_ZKEVM_1_GENESIS_HOTSHOT_BLOCK_NUMBER - - ZKEVM_NODE_SYNCHRONIZER_GENBLOCKNUMBER=$ESPRESSO_ZKEVM_1_GENESIS_BLOCK_NUMBER - - ZKEVM_NODE_SYNCHRONIZER_PRECONFIRMATIONSSYNCINTERVAL=$ESPRESSO_ZKEVM_1_PRECONFIRMATIONS_SYNC_INTERVAL - - ZKEVM_NODE_SYNCHRONIZER_IGNOREGENBLOCKNUMBERCHECK=$ESPRESSO_ZKEVM_IGNORE_GEN_BLOCK_NUMBER_CHECK - - ZKEVM_NODE_MTCLIENT_URI=$ESPRESSO_ZKEVM_1_PRECONFIRMATIONS_MTCLIENT_URI - - ZKEVM_NODE_EXECUTOR_URI=$ESPRESSO_ZKEVM_1_PRECONFIRMATIONS_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-1-preconfirmations-state-db: - condition: service_healthy - healthcheck: - # curl not installed in container, but wget is - test: "wget http://localhost:$ESPRESSO_ZKEVM_1_PRECONFIRMATIONS_L2_PORT -q --spider --tries 1 || exit 1" - interval: 3s - timeout: 2s - retries: 120 - extra_hosts: - - "host.docker.internal:host-gateway" - profiles: - - "zkevm1-preconfirmations" - - zkevm-1-eth-tx-manager: - image: ghcr.io/espressosystems/zkevm-node:hotshot-integration - environment: - - 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_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_HOTSHOTQUERYSERVICEURL=$ESPRESSO_ZKEVM_1_ADAPTOR_QUERY_URL - - ZKEVM_NODE_ETHERMAN_HOTSHOTADDR=$ESPRESSO_SEQUENCER_HOTSHOT_ADDRESS - - ZKEVM_NODE_MTCLIENT_URI=$ESPRESSO_ZKEVM_1_MTCLIENT_URI - - ZKEVM_NODE_EXECUTOR_URI=$ESPRESSO_ZKEVM_1_EXECUTOR_URI - - ZKEVM_NODE_ETHTXMANAGER_POLLINGINTERVAL=$ESPRESSO_ZKEVM_ETH_TX_MANAGER_POLLING_INTERVAL - 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" - - "/app/zkevm-node run --genesis /app/genesis.json --cfg /app/config.toml --components eth-tx-manager" - depends_on: - zkevm-1-permissionless-node: - condition: service_healthy - profiles: - - "zkevm1" - - zkevm-1-faucet: - image: ghcr.io/espressosystems/discord-faucet:main - ports: - - $ESPRESSO_ZKEVM_1_FAUCET_PORT:$ESPRESSO_ZKEVM_1_FAUCET_PORT - environment: - - ESPRESSO_DISCORD_FAUCET_DISCORD_TOKEN - - ESPRESSO_DISCORD_FAUCET_GRANT_AMOUNT_ETHERS - - ESPRESSO_DISCORD_FAUCET_MNEMONIC - - ESPRESSO_DISCORD_FAUCET_NUM_CLIENTS - - ESPRESSO_DISCORD_FAUCET_PORT=$ESPRESSO_ZKEVM_1_FAUCET_PORT - - ESPRESSO_DISCORD_FAUCET_TRANSACTION_TIMEOUT_SECS - - ESPRESSO_DISCORD_FAUCET_WEB3_PROVIDER_URL_WS=$ESPRESSO_ZKEVM_1_FAUCET_WEB3_PROVIDER_URL_WS - - ESPRESSO_DISCORD_FAUCET_WEB3_PROVIDER_URL_HTTP=$ESPRESSO_ZKEVM_1_FAUCET_WEB3_PROVIDER_URL_HTTP - - RUST_LOG - - RUST_LOG_FORMAT - - RUST_BACKTRACE=1 - depends_on: - zkevm-1-permissionless-node: - condition: service_healthy - profiles: - - "zkevm1" - stop_grace_period: 1s - - # Polygon zkevm-node 2 - zkevm-2-aggregator: - image: ghcr.io/espressosystems/zkevm-node:hotshot-integration - expose: - - 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_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_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" - - "/app/zkevm-node run --genesis /app/genesis.json --cfg /app/config.toml --components aggregator" - depends_on: - zkevm-2-prover: - condition: service_healthy - # Avoid running DB migrations at the same time: - zkevm-2-permissionless-node: - condition: service_healthy - profiles: - - "zkevm2" - - 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 - command: [ "postgres", "-N", "500" ] - healthcheck: - # Postgres can be falsely "ready" once before running init scripts. - # See https://github.com/docker-library/postgres/issues/146 for discusson. - test: "pg_isready -U state_user -d state_db && sleep 1 && pg_isready -U state_user -d state_db" - interval: 5s - timeout: 4s - retries: 20 - profiles: - - "zkevm2" - - zkevm-2-preconfirmations-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 - command: [ "postgres", "-N", "500" ] - healthcheck: - # Postgres can be falsely "ready" once before running init scripts. - # See https://github.com/docker-library/postgres/issues/146 for discusson. - test: "pg_isready -U state_user -d state_db && sleep 1 && pg_isready -U state_user -d state_db" - interval: 5s - timeout: 4s - retries: 20 - profiles: - - "zkevm2-preconfirmations" - - zkevm-2-prover: - image: hermeznetwork/zkevm-prover:88f3835 - expose: - - 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 - depends_on: - zkevm-2-state-db: - condition: service_healthy - stop_signal: SIGKILL - healthcheck: - test: timeout 1 bash -c "cat < /dev/null > /dev/tcp/localhost/50071" - interval: 5s - timeout: 4s - retries: 20 - profiles: - - "zkevm2" - - zkevm-2-preconfirmations-prover: - image: hermeznetwork/zkevm-prover:88f3835 - expose: - - 50052 # Mock prover - - 50061 # MT - - 50071 # Executor - volumes: - # The prover does not support configuration via env vars. The only difference between the - # preconfirmations prover and the regular prover is the state database that they use. - - ./zkevm-node/test/config/test.prover.2.preconf.config.json:/usr/src/app/config.json - command: > - zkProver -c /usr/src/app/config.json - depends_on: - zkevm-2-preconfirmations-state-db: - condition: service_healthy - stop_signal: SIGKILL - healthcheck: - test: timeout 1 bash -c "cat < /dev/null > /dev/tcp/localhost/50071" - interval: 1s - timeout: 2s - retries: 20 - profiles: - - "zkevm2-preconfirmations" - - zkevm-2-permissionless-node: - image: ghcr.io/espressosystems/zkevm-node:hotshot-integration - ports: - - $ESPRESSO_ZKEVM_2_L2_PORT:$ESPRESSO_ZKEVM_2_L2_PORT - - $ESPRESSO_ZKEVM_2_L2_PORT_WS:$ESPRESSO_ZKEVM_2_L2_PORT_WS - 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 - - ZKEVM_NODE_ETHERMAN_MATICADDR=$ESPRESSO_ZKEVM_2_MATIC_ADDRESS - - ZKEVM_NODE_ETHERMAN_GLOBALEXITROOTMANAGERADDR=$ESPRESSO_ZKEVM_2_GER_ADDRESS - - ZKEVM_NODE_ETHERMAN_HOTSHOTQUERYSERVICEURL=$ESPRESSO_ZKEVM_2_ADAPTOR_QUERY_URL - - ZKEVM_NODE_ETHERMAN_HOTSHOTADDR=$ESPRESSO_SEQUENCER_HOTSHOT_ADDRESS - - ZKEVM_NODE_ETHERMAN_GENESISHOTSHOTBLOCKNUMBER=$ESPRESSO_ZKEVM_2_GENESIS_HOTSHOT_BLOCK_NUMBER - - ZKEVM_NODE_SYNCHRONIZER_GENBLOCKNUMBER=$ESPRESSO_ZKEVM_2_GENESIS_BLOCK_NUMBER - - 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" - interval: 3s - timeout: 2s - retries: 120 - extra_hosts: - - "host.docker.internal:host-gateway" - profiles: - - "zkevm2" - - zkevm-2-preconfirmations-node: - image: ghcr.io/espressosystems/zkevm-node:hotshot-integration - ports: - - $ESPRESSO_ZKEVM_2_PRECONFIRMATIONS_L2_PORT:$ESPRESSO_ZKEVM_2_PRECONFIRMATIONS_L2_PORT - - $ESPRESSO_ZKEVM_2_PRECONFIRMATIONS_L2_PORT_WS:$ESPRESSO_ZKEVM_2_PRECONFIRMATIONS_L2_PORT_WS - 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-preconfirmations-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-preconfirmations-state-db - - ZKEVM_NODE_RPC_PORT=$ESPRESSO_ZKEVM_2_PRECONFIRMATIONS_L2_PORT - - ZKEVM_NODE_RPC_WEBSOCKETS_PORT=$ESPRESSO_ZKEVM_2_PRECONFIRMATIONS_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 - - ZKEVM_NODE_ETHERMAN_MATICADDR=$ESPRESSO_ZKEVM_2_MATIC_ADDRESS - - ZKEVM_NODE_ETHERMAN_GLOBALEXITROOTMANAGERADDR=$ESPRESSO_ZKEVM_2_GER_ADDRESS - - ZKEVM_NODE_ETHERMAN_HOTSHOTQUERYSERVICEURL=$ESPRESSO_ZKEVM_2_ADAPTOR_QUERY_URL - - ZKEVM_NODE_ETHERMAN_HOTSHOTADDR=$ESPRESSO_SEQUENCER_HOTSHOT_ADDRESS - - ZKEVM_NODE_ETHERMAN_GENESISHOTSHOTBLOCKNUMBER=$ESPRESSO_ZKEVM_2_GENESIS_HOTSHOT_BLOCK_NUMBER - - ZKEVM_NODE_SYNCHRONIZER_GENBLOCKNUMBER=$ESPRESSO_ZKEVM_2_GENESIS_BLOCK_NUMBER - - ZKEVM_NODE_SYNCHRONIZER_PRECONFIRMATIONSSYNCINTERVAL=$ESPRESSO_ZKEVM_2_PRECONFIRMATIONS_SYNC_INTERVAL - - ZKEVM_NODE_SYNCHRONIZER_IGNOREGENBLOCKNUMBERCHECK=$ESPRESSO_ZKEVM_IGNORE_GEN_BLOCK_NUMBER_CHECK - - ZKEVM_NODE_MTCLIENT_URI=$ESPRESSO_ZKEVM_2_PRECONFIRMATIONS_MTCLIENT_URI - - ZKEVM_NODE_EXECUTOR_URI=$ESPRESSO_ZKEVM_2_PRECONFIRMATIONS_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-preconfirmations-state-db: - condition: service_healthy - healthcheck: - # curl not installed in container, but wget is - test: "wget http://localhost:$ESPRESSO_ZKEVM_2_PRECONFIRMATIONS_L2_PORT -q --spider --tries 1 || exit 1" - interval: 3s - timeout: 2s - retries: 120 - extra_hosts: - - "host.docker.internal:host-gateway" - profiles: - - "zkevm2-preconfirmations" - - zkevm-2-eth-tx-manager: - image: ghcr.io/espressosystems/zkevm-node:hotshot-integration - 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_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_HOTSHOTQUERYSERVICEURL=$ESPRESSO_ZKEVM_2_ADAPTOR_QUERY_URL - - ZKEVM_NODE_ETHERMAN_HOTSHOTADDR=$ESPRESSO_SEQUENCER_HOTSHOT_ADDRESS - - ZKEVM_NODE_MTCLIENT_URI=$ESPRESSO_ZKEVM_2_MTCLIENT_URI - - ZKEVM_NODE_EXECUTOR_URI=$ESPRESSO_ZKEVM_2_EXECUTOR_URI - - ZKEVM_NODE_ETHTXMANAGER_POLLINGINTERVAL=$ESPRESSO_ZKEVM_ETH_TX_MANAGER_POLLING_INTERVAL - 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" - - "/app/zkevm-node run --genesis /app/genesis.json --cfg /app/config.toml --components eth-tx-manager" - depends_on: - zkevm-2-permissionless-node: - condition: service_healthy - profiles: - - "zkevm2" - - zkevm-2-faucet: - image: ghcr.io/espressosystems/discord-faucet:main - ports: - - $ESPRESSO_ZKEVM_2_FAUCET_PORT:$ESPRESSO_ZKEVM_2_FAUCET_PORT - environment: - - ESPRESSO_DISCORD_FAUCET_DISCORD_TOKEN - - ESPRESSO_DISCORD_FAUCET_GRANT_AMOUNT_ETHERS - - ESPRESSO_DISCORD_FAUCET_MNEMONIC - - ESPRESSO_DISCORD_FAUCET_NUM_CLIENTS - - ESPRESSO_DISCORD_FAUCET_PORT=$ESPRESSO_ZKEVM_2_FAUCET_PORT - - ESPRESSO_DISCORD_FAUCET_TRANSACTION_TIMEOUT_SECS - - ESPRESSO_DISCORD_FAUCET_WEB3_PROVIDER_URL_WS=$ESPRESSO_ZKEVM_2_FAUCET_WEB3_PROVIDER_URL_WS - - ESPRESSO_DISCORD_FAUCET_WEB3_PROVIDER_URL_HTTP=$ESPRESSO_ZKEVM_2_FAUCET_WEB3_PROVIDER_URL_HTTP - - RUST_LOG - - RUST_LOG_FORMAT - depends_on: - zkevm-2-permissionless-node: - condition: service_healthy - profiles: - - "zkevm2" - stop_grace_period: 1s diff --git a/polygon-zkevm-adaptor/src/demo_with_sequencer.rs b/polygon-zkevm-adaptor/src/demo_with_sequencer.rs index e612222..298ad4c 100644 --- a/polygon-zkevm-adaptor/src/demo_with_sequencer.rs +++ b/polygon-zkevm-adaptor/src/demo_with_sequencer.rs @@ -11,7 +11,7 @@ use sequencer_utils::wait_for_rpc; use std::{path::Path, process::Command, time::Duration}; use zkevm_contract_bindings::TestPolygonContracts; -const L1_SERVICES: [&str; 1] = ["zkevm-mock-l1-network"]; +const L1_SERVICES: [&str; 1] = ["demo-l1-network"]; const L2_SERVICES: [&str; 18] = [ "zkevm-1-prover", @@ -101,7 +101,7 @@ impl SequencerZkEvmDemo { .arg("--project-name") .arg(project_name) .arg("-f") - .arg("permissionless-docker-compose.yaml") + .arg("standalone-docker-compose.yaml") .arg("-f") .arg(layer1_backend.compose_file()) .args(["-f", "docker-compose.yaml"]); diff --git a/polygon-zkevm-adaptor/src/polygon_zkevm.rs b/polygon-zkevm-adaptor/src/polygon_zkevm.rs index 9bc5886..e5daf59 100644 --- a/polygon-zkevm-adaptor/src/polygon_zkevm.rs +++ b/polygon-zkevm-adaptor/src/polygon_zkevm.rs @@ -21,7 +21,7 @@ use std::{ use surf_disco::Url; use zkevm_contract_bindings::TestPolygonContracts; -const L1_SERVICES: [&str; 1] = ["zkevm-mock-l1-network"]; +const L1_SERVICES: [&str; 1] = ["demo-l1-network"]; const L2_SERVICES: [&str; 8] = [ "zkevm-1-prover", @@ -328,7 +328,7 @@ impl ZkEvmNode { .arg("--project-name") .arg(project_name) .arg("-f") - .arg("permissionless-docker-compose.yaml") + .arg("standalone-docker-compose.yaml") .arg("-f") .arg(layer1_backend.compose_file()); cmd diff --git a/scripts/demo-test-end-to-end b/scripts/demo-test-end-to-end index af741ca..67e08da 100755 --- a/scripts/demo-test-end-to-end +++ b/scripts/demo-test-end-to-end @@ -6,36 +6,25 @@ # It requires curl, jq, just and docker to be installed. set -euo pipefail -trap "exit" INT TERM -trap cleanup EXIT -cleanup(){ - echo "Stopping child processes" - just down -} - # Load env vars set -a; source .env; set +a; -echo "Starting demo..." -just demo --force-recreate -d - export ADDR=0x1234567890123456789012345678901234567890 -export RPC_1=http://localhost:$ESPRESSO_ZKEVM_1_L2_PORT -export RPC_2=http://localhost:$ESPRESSO_ZKEVM_2_L2_PORT +export RPC_1=http://localhost:$ESPRESSO_ZKEVM_1_PRECONFIRMATIONS_L2_PORT +export RPC_2=http://localhost:$ESPRESSO_ZKEVM_1_L2_PORT echo "Requesting funds from faucet" curl -s -X POST http://localhost:$ESPRESSO_ZKEVM_1_FAUCET_PORT/faucet/request/$ADDR > /dev/null -curl -s -X POST http://localhost:$ESPRESSO_ZKEVM_2_FAUCET_PORT/faucet/request/$ADDR > /dev/null echo "Waiting for balance to be updated..." function check_balance() { for RPC in $RPC_1 $RPC_2; do - echo "Checking balance for $RPC" while true; do balance=$(curl -s -X POST -H "Content-Type: application/json" --data "{\"jsonrpc\": \"2.0\", \"method\": \"eth_getBalance\", \"params\": [\"$ADDR\", \"latest\"], \"id\": 1}" $RPC | jq -r '.result') + echo "$(date) checking balance on $RPC" if [ "$balance" != "0x0" ]; then - echo "Balance updated for $RPC: $balance" + echo "Balance updated on $RPC: $balance" break fi sleep 1 @@ -43,6 +32,6 @@ function check_balance() { done } export -f check_balance -timeout 30 bash -c check_balance +timeout 60 bash -c check_balance echo "Success!" diff --git a/scripts/demo-with-profiles b/scripts/demo-with-profiles index 06ae82d..5d4c171 100755 --- a/scripts/demo-with-profiles +++ b/scripts/demo-with-profiles @@ -30,7 +30,7 @@ while [[ $# != 0 ]]; do esac done -COMPOSE_BASE="docker compose --project-name demo -f docker-compose.yaml -f permissionless-docker-compose.yaml" +COMPOSE_BASE="docker compose --project-name demo -f standalone-docker-compose.yaml" COMPOSE="$COMPOSE_BASE -f docker-compose-geth.yaml" $COMPOSE $PROFILES up "$@" --wait diff --git a/scripts/deploy-zkevm-on-sequencer b/scripts/deploy-zkevm-on-sequencer new file mode 100644 index 0000000..aaa37c0 --- /dev/null +++ b/scripts/deploy-zkevm-on-sequencer @@ -0,0 +1,13 @@ +#!/usr/bin/env bash +# This script is WIP +# +# 1. run: docker compose up --force-recreate --renew-anon-volumes +# in the espresso-sequencer repo. +# 2. Run this script. +# 3. run scripts/demo-test-end-to-end to test if it works. +set -euo pipefail + +cargo run --bin deploy -- --hotshot-address 0x5fbdb2315678afecb367f032d93f642f64180aa3 \ + --deploy --polling-interval 1000 --account-index 10 + +docker compose --profile zkevm1 zkevm1-preconfirmations --env-file .env --env-file deployment.env up --force-recreate --renew-anon-volumes diff --git a/services.yaml b/services.yaml new file mode 100644 index 0000000..ed0c800 --- /dev/null +++ b/services.yaml @@ -0,0 +1,141 @@ +version: "3" +services: + aggregator: + image: ghcr.io/espressosystems/zkevm-node:hotshot-integration + expose: + - 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_STATEDB_HOST=zkevm-1-state-db + 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" + - "/app/zkevm-node run --genesis /app/genesis.json --cfg /app/config.toml --components aggregator" + + state-db: + image: postgres:16 + 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 + command: [ "postgres", "-N", "500" ] + healthcheck: + # Postgres can be falsely "ready" once before running init scripts. + # See https://github.com/docker-library/postgres/issues/146 for discusson. + test: "pg_isready -U state_user -d state_db && sleep 1 && pg_isready -U state_user -d state_db" + interval: 5s + timeout: 4s + retries: 20 + + prover: + image: hermeznetwork/zkevm-prover:88f3835 + expose: + - 50052 # Mock prover + - 50061 # MT + - 50071 # Executor + command: > + zkProver -c /usr/src/app/config.json + stop_signal: SIGKILL + healthcheck: + test: timeout 1 bash -c "cat < /dev/null > /dev/tcp/localhost/50071" + interval: 5s + timeout: 4s + retries: 20 + + permissionless-node: + image: ghcr.io/espressosystems/zkevm-node:hotshot-integration + 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_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 + 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\"" + healthcheck: + # curl not installed in container, but wget is + test: "wget http://localhost:$$ZKEVM_NODE_RPC_PORT -q --spider --tries 1 || exit 1" + interval: 3s + timeout: 2s + retries: 120 + extra_hosts: + - "host.docker.internal:host-gateway" + + eth-tx-manager: + image: ghcr.io/espressosystems/zkevm-node:hotshot-integration + environment: + - ZKEVM_NODE_STATEDB_USER=state_user + - ZKEVM_NODE_STATEDB_PASSWORD=state_password + - ZKEVM_NODE_STATEDB_NAME=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=$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 + - ZKEVM_NODE_EXECUTOR_URI=$ESPRESSO_ZKEVM_1_EXECUTOR_URI + - ZKEVM_NODE_ETHTXMANAGER_POLLINGINTERVAL=$ESPRESSO_ZKEVM_ETH_TX_MANAGER_POLLING_INTERVAL + 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" + - "/app/zkevm-node run --genesis /app/genesis.json --cfg /app/config.toml --components eth-tx-manager" + + faucet: + image: ghcr.io/espressosystems/discord-faucet:main + environment: + - ESPRESSO_DISCORD_FAUCET_DISCORD_TOKEN + - ESPRESSO_DISCORD_FAUCET_GRANT_AMOUNT_ETHERS + - ESPRESSO_DISCORD_FAUCET_MNEMONIC + - ESPRESSO_DISCORD_FAUCET_NUM_CLIENTS + - ESPRESSO_DISCORD_FAUCET_PORT + - ESPRESSO_DISCORD_FAUCET_TRANSACTION_TIMEOUT_SECS + - RUST_LOG + - RUST_LOG_FORMAT + - RUST_BACKTRACE=1 + healthcheck: + test: curl --fail http://localhost:$$ESPRESSO_DISCORD_FAUCET_PORT/healthcheck || exit 1 + interval: 2s + retries: 10 + timeout: 1s + stop_grace_period: 1s + + adaptor: + image: ghcr.io/espressosystems/espresso-polygon-zkevm-demo/polygon-zkevm-adaptor:main + environment: + - ESPRESSO_SEQUENCER_URL + - ESPRESSO_ZKEVM_L1_PROVIDER + - RUST_LOG + - RUST_LOG_FORMAT + healthcheck: + test: curl http://localhost:$$ESPRESSO_ZKEVM_ADAPTOR_QUERY_PORT + interval: 5s + timeout: 3s + retries: 120 + stop_grace_period: 1s diff --git a/standalone-docker-compose.yaml b/standalone-docker-compose.yaml new file mode 100644 index 0000000..5adfd63 --- /dev/null +++ b/standalone-docker-compose.yaml @@ -0,0 +1,126 @@ +version: "3" +include: + - docker-compose.yaml + +services: + orchestrator: + image: ghcr.io/espressosystems/espresso-sequencer/orchestrator:main + ports: + - "$ESPRESSO_ORCHESTRATOR_PORT:$ESPRESSO_ORCHESTRATOR_PORT" + environment: + - ESPRESSO_ORCHESTRATOR_PORT + - ESPRESSO_ORCHESTRATOR_NUM_NODES=5 + - ESPRESSO_ORCHESTRATOR_START_DELAY=5s + - ESPRESSO_ORCHESTRATOR_MIN_PROPOSE_TIME + - ESPRESSO_ORCHESTRATOR_MAX_PROPOSE_TIME + - ESPRESSO_ORCHESTRATOR_NEXT_VIEW_TIMEOUT + - RUST_LOG + - RUST_LOG_FORMAT + da-server: + image: ghcr.io/espressosystems/espresso-sequencer/web-server:main + ports: + - "$ESPRESSO_DA_SERVER_PORT:$ESPRESSO_WEB_SERVER_PORT" + environment: + - ESPRESSO_WEB_SERVER_PORT + - RUST_LOG + depends_on: + orchestrator: + condition: service_healthy + consensus-server: + image: ghcr.io/espressosystems/espresso-sequencer/web-server:main + ports: + - "$ESPRESSO_CONSENSUS_SERVER_PORT:$ESPRESSO_WEB_SERVER_PORT" + environment: + - ESPRESSO_WEB_SERVER_PORT + - RUST_LOG + depends_on: + orchestrator: + condition: service_healthy + + sequencer0: + image: ghcr.io/espressosystems/espresso-sequencer/sequencer:main + # Run consensus *plus* the sequencer API server. + command: /bin/sequencer -- http -- query -- submit + ports: + - "$ESPRESSO_SEQUENCER_API_PORT:$ESPRESSO_SEQUENCER_API_PORT" + environment: + - ESPRESSO_SEQUENCER_ORCHESTRATOR_URL + - ESPRESSO_SEQUENCER_DA_SERVER_URL + - ESPRESSO_SEQUENCER_CONSENSUS_SERVER_URL + - ESPRESSO_SEQUENCER_API_PORT + - ESPRESSO_SEQUENCER_STORAGE_PATH + - ESPRESSO_SEQUENCER_L1_PROVIDER + - RUST_LOG + - RUST_LOG_FORMAT + depends_on: + orchestrator: + condition: service_healthy + demo-l1-network: + condition: service_healthy + sequencer1: + image: ghcr.io/espressosystems/espresso-sequencer/sequencer:main + # Run consensus *plus* the commitment task to post commitments to the + # hotshot contract. + command: /bin/sequencer -- http -- commitment-task + environment: + - ESPRESSO_SEQUENCER_ORCHESTRATOR_URL + - ESPRESSO_SEQUENCER_DA_SERVER_URL + - ESPRESSO_SEQUENCER_CONSENSUS_SERVER_URL + - ESPRESSO_SEQUENCER_API_PORT + - ESPRESSO_SEQUENCER_ETH_MNEMONIC + - ESPRESSO_SEQUENCER_ETH_ACCOUNT_INDEX + - ESPRESSO_SEQUENCER_HOTSHOT_ADDRESS + - ESPRESSO_SEQUENCER_L1_PROVIDER + - ESPRESSO_SEQUENCER_QUERY_SERVICE_URL + - RUST_LOG + - RUST_LOG_FORMAT + depends_on: + orchestrator: + condition: service_healthy + sequencer0: + condition: service_started + sequencer2: + image: ghcr.io/espressosystems/espresso-sequencer/sequencer:main + environment: + - ESPRESSO_SEQUENCER_ORCHESTRATOR_URL + - ESPRESSO_SEQUENCER_DA_SERVER_URL + - ESPRESSO_SEQUENCER_CONSENSUS_SERVER_URL + - ESPRESSO_SEQUENCER_API_PORT + - ESPRESSO_SEQUENCER_L1_PROVIDER + - RUST_LOG + - RUST_LOG_FORMAT + depends_on: + orchestrator: + condition: service_healthy + sequencer0: + condition: service_started + sequencer3: + image: ghcr.io/espressosystems/espresso-sequencer/sequencer:main + environment: + - ESPRESSO_SEQUENCER_ORCHESTRATOR_URL + - ESPRESSO_SEQUENCER_DA_SERVER_URL + - ESPRESSO_SEQUENCER_CONSENSUS_SERVER_URL + - ESPRESSO_SEQUENCER_API_PORT + - ESPRESSO_SEQUENCER_L1_PROVIDER + - RUST_LOG + - RUST_LOG_FORMAT + depends_on: + orchestrator: + condition: service_healthy + sequencer0: + condition: service_started + sequencer4: + image: ghcr.io/espressosystems/espresso-sequencer/sequencer:main + environment: + - ESPRESSO_SEQUENCER_ORCHESTRATOR_URL + - ESPRESSO_SEQUENCER_DA_SERVER_URL + - ESPRESSO_SEQUENCER_CONSENSUS_SERVER_URL + - ESPRESSO_SEQUENCER_API_PORT + - ESPRESSO_SEQUENCER_L1_PROVIDER + - RUST_LOG + - RUST_LOG_FORMAT + depends_on: + orchestrator: + condition: service_healthy + sequencer0: + condition: service_started