From 2e25d8b73a7f78dc3ccedcb7162e0f852954d35a Mon Sep 17 00:00:00 2001 From: sveitser Date: Fri, 15 Sep 2023 17:16:39 +0200 Subject: [PATCH 01/12] WIP: deploy polygon zkevm to existing sequencer It works for zkevm1 (at least if nothing else is running on the sequencer). --- scripts/demo-test-end-to-end | 21 +- scripts/deploy-zkevm-on-sequencer | 12 + zkevm-contract-bindings/src/bin/deploy.rs | 26 +- zkevm-on-espresso-compose.yaml | 588 ++++++++++++++++++++++ zkevm-on-espresso.env | 98 ++++ 5 files changed, 731 insertions(+), 14 deletions(-) create mode 100644 scripts/deploy-zkevm-on-sequencer create mode 100644 zkevm-on-espresso-compose.yaml create mode 100644 zkevm-on-espresso.env diff --git a/scripts/demo-test-end-to-end b/scripts/demo-test-end-to-end index af741ca..2992e4a 100755 --- a/scripts/demo-test-end-to-end +++ b/scripts/demo-test-end-to-end @@ -6,18 +6,18 @@ # 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 -} +# 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 +# echo "Starting demo..." +# just demo --force-recreate -d export ADDR=0x1234567890123456789012345678901234567890 export RPC_1=http://localhost:$ESPRESSO_ZKEVM_1_L2_PORT @@ -25,12 +25,13 @@ export RPC_2=http://localhost:$ESPRESSO_ZKEVM_2_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 +# 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 + # for RPC in $RPC_1 $RPC_2; do + for RPC in $RPC_1; 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') diff --git a/scripts/deploy-zkevm-on-sequencer b/scripts/deploy-zkevm-on-sequencer new file mode 100644 index 0000000..5bae3db --- /dev/null +++ b/scripts/deploy-zkevm-on-sequencer @@ -0,0 +1,12 @@ +#!/usr/bin/env bash +# This script is WIP +# +# 1. run: docker compose up --force-recreate +# 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 +docker compose --profile zkevm1 -f zkevm-on-espresso-compose.yaml \ + --env-file zkevm-on-espresso.env --env-file deployment.env up --force-recreate diff --git a/zkevm-contract-bindings/src/bin/deploy.rs b/zkevm-contract-bindings/src/bin/deploy.rs index 3689da6..871894a 100644 --- a/zkevm-contract-bindings/src/bin/deploy.rs +++ b/zkevm-contract-bindings/src/bin/deploy.rs @@ -43,6 +43,14 @@ pub struct Options { )] pub mnemonic: String, + /// The account index of the deployer wallet. + #[arg( + long, + env = "ESPRESSO_ZKEVM_DEPLOY_ACCOUNT_INDEX", + default_value = "12" + )] + pub account_index: u32, + /// The URL of an Ethereum JsonRPC where the contracts will be deployed. #[arg( long, @@ -51,6 +59,10 @@ pub struct Options { )] pub provider_url: Url, + /// The address of the hotshot contract, if already deployed. + #[arg(long, env = "ESPRESSO_SEQUENCER_HOTSHOT_ADDRESS")] + pub hotshot_address: Option
, + /// Wallet address of the trusted aggregator for the first zkevm. /// /// This needs to the address of the wallet that the zkevm aggregator @@ -282,15 +294,21 @@ async fn deploy_zkevm( async fn deploy(opts: Options) -> Result<()> { let mut provider = Provider::try_from(opts.provider_url.to_string())?; provider.set_interval(Duration::from_millis(100)); - let deployer = connect_rpc(&opts.provider_url, &opts.mnemonic, 0, None) + let deployer = connect_rpc(&opts.provider_url, &opts.mnemonic, opts.account_index, None) .await .unwrap(); tracing::info!("Using deployer account {:?}", deployer.inner().address()); // Deploy the hotshot contract. - let hotshot = HotShot::deploy(deployer.clone(), ())?.send().await?; - let hotshot_address = hotshot.address(); - tracing::info!("Deployed HotShot at {:?}", hotshot.address()); + let hotshot_address = if opts.hotshot_address.is_none() { + tracing::info!("Deploying HotShot contract"); + let hotshot = HotShot::deploy(deployer.clone(), ())?.send().await?; + tracing::info!("Deployed HotShot at {:?}", hotshot.address()); + hotshot.address() + } else { + tracing::info!("Using existing HotShot contract"); + opts.hotshot_address.unwrap() + }; // Deploy the contracts for the first zkevm-node. let zkevm_1_input = ZkEvmDeploymentInput { diff --git a/zkevm-on-espresso-compose.yaml b/zkevm-on-espresso-compose.yaml new file mode 100644 index 0000000..c529725 --- /dev/null +++ b/zkevm-on-espresso-compose.yaml @@ -0,0 +1,588 @@ +version: "3" + +networks: + default: + name: espresso-sequencer + +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=$L1_PROVIDER + - 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=$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_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-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=$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_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-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=$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" + depends_on: + zkevm-1-permissionless-node: + condition: service_healthy + profiles: + - "zkevm1" + + zkevm-1-faucet: + image: ghcr.io/espressosystems/espresso-polygon-zkevm-demo/faucet:main + ports: + - $ESPRESSO_ZKEVM_1_FAUCET_PORT:$ESPRESSO_ZKEVM_1_FAUCET_PORT + environment: + - ESPRESSO_ZKEVM_FAUCET_DISCORD_TOKEN + - ESPRESSO_ZKEVM_FAUCET_GRANT_AMOUNT_ETHERS + - ESPRESSO_ZKEVM_FAUCET_MNEMONIC + - ESPRESSO_ZKEVM_FAUCET_NUM_CLIENTS + - ESPRESSO_ZKEVM_FAUCET_PORT=$ESPRESSO_ZKEVM_1_FAUCET_PORT + - ESPRESSO_ZKEVM_FAUCET_TRANSACTION_TIMEOUT_SECS + - ESPRESSO_ZKEVM_FAUCET_WEB3_PROVIDER_URL_WS=$ESPRESSO_ZKEVM_1_FAUCET_WEB3_PROVIDER_URL_WS + - ESPRESSO_ZKEVM_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 + healthcheck: + test: curl --fail http://localhost:$ESPRESSO_ZKEVM_1_FAUCET_PORT/healthcheck || exit 1 + interval: 2s + retries: 10 + timeout: 1s + profiles: + - "zkevm1" + + # 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=$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" + - "/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=$L1_PROVIDER + - 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_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-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=$L1_PROVIDER + - 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_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-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=$L1_PROVIDER + - 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/espresso-polygon-zkevm-demo/faucet:main + ports: + - $ESPRESSO_ZKEVM_2_FAUCET_PORT:$ESPRESSO_ZKEVM_2_FAUCET_PORT + environment: + - ESPRESSO_ZKEVM_FAUCET_DISCORD_TOKEN + - ESPRESSO_ZKEVM_FAUCET_GRANT_AMOUNT_ETHERS + - ESPRESSO_ZKEVM_FAUCET_MNEMONIC + - ESPRESSO_ZKEVM_FAUCET_NUM_CLIENTS + - ESPRESSO_ZKEVM_FAUCET_PORT=$ESPRESSO_ZKEVM_2_FAUCET_PORT + - ESPRESSO_ZKEVM_FAUCET_TRANSACTION_TIMEOUT_SECS + - ESPRESSO_ZKEVM_FAUCET_WEB3_PROVIDER_URL_WS=$ESPRESSO_ZKEVM_2_FAUCET_WEB3_PROVIDER_URL_WS + - ESPRESSO_ZKEVM_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 + healthcheck: + test: curl --fail http://localhost:$ESPRESSO_ZKEVM_2_FAUCET_PORT/healthcheck || exit 1 + interval: 2s + retries: 10 + timeout: 1s + profiles: + - "zkevm2" diff --git a/zkevm-on-espresso.env b/zkevm-on-espresso.env new file mode 100644 index 0000000..a635a55 --- /dev/null +++ b/zkevm-on-espresso.env @@ -0,0 +1,98 @@ +# Environment for local demo network. +# This file is meant to work with docker-compose.yaml + +RUST_LOG=info,libp2p=off +RUST_LOG_FORMAT=full + +L1_PROVIDER=http://demo-l1-network:8545 + +# Internal port inside container +ESPRESSO_WEB_SERVER_PORT=40000 +ESPRESSO_ORCHESTRATOR_PORT=40001 +# Set a short time for proposing empty blocks if the mempool is empty. Since the local demo will +# usually be run with very low volume, we require empty blocks to push previous blocks through the +# consensus pipeline, so this is needed to feel the effects of HotShot's fast finality. +ESPRESSO_ORCHESTRATOR_MAX_PROPOSE_TIME=1s +ESPRESSO_ORCHESTRATOR_MIN_PROPOSE_TIME=500ms +ESPRESSO_ORCHESTRATOR_NEXT_VIEW_TIMEOUT=30s +ESPRESSO_CONSENSUS_SERVER_PORT=40002 +ESPRESSO_DA_SERVER_PORT=40003 +ESPRESSO_SEQUENCER_DA_SERVER_URL=http://da-server:$ESPRESSO_WEB_SERVER_PORT +ESPRESSO_SEQUENCER_CONSENSUS_SERVER_URL=http://consensus-server:$ESPRESSO_WEB_SERVER_PORT +ESPRESSO_SEQUENCER_ORCHESTRATOR_URL=http://orchestrator:$ESPRESSO_ORCHESTRATOR_PORT +ESPRESSO_SEQUENCER_API_PORT=50000 +ESPRESSO_SEQUENCER1_API_PORT=50001 +ESPRESSO_SEQUENCER2_API_PORT=50002 +ESPRESSO_SEQUENCER3_API_PORT=50003 +ESPRESSO_SEQUENCER4_API_PORT=50004 +ESPRESSO_SEQUENCER_URL=http://sequencer0:$ESPRESSO_SEQUENCER_API_PORT +ESPRESSO_SEQUENCER_STORAGE_PATH=/store/sequencer + +ESPRESSO_ZKEVM_L1_PROVIDER=$L1_PROVIDER +ESPRESSO_ZKEVM_L1_BLOCK_PERIOD=1 + +# Hotshot commitment task +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=$L1_PROVIDER +ESPRESSO_SEQUENCER_QUERY_SERVICE_URL=http://sequencer0:$ESPRESSO_SEQUENCER_API_PORT + +# Config shared between both zkevm-nodes +ESPRESSO_ZKEVM_FAUCET_DISCORD_TOKEN="" +ESPRESSO_ZKEVM_FAUCET_GRANT_AMOUNT_ETHERS=1000 +ESPRESSO_ZKEVM_FAUCET_MNEMONIC="test test test test test test test test test test test junk" +ESPRESSO_ZKEVM_FAUCET_NUM_CLIENTS=1 +ESPRESSO_ZKEVM_FAUCET_TRANSACTION_TIMEOUT_SECS=300 +ESPRESSO_ZKEVM_IGNORE_GEN_BLOCK_NUMBER_CHECK=1 +ESPRESSO_ZKEVM_ETH_TX_MANAGER_POLLING_INTERVAL="1s" + +# Keystore information for the zkevm node +ESPRESSO_ZKEVM_KEYSTORE_PASSWORD=testonly +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_MTCLIENT_URI=zkevm-1-prover:50061 +ESPRESSO_ZKEVM_1_EXECUTOR_URI=zkevm-1-prover:50071 +ESPRESSO_ZKEVM_1_SEQUENCER_MNEMONIC="test test test test test test test test test test test junk" +ESPRESSO_ZKEVM_1_ADAPTOR_RPC_PORT=18130 +ESPRESSO_ZKEVM_1_ADAPTOR_RPC_URL=http://polygon-zkevm-1-adaptor:$ESPRESSO_ZKEVM_1_ADAPTOR_RPC_PORT +ESPRESSO_ZKEVM_1_ADAPTOR_QUERY_PORT=50100 +ESPRESSO_ZKEVM_1_ADAPTOR_QUERY_URL=http://polygon-zkevm-1-adaptor:$ESPRESSO_ZKEVM_1_ADAPTOR_QUERY_PORT +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 + +# zkevm-preconfirmations-node 1 +ESPRESSO_ZKEVM_1_PRECONFIRMATIONS_L2_PORT=18127 +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_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 + +# 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 From 79d8b4f6595dbb87e74f0c4b1f80964173a31833 Mon Sep 17 00:00:00 2001 From: sveitser Date: Wed, 20 Sep 2023 16:53:34 +0200 Subject: [PATCH 02/12] WIP: more modular docker compose setup --- zkevm-contract-bindings/src/bin/deploy.rs | 53 +- zkevm-on-espresso-compose.yaml | 790 +++++++++------------- zkevm-on-espresso.env | 2 +- 3 files changed, 387 insertions(+), 458 deletions(-) diff --git a/zkevm-contract-bindings/src/bin/deploy.rs b/zkevm-contract-bindings/src/bin/deploy.rs index 871894a..6c7134f 100644 --- a/zkevm-contract-bindings/src/bin/deploy.rs +++ b/zkevm-contract-bindings/src/bin/deploy.rs @@ -10,12 +10,14 @@ use async_compatibility_layer::logging::{setup_backtrace, setup_logging}; use clap::Parser; use contract_bindings::HotShot; use ethers::{ + prelude::{NonceManagerMiddleware, SignerMiddleware}, providers::{Http, Middleware, Provider}, + signers::{coins_bip39::English, MnemonicBuilder, Signer}, types::Address, utils::{get_contract_address, parse_ether}, }; use hex::{FromHex, FromHexError}; -use sequencer_utils::{connect_rpc, Middleware as EthMiddleware}; +use sequencer_utils::Middleware as EthMiddleware; use serde::{Deserialize, Serialize}; use serde_with::with_prefix; use std::path::PathBuf; @@ -291,6 +293,55 @@ async fn deploy_zkevm( }) } +pub async fn connect_rpc( + provider: &Url, + mnemonic: &str, + index: u32, + chain_id: Option, +) -> Option> { + let mut provider = match Provider::try_from(provider.to_string()) { + Ok(provider) => provider, + Err(err) => { + tracing::error!("error connecting to RPC {}: {}", provider, err); + return None; + } + }; + provider.set_interval(Duration::from_millis(100)); + let chain_id = match chain_id { + Some(id) => id, + None => match provider.get_chainid().await { + Ok(id) => id.as_u64(), + Err(err) => { + tracing::error!("error getting chain ID: {}", err); + return None; + } + }, + }; + let mnemonic = match MnemonicBuilder::::default() + .phrase(mnemonic) + .index(index) + { + Ok(mnemonic) => mnemonic, + Err(err) => { + tracing::error!("error building walletE: {}", err); + return None; + } + }; + let wallet = match mnemonic.build() { + Ok(wallet) => wallet, + Err(err) => { + tracing::error!("error opening wallet: {}", err); + return None; + } + }; + let wallet = wallet.with_chain_id(chain_id); + let address = wallet.address(); + Some(Arc::new(NonceManagerMiddleware::new( + SignerMiddleware::new(provider, wallet), + address, + ))) +} + async fn deploy(opts: Options) -> Result<()> { let mut provider = Provider::try_from(opts.provider_url.to_string())?; provider.set_interval(Duration::from_millis(100)); diff --git a/zkevm-on-espresso-compose.yaml b/zkevm-on-espresso-compose.yaml index c529725..cd03ba6 100644 --- a/zkevm-on-espresso-compose.yaml +++ b/zkevm-on-espresso-compose.yaml @@ -6,37 +6,36 @@ networks: services: + polygon-zkevm-1-adaptor: + extends: + file: services.yaml + service: adaptor + 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" + environment: + - 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 + profiles: + - zkevm1 + - zkevm1-preconfirmations + zkevm-1-aggregator: - image: ghcr.io/espressosystems/zkevm-node:hotshot-integration - expose: - - 50081 - - 9091 # needed if metrics enabled + extends: + file: services.yaml + service: aggregator 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=$L1_PROVIDER - 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 @@ -44,118 +43,56 @@ services: zkevm-1-permissionless-node: condition: service_healthy profiles: - - "zkevm1" + - 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 + extends: + file: services.yaml + service: state-db profiles: - - "zkevm1" + - 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 + extends: + file: services.yaml + service: state-db profiles: - - "zkevm1-preconfirmations" + - zkevm1-preconfirmations zkevm-1-prover: - image: hermeznetwork/zkevm-prover:88f3835 - expose: - - 50052 # Mock prover - - 50061 # MT - - 50071 # Executor + extends: + file: services.yaml + service: prover 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" + - zkevm1 zkevm-1-preconfirmations-prover: - image: hermeznetwork/zkevm-prover:88f3835 - expose: - - 50052 # Mock prover - - 50061 # MT - - 50071 # Executor + extends: + file: services.yaml + service: prover 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 + - ./zkevm-node/test/config/test.prover.1.config.json:/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" + - zkevm1-preconfirmations zkevm-1-permissionless-node: - image: ghcr.io/espressosystems/zkevm-node:hotshot-integration + 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: - - 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=$L1_PROVIDER - ZKEVM_NODE_ETHERMAN_POEADDR=$ESPRESSO_ZKEVM_1_ROLLUP_ADDRESS @@ -167,42 +104,21 @@ services: - 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-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" + - zkevm1 zkevm-1-preconfirmations-node: - image: ghcr.io/espressosystems/zkevm-node:hotshot-integration + 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: - - 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 @@ -218,34 +134,17 @@ services: - 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-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" + - zkevm1-preconfirmations zkevm-1-eth-tx-manager: - image: ghcr.io/espressosystems/zkevm-node:hotshot-integration + extends: + file: services.yaml + service: eth-tx-manager 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 @@ -256,333 +155,312 @@ services: - 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" + - zkevm1 zkevm-1-faucet: - image: ghcr.io/espressosystems/espresso-polygon-zkevm-demo/faucet:main + extends: + file: services.yaml + service: faucet ports: - - $ESPRESSO_ZKEVM_1_FAUCET_PORT:$ESPRESSO_ZKEVM_1_FAUCET_PORT + - $ESPRESSO_ZKEVM_1_FAUCET_PORT:8111 environment: - - ESPRESSO_ZKEVM_FAUCET_DISCORD_TOKEN - - ESPRESSO_ZKEVM_FAUCET_GRANT_AMOUNT_ETHERS - - ESPRESSO_ZKEVM_FAUCET_MNEMONIC - - ESPRESSO_ZKEVM_FAUCET_NUM_CLIENTS - - ESPRESSO_ZKEVM_FAUCET_PORT=$ESPRESSO_ZKEVM_1_FAUCET_PORT - - ESPRESSO_ZKEVM_FAUCET_TRANSACTION_TIMEOUT_SECS - ESPRESSO_ZKEVM_FAUCET_WEB3_PROVIDER_URL_WS=$ESPRESSO_ZKEVM_1_FAUCET_WEB3_PROVIDER_URL_WS - ESPRESSO_ZKEVM_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 - healthcheck: - test: curl --fail http://localhost:$ESPRESSO_ZKEVM_1_FAUCET_PORT/healthcheck || exit 1 - interval: 2s - retries: 10 - timeout: 1s profiles: - - "zkevm1" + - zkevm1 - # 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=$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" - - "/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" + # # 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=$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" + # - "/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-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-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-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-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=$L1_PROVIDER - - 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_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-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-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=$L1_PROVIDER + # - 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_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-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=$L1_PROVIDER - - 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_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-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-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=$L1_PROVIDER + # - 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_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-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=$L1_PROVIDER - - 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-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=$L1_PROVIDER + # - 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/espresso-polygon-zkevm-demo/faucet:main - ports: - - $ESPRESSO_ZKEVM_2_FAUCET_PORT:$ESPRESSO_ZKEVM_2_FAUCET_PORT - environment: - - ESPRESSO_ZKEVM_FAUCET_DISCORD_TOKEN - - ESPRESSO_ZKEVM_FAUCET_GRANT_AMOUNT_ETHERS - - ESPRESSO_ZKEVM_FAUCET_MNEMONIC - - ESPRESSO_ZKEVM_FAUCET_NUM_CLIENTS - - ESPRESSO_ZKEVM_FAUCET_PORT=$ESPRESSO_ZKEVM_2_FAUCET_PORT - - ESPRESSO_ZKEVM_FAUCET_TRANSACTION_TIMEOUT_SECS - - ESPRESSO_ZKEVM_FAUCET_WEB3_PROVIDER_URL_WS=$ESPRESSO_ZKEVM_2_FAUCET_WEB3_PROVIDER_URL_WS - - ESPRESSO_ZKEVM_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 - healthcheck: - test: curl --fail http://localhost:$ESPRESSO_ZKEVM_2_FAUCET_PORT/healthcheck || exit 1 - interval: 2s - retries: 10 - timeout: 1s - profiles: - - "zkevm2" + # zkevm-2-faucet: + # image: ghcr.io/espressosystems/espresso-polygon-zkevm-demo/faucet:main + # ports: + # - $ESPRESSO_ZKEVM_2_FAUCET_PORT:$ESPRESSO_ZKEVM_2_FAUCET_PORT + # environment: + # - ESPRESSO_ZKEVM_FAUCET_DISCORD_TOKEN + # - ESPRESSO_ZKEVM_FAUCET_GRANT_AMOUNT_ETHERS + # - ESPRESSO_ZKEVM_FAUCET_MNEMONIC + # - ESPRESSO_ZKEVM_FAUCET_NUM_CLIENTS + # - ESPRESSO_ZKEVM_FAUCET_PORT=$ESPRESSO_ZKEVM_2_FAUCET_PORT + # - ESPRESSO_ZKEVM_FAUCET_TRANSACTION_TIMEOUT_SECS + # - ESPRESSO_ZKEVM_FAUCET_WEB3_PROVIDER_URL_WS=$ESPRESSO_ZKEVM_2_FAUCET_WEB3_PROVIDER_URL_WS + # - ESPRESSO_ZKEVM_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 + # healthcheck: + # test: curl --fail http://localhost:$ESPRESSO_ZKEVM_2_FAUCET_PORT/healthcheck || exit 1 + # interval: 2s + # retries: 10 + # timeout: 1s + # profiles: + # - "zkevm2" diff --git a/zkevm-on-espresso.env b/zkevm-on-espresso.env index a635a55..d248694 100644 --- a/zkevm-on-espresso.env +++ b/zkevm-on-espresso.env @@ -32,7 +32,7 @@ ESPRESSO_ZKEVM_L1_PROVIDER=$L1_PROVIDER ESPRESSO_ZKEVM_L1_BLOCK_PERIOD=1 # Hotshot commitment task -ESPRESSO_SEQUENCER_HOTSHOT_ADDRESS=0x5fbdb2315678afecb367f032d93f642f64180aa3 +ESPRESSO_SEQUENCER_HOTSHOT_ADDRESS=0x73511669fd4de447fed18bb79bafeac93ab7f31f 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 From fb1e8216614e5595c05a7c7e296a5c312774c6a2 Mon Sep 17 00:00:00 2001 From: sveitser Date: Wed, 20 Sep 2023 17:38:37 +0200 Subject: [PATCH 03/12] Add missing file --- services.yaml | 139 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 139 insertions(+) create mode 100644 services.yaml diff --git a/services.yaml b/services.yaml new file mode 100644 index 0000000..94f6846 --- /dev/null +++ b/services.yaml @@ -0,0 +1,139 @@ +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=$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 + + 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 From e5e5a2c82347a5f699308d5089773105f8989ab1 Mon Sep 17 00:00:00 2001 From: sveitser Date: Wed, 20 Sep 2023 17:47:06 +0200 Subject: [PATCH 04/12] Revert hotshot address --- zkevm-on-espresso.env | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/zkevm-on-espresso.env b/zkevm-on-espresso.env index d248694..a635a55 100644 --- a/zkevm-on-espresso.env +++ b/zkevm-on-espresso.env @@ -32,7 +32,7 @@ ESPRESSO_ZKEVM_L1_PROVIDER=$L1_PROVIDER ESPRESSO_ZKEVM_L1_BLOCK_PERIOD=1 # Hotshot commitment task -ESPRESSO_SEQUENCER_HOTSHOT_ADDRESS=0x73511669fd4de447fed18bb79bafeac93ab7f31f +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 From 0862b2ad2cf707b9d10a70cb32caaa6fe0b2e2b6 Mon Sep 17 00:00:00 2001 From: sveitser Date: Wed, 20 Sep 2023 17:51:22 +0200 Subject: [PATCH 05/12] Fix faucet ports --- zkevm-on-espresso-compose.yaml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/zkevm-on-espresso-compose.yaml b/zkevm-on-espresso-compose.yaml index cd03ba6..26e1b85 100644 --- a/zkevm-on-espresso-compose.yaml +++ b/zkevm-on-espresso-compose.yaml @@ -166,8 +166,9 @@ services: file: services.yaml service: faucet ports: - - $ESPRESSO_ZKEVM_1_FAUCET_PORT:8111 + - $ESPRESSO_ZKEVM_1_FAUCET_PORT:$ESPRESSO_ZKEVM_1_FAUCET_PORT environment: + - ESPRESSO_DISCORD_FAUCET_PORT=$ESPRESSO_ZKEVM_1_FAUCET_PORT - ESPRESSO_ZKEVM_FAUCET_WEB3_PROVIDER_URL_WS=$ESPRESSO_ZKEVM_1_FAUCET_WEB3_PROVIDER_URL_WS - ESPRESSO_ZKEVM_FAUCET_WEB3_PROVIDER_URL_HTTP=$ESPRESSO_ZKEVM_1_FAUCET_WEB3_PROVIDER_URL_HTTP depends_on: From 0fb9d6abfa4fd841b984fa428898fb1168590174 Mon Sep 17 00:00:00 2001 From: sveitser Date: Thu, 21 Sep 2023 14:16:41 +0200 Subject: [PATCH 06/12] Fix faucet and zkevm-node config --- services.yaml | 4 +++- zkevm-on-espresso-compose.yaml | 8 ++++---- zkevm-on-espresso.env | 10 +++++----- 3 files changed, 12 insertions(+), 10 deletions(-) diff --git a/services.yaml b/services.yaml index 94f6846..1f0a2c5 100644 --- a/services.yaml +++ b/services.yaml @@ -124,6 +124,7 @@ services: interval: 2s retries: 10 timeout: 1s + stop_grace_period: 1s adaptor: image: ghcr.io/espressosystems/espresso-polygon-zkevm-demo/polygon-zkevm-adaptor:main @@ -133,7 +134,8 @@ services: - RUST_LOG - RUST_LOG_FORMAT healthcheck: - test: "curl http://localhost:$$ESPRESSO_ZKEVM_ADAPTOR_QUERY_PORT" + test: curl http://localhost:$$ESPRESSO_ZKEVM_ADAPTOR_QUERY_PORT interval: 5s timeout: 3s retries: 120 + stop_grace_period: 1s diff --git a/zkevm-on-espresso-compose.yaml b/zkevm-on-espresso-compose.yaml index 26e1b85..7c592ff 100644 --- a/zkevm-on-espresso-compose.yaml +++ b/zkevm-on-espresso-compose.yaml @@ -14,8 +14,6 @@ services: - "$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_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 profiles: @@ -93,6 +91,8 @@ services: environment: - 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=$L1_PROVIDER - ZKEVM_NODE_ETHERMAN_POEADDR=$ESPRESSO_ZKEVM_1_ROLLUP_ADDRESS @@ -169,8 +169,8 @@ services: - $ESPRESSO_ZKEVM_1_FAUCET_PORT:$ESPRESSO_ZKEVM_1_FAUCET_PORT environment: - ESPRESSO_DISCORD_FAUCET_PORT=$ESPRESSO_ZKEVM_1_FAUCET_PORT - - ESPRESSO_ZKEVM_FAUCET_WEB3_PROVIDER_URL_WS=$ESPRESSO_ZKEVM_1_FAUCET_WEB3_PROVIDER_URL_WS - - ESPRESSO_ZKEVM_FAUCET_WEB3_PROVIDER_URL_HTTP=$ESPRESSO_ZKEVM_1_FAUCET_WEB3_PROVIDER_URL_HTTP + - 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: zkevm-1-permissionless-node: condition: service_healthy diff --git a/zkevm-on-espresso.env b/zkevm-on-espresso.env index a635a55..065d8bd 100644 --- a/zkevm-on-espresso.env +++ b/zkevm-on-espresso.env @@ -40,11 +40,11 @@ ESPRESSO_SEQUENCER_L1_PROVIDER=$L1_PROVIDER ESPRESSO_SEQUENCER_QUERY_SERVICE_URL=http://sequencer0:$ESPRESSO_SEQUENCER_API_PORT # Config shared between both zkevm-nodes -ESPRESSO_ZKEVM_FAUCET_DISCORD_TOKEN="" -ESPRESSO_ZKEVM_FAUCET_GRANT_AMOUNT_ETHERS=1000 -ESPRESSO_ZKEVM_FAUCET_MNEMONIC="test test test test test test test test test test test junk" -ESPRESSO_ZKEVM_FAUCET_NUM_CLIENTS=1 -ESPRESSO_ZKEVM_FAUCET_TRANSACTION_TIMEOUT_SECS=300 +ESPRESSO_DISCORD_FAUCET_DISCORD_TOKEN="" +ESPRESSO_DISCORD_FAUCET_GRANT_AMOUNT_ETHERS=1000 +ESPRESSO_DISCORD_FAUCET_MNEMONIC="test test test test test test test test test test test junk" +ESPRESSO_DISCORD_FAUCET_NUM_CLIENTS=1 +ESPRESSO_DISCORD_FAUCET_TRANSACTION_TIMEOUT_SECS=300 ESPRESSO_ZKEVM_IGNORE_GEN_BLOCK_NUMBER_CHECK=1 ESPRESSO_ZKEVM_ETH_TX_MANAGER_POLLING_INTERVAL="1s" From a5321948d791d75a4c3553f49b29ab37e6df5a4c Mon Sep 17 00:00:00 2001 From: sveitser Date: Mon, 25 Sep 2023 20:50:19 +0200 Subject: [PATCH 07/12] Remember hotshot genesis block number --- .env | 2 ++ permissionless-docker-compose.yaml | 6 ++++++ zkevm-contract-bindings/src/bin/deploy.rs | 24 ++++++++++++++++++----- zkevm-node | 2 +- zkevm-on-espresso-compose.yaml | 2 ++ zkevm-on-espresso.env | 2 ++ 6 files changed, 32 insertions(+), 6 deletions(-) diff --git a/.env b/.env index c07e5a0..77e7acd 100644 --- a/.env +++ b/.env @@ -71,6 +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=0 # zkevm-preconfirmations-node 1 ESPRESSO_ZKEVM_1_PRECONFIRMATIONS_L2_PORT=18127 @@ -98,6 +99,7 @@ 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=0 # zkevm-preconfirmations-node 2 ESPRESSO_ZKEVM_2_PRECONFIRMATIONS_L2_PORT=28127 diff --git a/permissionless-docker-compose.yaml b/permissionless-docker-compose.yaml index 27b3501..4ef52bc 100644 --- a/permissionless-docker-compose.yaml +++ b/permissionless-docker-compose.yaml @@ -158,6 +158,7 @@ services: - 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 @@ -210,6 +211,7 @@ services: - 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 @@ -291,6 +293,7 @@ services: condition: service_healthy profiles: - "zkevm1" + stop_grace_period: 1s # Polygon zkevm-node 2 zkevm-2-aggregator: @@ -447,6 +450,7 @@ services: - 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 @@ -499,6 +503,7 @@ services: - 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 @@ -579,3 +584,4 @@ services: condition: service_healthy profiles: - "zkevm2" + stop_grace_period: 1s diff --git a/zkevm-contract-bindings/src/bin/deploy.rs b/zkevm-contract-bindings/src/bin/deploy.rs index 2712f4b..5e906ae 100644 --- a/zkevm-contract-bindings/src/bin/deploy.rs +++ b/zkevm-contract-bindings/src/bin/deploy.rs @@ -163,8 +163,10 @@ struct ZkEvmDeploymentOutput { ger_address: Address, /// The address of the verifier contract. verifier_address: Address, - /// The block number when the rollup contract was deployed. + /// The L1 block number when the rollup contract was deployed. genesis_block_number: u64, + /// The hotshot block number where the rollup contract was deployed. + genesis_hotshot_block_number: u64, } with_prefix!(prefix_zkevm_1 "ESPRESSO_ZKEVM_1_"); @@ -267,6 +269,17 @@ async fn deploy_zkevm( .await; assert_eq!(rollup.address(), precalc_rollup_address); + let hotshot = HotShot::new(input.hotshot_address, deployer.clone()); + let genesis_hotshot_block_number = hotshot + .block_height() + .block(receipt.block_number.unwrap()) + .await? + .as_u64(); + tracing::info!( + "HotShot genesis block number: {}", + genesis_hotshot_block_number + ); + // Remember the genesis block number where the rollup contract was deployed. let genesis_block_number = receipt.block_number.unwrap().as_u64(); @@ -307,6 +320,7 @@ async fn deploy_zkevm( ger_address: global_exit_root.address(), verifier_address: verifier.address(), genesis_block_number, + genesis_hotshot_block_number, }) } @@ -386,14 +400,14 @@ async fn deploy(opts: Options) -> Result<()> { tracing::info!("Using deployer account {:?}", deployer.inner().address()); // Deploy the hotshot contract. - let hotshot_address = if opts.hotshot_address.is_none() { + let hotshot_address = if let Some(hotshot_address) = opts.hotshot_address { + tracing::info!("Using existing HotShot contract at {:?}", hotshot_address); + hotshot_address + } else { tracing::info!("Deploying HotShot contract"); let hotshot = HotShot::deploy(deployer.clone(), ())?.send().await?; tracing::info!("Deployed HotShot at {:?}", hotshot.address()); hotshot.address() - } else { - tracing::info!("Using existing HotShot contract"); - opts.hotshot_address.unwrap() }; // Deploy the contracts for the first zkevm-node. diff --git a/zkevm-node b/zkevm-node index d8cc5fa..b5c4f45 160000 --- a/zkevm-node +++ b/zkevm-node @@ -1 +1 @@ -Subproject commit d8cc5fa9567a3b63f16ca380666805cc697dd70b +Subproject commit b5c4f450ab89e3a89b47d0451c9a07069e0b5be9 diff --git a/zkevm-on-espresso-compose.yaml b/zkevm-on-espresso-compose.yaml index 7c592ff..d37b368 100644 --- a/zkevm-on-espresso-compose.yaml +++ b/zkevm-on-espresso-compose.yaml @@ -100,6 +100,7 @@ services: - 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 @@ -129,6 +130,7 @@ services: - 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 diff --git a/zkevm-on-espresso.env b/zkevm-on-espresso.env index 065d8bd..4007958 100644 --- a/zkevm-on-espresso.env +++ b/zkevm-on-espresso.env @@ -67,6 +67,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=0 # zkevm-preconfirmations-node 1 ESPRESSO_ZKEVM_1_PRECONFIRMATIONS_L2_PORT=18127 @@ -89,6 +90,7 @@ 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=0 # zkevm-preconfirmations-node 2 ESPRESSO_ZKEVM_2_PRECONFIRMATIONS_L2_PORT=28127 From c2a698c20fd492d7d8d8ef53c15355669d6dd01c Mon Sep 17 00:00:00 2001 From: sveitser Date: Tue, 26 Sep 2023 16:25:58 +0200 Subject: [PATCH 08/12] More unified standalone and "on sequencer" demos --- .env | 32 +- .github/workflows/build.yml | 2 +- README.md | 4 +- docker-compose-anvil.yaml | 4 +- docker-compose-geth.yaml | 2 +- docker-compose.yaml | 297 ++++----- justfile | 6 +- permissionless-docker-compose.yaml | 587 ------------------ .../src/demo_with_sequencer.rs | 4 +- polygon-zkevm-adaptor/src/polygon_zkevm.rs | 4 +- scripts/demo-test-end-to-end | 17 +- scripts/demo-with-profiles | 2 +- scripts/deploy-zkevm-on-sequencer | 8 +- services.yaml | 2 +- standalone-docker-compose.yaml | 126 ++++ zkevm-node | 2 +- zkevm-on-espresso-compose.yaml | 469 -------------- zkevm-on-espresso.env | 100 --- 18 files changed, 301 insertions(+), 1367 deletions(-) delete mode 100644 permissionless-docker-compose.yaml create mode 100644 standalone-docker-compose.yaml delete mode 100644 zkevm-on-espresso-compose.yaml delete mode 100644 zkevm-on-espresso.env diff --git a/.env b/.env index 77e7acd..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 @@ -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=0 - -# 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 a0fc3cb..f0e4bec 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -57,7 +57,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 2992e4a..567a661 100755 --- a/scripts/demo-test-end-to-end +++ b/scripts/demo-test-end-to-end @@ -6,35 +6,22 @@ # 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 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 for RPC in $RPC_1; 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 for $RPC" if [ "$balance" != "0x0" ]; then echo "Balance updated for $RPC: $balance" break @@ -44,6 +31,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 index 5bae3db..8a0340c 100644 --- a/scripts/deploy-zkevm-on-sequencer +++ b/scripts/deploy-zkevm-on-sequencer @@ -7,6 +7,8 @@ # 3. run scripts/demo-test-end-to-end to test if it works. set -euo pipefail -cargo run --bin deploy -- --hotshot-address 0x5fbdb2315678afecb367f032d93f642f64180aa3 -docker compose --profile zkevm1 -f zkevm-on-espresso-compose.yaml \ - --env-file zkevm-on-espresso.env --env-file deployment.env up --force-recreate +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 diff --git a/services.yaml b/services.yaml index 1f0a2c5..ed0c800 100644 --- a/services.yaml +++ b/services.yaml @@ -91,7 +91,7 @@ services: - 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=$L1_PROVIDER + - 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 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 diff --git a/zkevm-node b/zkevm-node index ba12129..fffe130 160000 --- a/zkevm-node +++ b/zkevm-node @@ -1 +1 @@ -Subproject commit ba12129f177fb3ab55ac80131d0493979c2d069c +Subproject commit fffe13067821b5e14e12eecb01ad491d82dbc30f diff --git a/zkevm-on-espresso-compose.yaml b/zkevm-on-espresso-compose.yaml deleted file mode 100644 index d37b368..0000000 --- a/zkevm-on-espresso-compose.yaml +++ /dev/null @@ -1,469 +0,0 @@ -version: "3" - -networks: - default: - name: espresso-sequencer - -services: - - polygon-zkevm-1-adaptor: - extends: - file: services.yaml - service: adaptor - 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" - environment: - - 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 - - zkevm-1-aggregator: - extends: - file: services.yaml - service: aggregator - environment: - - 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=$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: - 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: - 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: - zkevm-1-state-db: - condition: service_healthy - 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: - zkevm-1-preconfirmations-state-db: - condition: service_healthy - 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: - - 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=$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: - zkevm-1-state-db: - condition: service_healthy - 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: - - 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=$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: - zkevm-1-preconfirmations-state-db: - condition: service_healthy - profiles: - - zkevm1-preconfirmations - - zkevm-1-eth-tx-manager: - extends: - file: services.yaml - service: eth-tx-manager - environment: - - 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=$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: - zkevm-1-permissionless-node: - condition: service_healthy - profiles: - - zkevm1 - - zkevm-1-faucet: - extends: - file: services.yaml - service: faucet - ports: - - $ESPRESSO_ZKEVM_1_FAUCET_PORT:$ESPRESSO_ZKEVM_1_FAUCET_PORT - environment: - - 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: - zkevm-1-permissionless-node: - condition: service_healthy - profiles: - - zkevm1 - - # # 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=$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" - # - "/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=$L1_PROVIDER - # - 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_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-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=$L1_PROVIDER - # - 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_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-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=$L1_PROVIDER - # - 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/espresso-polygon-zkevm-demo/faucet:main - # ports: - # - $ESPRESSO_ZKEVM_2_FAUCET_PORT:$ESPRESSO_ZKEVM_2_FAUCET_PORT - # environment: - # - ESPRESSO_ZKEVM_FAUCET_DISCORD_TOKEN - # - ESPRESSO_ZKEVM_FAUCET_GRANT_AMOUNT_ETHERS - # - ESPRESSO_ZKEVM_FAUCET_MNEMONIC - # - ESPRESSO_ZKEVM_FAUCET_NUM_CLIENTS - # - ESPRESSO_ZKEVM_FAUCET_PORT=$ESPRESSO_ZKEVM_2_FAUCET_PORT - # - ESPRESSO_ZKEVM_FAUCET_TRANSACTION_TIMEOUT_SECS - # - ESPRESSO_ZKEVM_FAUCET_WEB3_PROVIDER_URL_WS=$ESPRESSO_ZKEVM_2_FAUCET_WEB3_PROVIDER_URL_WS - # - ESPRESSO_ZKEVM_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 - # healthcheck: - # test: curl --fail http://localhost:$ESPRESSO_ZKEVM_2_FAUCET_PORT/healthcheck || exit 1 - # interval: 2s - # retries: 10 - # timeout: 1s - # profiles: - # - "zkevm2" diff --git a/zkevm-on-espresso.env b/zkevm-on-espresso.env deleted file mode 100644 index 4007958..0000000 --- a/zkevm-on-espresso.env +++ /dev/null @@ -1,100 +0,0 @@ -# Environment for local demo network. -# This file is meant to work with docker-compose.yaml - -RUST_LOG=info,libp2p=off -RUST_LOG_FORMAT=full - -L1_PROVIDER=http://demo-l1-network:8545 - -# Internal port inside container -ESPRESSO_WEB_SERVER_PORT=40000 -ESPRESSO_ORCHESTRATOR_PORT=40001 -# Set a short time for proposing empty blocks if the mempool is empty. Since the local demo will -# usually be run with very low volume, we require empty blocks to push previous blocks through the -# consensus pipeline, so this is needed to feel the effects of HotShot's fast finality. -ESPRESSO_ORCHESTRATOR_MAX_PROPOSE_TIME=1s -ESPRESSO_ORCHESTRATOR_MIN_PROPOSE_TIME=500ms -ESPRESSO_ORCHESTRATOR_NEXT_VIEW_TIMEOUT=30s -ESPRESSO_CONSENSUS_SERVER_PORT=40002 -ESPRESSO_DA_SERVER_PORT=40003 -ESPRESSO_SEQUENCER_DA_SERVER_URL=http://da-server:$ESPRESSO_WEB_SERVER_PORT -ESPRESSO_SEQUENCER_CONSENSUS_SERVER_URL=http://consensus-server:$ESPRESSO_WEB_SERVER_PORT -ESPRESSO_SEQUENCER_ORCHESTRATOR_URL=http://orchestrator:$ESPRESSO_ORCHESTRATOR_PORT -ESPRESSO_SEQUENCER_API_PORT=50000 -ESPRESSO_SEQUENCER1_API_PORT=50001 -ESPRESSO_SEQUENCER2_API_PORT=50002 -ESPRESSO_SEQUENCER3_API_PORT=50003 -ESPRESSO_SEQUENCER4_API_PORT=50004 -ESPRESSO_SEQUENCER_URL=http://sequencer0:$ESPRESSO_SEQUENCER_API_PORT -ESPRESSO_SEQUENCER_STORAGE_PATH=/store/sequencer - -ESPRESSO_ZKEVM_L1_PROVIDER=$L1_PROVIDER -ESPRESSO_ZKEVM_L1_BLOCK_PERIOD=1 - -# Hotshot commitment task -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=$L1_PROVIDER -ESPRESSO_SEQUENCER_QUERY_SERVICE_URL=http://sequencer0:$ESPRESSO_SEQUENCER_API_PORT - -# Config shared between both zkevm-nodes -ESPRESSO_DISCORD_FAUCET_DISCORD_TOKEN="" -ESPRESSO_DISCORD_FAUCET_GRANT_AMOUNT_ETHERS=1000 -ESPRESSO_DISCORD_FAUCET_MNEMONIC="test test test test test test test test test test test junk" -ESPRESSO_DISCORD_FAUCET_NUM_CLIENTS=1 -ESPRESSO_DISCORD_FAUCET_TRANSACTION_TIMEOUT_SECS=300 -ESPRESSO_ZKEVM_IGNORE_GEN_BLOCK_NUMBER_CHECK=1 -ESPRESSO_ZKEVM_ETH_TX_MANAGER_POLLING_INTERVAL="1s" - -# Keystore information for the zkevm node -ESPRESSO_ZKEVM_KEYSTORE_PASSWORD=testonly -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_MTCLIENT_URI=zkevm-1-prover:50061 -ESPRESSO_ZKEVM_1_EXECUTOR_URI=zkevm-1-prover:50071 -ESPRESSO_ZKEVM_1_SEQUENCER_MNEMONIC="test test test test test test test test test test test junk" -ESPRESSO_ZKEVM_1_ADAPTOR_RPC_PORT=18130 -ESPRESSO_ZKEVM_1_ADAPTOR_RPC_URL=http://polygon-zkevm-1-adaptor:$ESPRESSO_ZKEVM_1_ADAPTOR_RPC_PORT -ESPRESSO_ZKEVM_1_ADAPTOR_QUERY_PORT=50100 -ESPRESSO_ZKEVM_1_ADAPTOR_QUERY_URL=http://polygon-zkevm-1-adaptor:$ESPRESSO_ZKEVM_1_ADAPTOR_QUERY_PORT -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=0 - -# zkevm-preconfirmations-node 1 -ESPRESSO_ZKEVM_1_PRECONFIRMATIONS_L2_PORT=18127 -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_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=0 - -# 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 From a4aa07fb56fd0cb3bfae20e4acaa395a8c914e92 Mon Sep 17 00:00:00 2001 From: sveitser Date: Tue, 26 Sep 2023 16:37:45 +0200 Subject: [PATCH 09/12] Check preconfirmations balance in e2e test --- scripts/demo-test-end-to-end | 9 +++++---- scripts/deploy-zkevm-on-sequencer | 5 ++--- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/scripts/demo-test-end-to-end b/scripts/demo-test-end-to-end index 567a661..67e08da 100755 --- a/scripts/demo-test-end-to-end +++ b/scripts/demo-test-end-to-end @@ -10,7 +10,8 @@ set -euo pipefail set -a; source .env; set +a; export ADDR=0x1234567890123456789012345678901234567890 -export RPC_1=http://localhost:$ESPRESSO_ZKEVM_1_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 @@ -18,12 +19,12 @@ curl -s -X POST http://localhost:$ESPRESSO_ZKEVM_1_FAUCET_PORT/faucet/request/$A echo "Waiting for balance to be updated..." function check_balance() { - for RPC in $RPC_1; do + for RPC in $RPC_1 $RPC_2; do 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 for $RPC" + 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 diff --git a/scripts/deploy-zkevm-on-sequencer b/scripts/deploy-zkevm-on-sequencer index 8a0340c..aaa37c0 100644 --- a/scripts/deploy-zkevm-on-sequencer +++ b/scripts/deploy-zkevm-on-sequencer @@ -1,7 +1,7 @@ #!/usr/bin/env bash # This script is WIP # -# 1. run: docker compose up --force-recreate +# 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. @@ -10,5 +10,4 @@ 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 +docker compose --profile zkevm1 zkevm1-preconfirmations --env-file .env --env-file deployment.env up --force-recreate --renew-anon-volumes From 9a511d8dc7b56fc3887fc61e944dfd6356578cc3 Mon Sep 17 00:00:00 2001 From: sveitser Date: Tue, 26 Sep 2023 18:09:56 +0200 Subject: [PATCH 10/12] CI: check docker version --- .github/workflows/build.yml | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index f0e4bec..d6d007f 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -24,6 +24,13 @@ jobs: - name: Check /proc/cpuinfo run: cat /proc/cpuinfo + steps: + - name: Check docker version + run: | + docker version + docker-compose version + docker compose version + - name: Abort early if Intel ADX instructions (required by zkevm-prover) is not available run: cat /proc/cpuinfo | grep -q ' adx ' || ( echo "Retry CI in the hopes of getting another CPU" && exit 1 ) From a48eb14ac510b821adbd3895f62d93b955d77eb8 Mon Sep 17 00:00:00 2001 From: sveitser Date: Tue, 26 Sep 2023 18:11:03 +0200 Subject: [PATCH 11/12] Fix yaml syntax --- .github/workflows/build.yml | 1 - 1 file changed, 1 deletion(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index d6d007f..b71a00c 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -24,7 +24,6 @@ jobs: - name: Check /proc/cpuinfo run: cat /proc/cpuinfo - steps: - name: Check docker version run: | docker version From 3a170a6e18a368aa4b08f241c214eac3bace3319 Mon Sep 17 00:00:00 2001 From: sveitser Date: Tue, 26 Sep 2023 18:12:34 +0200 Subject: [PATCH 12/12] CI: use docker compose instead of docker-compose --- .github/workflows/build.yml | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index b71a00c..c8fe9df 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -24,12 +24,6 @@ jobs: - name: Check /proc/cpuinfo run: cat /proc/cpuinfo - - name: Check docker version - run: | - docker version - docker-compose version - docker compose version - - name: Abort early if Intel ADX instructions (required by zkevm-prover) is not available run: cat /proc/cpuinfo | grep -q ' adx ' || ( echo "Retry CI in the hopes of getting another CPU" && exit 1 ) @@ -63,7 +57,7 @@ jobs: password: ${{ secrets.GITHUB_TOKEN }} - name: Pull all docker compose images - run: docker-compose -f standalone-docker-compose.yaml -f docker-compose-anvil.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