diff --git a/compose/docker-compose-fixturenet-optimism.yml b/compose/docker-compose-fixturenet-optimism.yml new file mode 100644 index 0000000..fe1eac5 --- /dev/null +++ b/compose/docker-compose-fixturenet-optimism.yml @@ -0,0 +1,151 @@ +version: '3.7' + +services: + # Generates and funds the accounts required when setting up the L2 chain (outputs to volume l2_accounts) + # Creates / updates the configuration for L1 contracts deployment + # Deploys the L1 smart contracts (outputs to volume l1_deployment) + fixturenet-optimism-contracts: + restart: on-failure + image: cerc/optimism-contracts:local + hostname: fixturenet-optimism-contracts + env_file: + - ../config/fixturenet-optimism/l1-params.env + environment: + CERC_SCRIPT_DEBUG: ${CERC_SCRIPT_DEBUG} + CERC_L1_CHAIN_ID: ${CERC_L1_CHAIN_ID} + CERC_L1_RPC: ${CERC_L1_RPC} + CERC_L1_ACCOUNTS_CSV_URL: ${CERC_L1_ACCOUNTS_CSV_URL} + CERC_L1_ADDRESS: ${CERC_L1_ADDRESS} + CERC_L1_PRIV_KEY: ${CERC_L1_PRIV_KEY} + volumes: + - ../config/network/wait-for-it.sh:/app/packages/contracts-bedrock/wait-for-it.sh + - ../config/fixturenet-optimism/optimism-contracts/deploy-contracts.sh:/app/packages/contracts-bedrock/deploy-contracts.sh + - l2_accounts:/l2-accounts + - l1_deployment:/l1-deployment + - l2_config:/l2-config + # Waits for L1 endpoint to be up before running the contract deploy script + command: | + "./wait-for-it.sh -h ${CERC_L1_HOST:-$${DEFAULT_CERC_L1_HOST}} -p ${CERC_L1_PORT:-$${DEFAULT_CERC_L1_PORT}} -s -t 60 -- ./deploy-contracts.sh" + + # Initializes and runs the L2 execution client (outputs to volume l2_geth_data) + op-geth: + restart: always + image: cerc/optimism-l2geth:local + hostname: op-geth + depends_on: + op-node: + condition: service_started + volumes: + - ../config/fixturenet-optimism/run-op-geth.sh:/run-op-geth.sh + - l2_config:/l2-config:ro + - l2_accounts:/l2-accounts:ro + - l2_geth_data:/datadir + entrypoint: "sh" + command: "/run-op-geth.sh" + ports: + - "8545" + - "8546" + healthcheck: + test: ["CMD", "nc", "-vz", "localhost:8545"] + interval: 30s + timeout: 10s + retries: 100 + start_period: 10s + extra_hosts: + - "host.docker.internal:host-gateway" + + # Runs the L2 consensus client (Sequencer node) + # Generates the L2 config files if not already present (outputs to volume l2_config) + op-node: + restart: always + image: cerc/optimism-op-node:local + hostname: op-node + depends_on: + fixturenet-optimism-contracts: + condition: service_completed_successfully + env_file: + - ../config/fixturenet-optimism/l1-params.env + environment: + CERC_SCRIPT_DEBUG: ${CERC_SCRIPT_DEBUG} + CERC_L1_RPC: ${CERC_L1_RPC} + volumes: + - ../config/fixturenet-optimism/run-op-node.sh:/run-op-node.sh + - l1_deployment:/l1-deployment:ro + - l2_config:/l2-config + - l2_accounts:/l2-accounts:ro + entrypoint: "sh" + command: "/run-op-node.sh" + ports: + - "8547" + healthcheck: + test: ["CMD", "nc", "-vz", "localhost:8547"] + interval: 30s + timeout: 10s + retries: 100 + start_period: 10s + extra_hosts: + - "host.docker.internal:host-gateway" + + # Runs the batcher (takes transactions from the Sequencer and publishes them to L1) + op-batcher: + restart: always + image: cerc/optimism-op-batcher:local + hostname: op-batcher + depends_on: + op-node: + condition: service_healthy + op-geth: + condition: service_healthy + env_file: + - ../config/fixturenet-optimism/l1-params.env + environment: + CERC_SCRIPT_DEBUG: ${CERC_SCRIPT_DEBUG} + CERC_L1_RPC: ${CERC_L1_RPC} + volumes: + - ../config/network/wait-for-it.sh:/wait-for-it.sh + - ../config/fixturenet-optimism/run-op-batcher.sh:/run-op-batcher.sh + - l2_accounts:/l2-accounts:ro + entrypoint: ["sh", "-c"] + # Waits for L1 endpoint to be up before running the batcher + command: | + "/wait-for-it.sh -h ${CERC_L1_HOST:-$${DEFAULT_CERC_L1_HOST}} -p ${CERC_L1_PORT:-$${DEFAULT_CERC_L1_PORT}} -s -t 60 -- /run-op-batcher.sh" + ports: + - "8548" + extra_hosts: + - "host.docker.internal:host-gateway" + + # Runs the proposer (periodically submits new state roots to L1) + op-proposer: + restart: always + image: cerc/optimism-op-proposer:local + hostname: op-proposer + depends_on: + op-node: + condition: service_healthy + op-geth: + condition: service_healthy + env_file: + - ../config/fixturenet-optimism/l1-params.env + environment: + CERC_SCRIPT_DEBUG: ${CERC_SCRIPT_DEBUG} + CERC_L1_RPC: ${CERC_L1_RPC} + CERC_L1_CHAIN_ID: ${CERC_L1_CHAIN_ID} + volumes: + - ../config/network/wait-for-it.sh:/wait-for-it.sh + - ../config/fixturenet-optimism/run-op-proposer.sh:/run-op-proposer.sh + - l1_deployment:/l1-deployment:ro + - l2_accounts:/l2-accounts:ro + entrypoint: ["sh", "-c"] + # Waits for L1 endpoint to be up before running the proposer + command: | + "/wait-for-it.sh -h ${CERC_L1_HOST:-$${DEFAULT_CERC_L1_HOST}} -p ${CERC_L1_PORT:-$${DEFAULT_CERC_L1_PORT}} -s -t 60 -- /run-op-proposer.sh" + ports: + - "8560" + extra_hosts: + - "host.docker.internal:host-gateway" + +volumes: + l1_deployment: + l2_accounts: + l2_config: + l2_geth_data: