Files
universe/compose.services.yml
T
zeekayandHanzo Dev 935887cd24 explorer 1.5.56 fills the heights it skipped, and Hanzo's coin is AI
explorer 1.5.56 embeds indexer v1.5.12: a null block from a lagging hanzod
seat is retried rather than stored as an empty block, and a start-up audit
indexed the 525 Hanzo heights earlier runs had skipped.

Chain 36963's native coin is AI, never HANZO: the Hanzo explorer page and the
compose explorers for Hanzo mainnet, testnet and devnet now say so.

Co-authored-by: Hanzo Dev <[email protected]>
2026-09-23 20:09:14 -07:00

694 lines
26 KiB
YAML

# Lux Universe - Services Stack (connects to external K8s nodes)
# Deploys explorers, indexers, and UIs without running validator nodes.
# Nodes are expected to be running on K8s with LoadBalancer IPs.
#
# Usage:
# docker compose -f compose.services.yml up -d # Core infra + mainnet explorers
# docker compose -f compose.services.yml --profile testnet up -d # Add testnet explorers
# docker compose -f compose.services.yml --profile devnet up -d # Add devnet explorers
# docker compose -f compose.services.yml --profile graph up -d # Add Graph Node
# docker compose -f compose.services.yml --profile ui up -d # Add frontend UIs
# docker compose -f compose.services.yml --profile all up -d # Everything
#
# Required .env variables:
# MAINNET_RPC=http://<mainnet-lb-ip>:9630
# TESTNET_RPC=http://<testnet-lb-ip>:9640
# DEVNET_RPC=http://<devnet-lb-ip>:9650
networks:
services:
driver: bridge
volumes:
postgres-data:
redis-data:
ipfs-data:
graph-data:
# ==============================================================================
# SHARED INFRASTRUCTURE
# ==============================================================================
x-blockscout-common: &blockscout-common
image: ghcr.io/luxfi/explorer:0.1.0
restart: unless-stopped
networks:
- services
depends_on:
postgres:
condition: service_healthy
services:
postgres:
image: ghcr.io/hanzoai/sql:0.1.0
container_name: lux-postgres
restart: unless-stopped
command: postgres -c max_connections=1000 -c shared_buffers=256MB
environment:
POSTGRES_USER: ${POSTGRES_USER:-postgres}
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:-postgres}
volumes:
- postgres-data:/var/lib/postgresql/data
- ./docker/init.sql:/docker-entrypoint-initdb.d/init.sql:ro
ports:
- "${POSTGRES_PORT:-5432}:5432"
networks:
- services
healthcheck:
test: ["CMD-SHELL", "pg_isready -U ${POSTGRES_USER:-postgres}"]
interval: 10s
timeout: 5s
retries: 5
redis:
image: ghcr.io/hanzoai/kv:0.1.0
container_name: lux-redis
restart: unless-stopped
command: redis-server --appendonly yes --maxmemory 2gb --maxmemory-policy allkeys-lru
volumes:
- redis-data:/data
ports:
- "${REDIS_PORT:-6379}:6379"
networks:
- services
healthcheck:
test: ["CMD", "redis-cli", "ping"]
interval: 10s
timeout: 5s
retries: 5
# ==========================================================================
# MAINNET EXPLORERS (default - always started)
# ==========================================================================
# LUX C-Chain Explorer (mainnet, Chain ID: 96369)
explorer-lux:
<<: *blockscout-common
container_name: explorer-lux
command: sh -c "bin/blockscout eval 'Elixir.Explorer.ReleaseTasks.create_and_migrate()' && bin/blockscout start"
environment:
ETHEREUM_JSONRPC_VARIANT: geth
ETHEREUM_JSONRPC_HTTP_URL: ${MAINNET_RPC}/v1/chain/c/rpc
ETHEREUM_JSONRPC_TRACE_URL: ${MAINNET_RPC}/v1/chain/c/rpc
ETHEREUM_JSONRPC_WS_URL: ${MAINNET_WS:-ws://137.184.247.245:9630}/v1/chain/c/ws
DATABASE_URL: postgresql://${POSTGRES_USER:-postgres}:${POSTGRES_PASSWORD:-postgres}@postgres:5432/explorer_lux
NETWORK: LUX
SUBNETWORK: C-Chain
COIN: LUX
COIN_NAME: LUX
CHAIN_ID: "96369"
POOL_SIZE: "5"
ACCOUNT_POOL_SIZE: "2"
ECTO_USE_SSL: "false"
HEART_BEAT_TIMEOUT: "30"
BLOCKSCOUT_HOST: explorer.lux.network
BLOCKSCOUT_PROTOCOL: https
DISABLE_EXCHANGE_RATES: "true"
CHECKSUM_FUNCTION: eth
SECRET_KEY_BASE: ${SECRET_KEY_BASE:-RMgI4C1HSkxsEjdhtGMfwAHfyT6CKWXOgzCboJflfSm4jeAlic52io05KB6mqzc5}
ports:
- "4010:4000"
# Zoo Explorer (mainnet, Chain ID: 200200)
explorer-zoo:
<<: *blockscout-common
container_name: explorer-zoo
command: sh -c "bin/blockscout eval 'Elixir.Explorer.ReleaseTasks.create_and_migrate()' && bin/blockscout start"
environment:
ETHEREUM_JSONRPC_VARIANT: geth
ETHEREUM_JSONRPC_HTTP_URL: ${MAINNET_RPC}/v1/chain/${ZOO_MAINNET_BC:-26QT4oQvjup5vhH5ifmwisH9MTeHquWgJDZC9GvynLthhVCDh9}/rpc
ETHEREUM_JSONRPC_TRACE_URL: ${MAINNET_RPC}/v1/chain/${ZOO_MAINNET_BC:-26QT4oQvjup5vhH5ifmwisH9MTeHquWgJDZC9GvynLthhVCDh9}/rpc
DATABASE_URL: postgresql://${POSTGRES_USER:-postgres}:${POSTGRES_PASSWORD:-postgres}@postgres:5432/explorer_zoo
NETWORK: Zoo
SUBNETWORK: Zoo Network
COIN: ZOO
COIN_NAME: ZOO
CHAIN_ID: "200200"
POOL_SIZE: "5"
ACCOUNT_POOL_SIZE: "2"
ECTO_USE_SSL: "false"
DISABLE_EXCHANGE_RATES: "true"
CHECKSUM_FUNCTION: eth
SECRET_KEY_BASE: ${SECRET_KEY_BASE:-RMgI4C1HSkxsEjdhtGMfwAHfyT6CKWXOgzCboJflfSm4jeAlic52io05KB6mqzc5}
ports:
- "4011:4000"
# Hanzo AI Explorer (mainnet, Chain ID: 36963)
explorer-hanzo:
<<: *blockscout-common
container_name: explorer-hanzo
command: sh -c "bin/blockscout eval 'Elixir.Explorer.ReleaseTasks.create_and_migrate()' && bin/blockscout start"
environment:
ETHEREUM_JSONRPC_VARIANT: geth
ETHEREUM_JSONRPC_HTTP_URL: ${MAINNET_RPC}/v1/chain/${HANZO_MAINNET_BC:-U846mKHnTq7KcVV3HFbXn2CnEDgPRiXDZBpFnnFkjiQGFjbhG}/rpc
ETHEREUM_JSONRPC_TRACE_URL: ${MAINNET_RPC}/v1/chain/${HANZO_MAINNET_BC:-U846mKHnTq7KcVV3HFbXn2CnEDgPRiXDZBpFnnFkjiQGFjbhG}/rpc
DATABASE_URL: postgresql://${POSTGRES_USER:-postgres}:${POSTGRES_PASSWORD:-postgres}@postgres:5432/explorer_hanzo
NETWORK: Hanzo
SUBNETWORK: AI Chain
COIN: AI
COIN_NAME: AI
CHAIN_ID: "36963"
POOL_SIZE: "5"
ACCOUNT_POOL_SIZE: "2"
ECTO_USE_SSL: "false"
DISABLE_EXCHANGE_RATES: "true"
CHECKSUM_FUNCTION: eth
SECRET_KEY_BASE: ${SECRET_KEY_BASE:-RMgI4C1HSkxsEjdhtGMfwAHfyT6CKWXOgzCboJflfSm4jeAlic52io05KB6mqzc5}
ports:
- "4012:4000"
# SPC Explorer (mainnet, Chain ID: 36911)
explorer-spc:
<<: *blockscout-common
container_name: explorer-spc
command: sh -c "bin/blockscout eval 'Elixir.Explorer.ReleaseTasks.create_and_migrate()' && bin/blockscout start"
environment:
ETHEREUM_JSONRPC_VARIANT: geth
ETHEREUM_JSONRPC_HTTP_URL: ${MAINNET_RPC}/v1/chain/${SPC_MAINNET_BC:-2UiqUeusJ3QJenHfXbJvoz9m2BL3sd14hrohaX1HfxtRnadMob}/rpc
ETHEREUM_JSONRPC_TRACE_URL: ${MAINNET_RPC}/v1/chain/${SPC_MAINNET_BC:-2UiqUeusJ3QJenHfXbJvoz9m2BL3sd14hrohaX1HfxtRnadMob}/rpc
DATABASE_URL: postgresql://${POSTGRES_USER:-postgres}:${POSTGRES_PASSWORD:-postgres}@postgres:5432/explorer_spc
NETWORK: SPC
SUBNETWORK: Sparkle Pony Club
COIN: SPC
COIN_NAME: SPC
CHAIN_ID: "36911"
POOL_SIZE: "5"
ACCOUNT_POOL_SIZE: "2"
ECTO_USE_SSL: "false"
DISABLE_EXCHANGE_RATES: "true"
CHECKSUM_FUNCTION: eth
SECRET_KEY_BASE: ${SECRET_KEY_BASE:-RMgI4C1HSkxsEjdhtGMfwAHfyT6CKWXOgzCboJflfSm4jeAlic52io05KB6mqzc5}
ports:
- "4013:4000"
# Pars Explorer (mainnet, Chain ID: 36900)
explorer-pars:
<<: *blockscout-common
container_name: explorer-pars
command: sh -c "bin/blockscout eval 'Elixir.Explorer.ReleaseTasks.create_and_migrate()' && bin/blockscout start"
environment:
ETHEREUM_JSONRPC_VARIANT: geth
ETHEREUM_JSONRPC_HTTP_URL: ${MAINNET_RPC}/v1/chain/${PARS_MAINNET_BC:-2ntyMHLYEeoaK2RePDJbFsKGQBsKFgZTWEWNCdkD74bfGEZtLF}/rpc
ETHEREUM_JSONRPC_TRACE_URL: ${MAINNET_RPC}/v1/chain/${PARS_MAINNET_BC:-2ntyMHLYEeoaK2RePDJbFsKGQBsKFgZTWEWNCdkD74bfGEZtLF}/rpc
DATABASE_URL: postgresql://${POSTGRES_USER:-postgres}:${POSTGRES_PASSWORD:-postgres}@postgres:5432/explorer_pars
NETWORK: Pars
SUBNETWORK: Pars Network
COIN: PARS
COIN_NAME: PARS
CHAIN_ID: "36900"
POOL_SIZE: "5"
ACCOUNT_POOL_SIZE: "2"
ECTO_USE_SSL: "false"
DISABLE_EXCHANGE_RATES: "true"
CHECKSUM_FUNCTION: eth
SECRET_KEY_BASE: ${SECRET_KEY_BASE:-RMgI4C1HSkxsEjdhtGMfwAHfyT6CKWXOgzCboJflfSm4jeAlic52io05KB6mqzc5}
ports:
- "4014:4000"
# ==========================================================================
# MAINNET EXPLORER FRONTENDS (Blockscout UI)
# ==========================================================================
frontend-lux:
image: ghcr.io/luxfi/explore:0.1.0
container_name: frontend-lux
restart: unless-stopped
networks:
- services
environment:
NEXT_PUBLIC_APP_HOST: ${SERVICES_HOST:-143.110.158.161}
NEXT_PUBLIC_APP_PORT: "3010"
NEXT_PUBLIC_APP_PROTOCOL: http
NEXT_PUBLIC_API_HOST: ${SERVICES_HOST:-143.110.158.161}
NEXT_PUBLIC_API_PORT: "4010"
NEXT_PUBLIC_API_PROTOCOL: http
NEXT_PUBLIC_API_WEBSOCKET_PROTOCOL: ws
NEXT_PUBLIC_NETWORK_NAME: LUX
NEXT_PUBLIC_NETWORK_SHORT_NAME: LUX
NEXT_PUBLIC_NETWORK_ID: "96369"
NEXT_PUBLIC_NETWORK_CURRENCY_NAME: LUX
NEXT_PUBLIC_NETWORK_CURRENCY_SYMBOL: LUX
NEXT_PUBLIC_NETWORK_CURRENCY_DECIMALS: "18"
NEXT_PUBLIC_HOMEPAGE_CHARTS: "['daily_txs']"
NEXT_PUBLIC_IS_TESTNET: "false"
NEXT_PUBLIC_HAS_BEACON_CHAIN: "false"
ports:
- "3010:3000"
frontend-zoo:
image: ghcr.io/luxfi/explore:0.1.0
container_name: frontend-zoo
restart: unless-stopped
networks:
- services
environment:
NEXT_PUBLIC_APP_HOST: ${SERVICES_HOST:-143.110.158.161}
NEXT_PUBLIC_APP_PORT: "3011"
NEXT_PUBLIC_APP_PROTOCOL: http
NEXT_PUBLIC_API_HOST: ${SERVICES_HOST:-143.110.158.161}
NEXT_PUBLIC_API_PORT: "4011"
NEXT_PUBLIC_API_PROTOCOL: http
NEXT_PUBLIC_API_WEBSOCKET_PROTOCOL: ws
NEXT_PUBLIC_NETWORK_NAME: Zoo
NEXT_PUBLIC_NETWORK_SHORT_NAME: ZOO
NEXT_PUBLIC_NETWORK_ID: "200200"
NEXT_PUBLIC_NETWORK_CURRENCY_NAME: ZOO
NEXT_PUBLIC_NETWORK_CURRENCY_SYMBOL: ZOO
NEXT_PUBLIC_NETWORK_CURRENCY_DECIMALS: "18"
NEXT_PUBLIC_IS_TESTNET: "false"
NEXT_PUBLIC_HAS_BEACON_CHAIN: "false"
ports:
- "3011:3000"
frontend-hanzo:
image: ghcr.io/luxfi/explore:0.1.0
container_name: frontend-hanzo
restart: unless-stopped
networks:
- services
environment:
NEXT_PUBLIC_APP_HOST: ${SERVICES_HOST:-143.110.158.161}
NEXT_PUBLIC_APP_PORT: "3012"
NEXT_PUBLIC_APP_PROTOCOL: http
NEXT_PUBLIC_API_HOST: ${SERVICES_HOST:-143.110.158.161}
NEXT_PUBLIC_API_PORT: "4012"
NEXT_PUBLIC_API_PROTOCOL: http
NEXT_PUBLIC_API_WEBSOCKET_PROTOCOL: ws
NEXT_PUBLIC_NETWORK_NAME: Hanzo
NEXT_PUBLIC_NETWORK_SHORT_NAME: HANZO
NEXT_PUBLIC_NETWORK_ID: "36963"
NEXT_PUBLIC_NETWORK_CURRENCY_NAME: AI
NEXT_PUBLIC_NETWORK_CURRENCY_SYMBOL: AI
NEXT_PUBLIC_NETWORK_CURRENCY_DECIMALS: "18"
NEXT_PUBLIC_IS_TESTNET: "false"
NEXT_PUBLIC_HAS_BEACON_CHAIN: "false"
ports:
- "3012:3000"
frontend-spc:
image: ghcr.io/luxfi/explore:0.1.0
container_name: frontend-spc
restart: unless-stopped
networks:
- services
environment:
NEXT_PUBLIC_APP_HOST: ${SERVICES_HOST:-143.110.158.161}
NEXT_PUBLIC_APP_PORT: "3013"
NEXT_PUBLIC_APP_PROTOCOL: http
NEXT_PUBLIC_API_HOST: ${SERVICES_HOST:-143.110.158.161}
NEXT_PUBLIC_API_PORT: "4013"
NEXT_PUBLIC_API_PROTOCOL: http
NEXT_PUBLIC_API_WEBSOCKET_PROTOCOL: ws
NEXT_PUBLIC_NETWORK_NAME: SPC
NEXT_PUBLIC_NETWORK_SHORT_NAME: SPC
NEXT_PUBLIC_NETWORK_ID: "36911"
NEXT_PUBLIC_NETWORK_CURRENCY_NAME: SPC
NEXT_PUBLIC_NETWORK_CURRENCY_SYMBOL: SPC
NEXT_PUBLIC_NETWORK_CURRENCY_DECIMALS: "18"
NEXT_PUBLIC_IS_TESTNET: "false"
NEXT_PUBLIC_HAS_BEACON_CHAIN: "false"
ports:
- "3013:3000"
frontend-pars:
image: ghcr.io/luxfi/explore:0.1.0
container_name: frontend-pars
restart: unless-stopped
networks:
- services
environment:
NEXT_PUBLIC_APP_HOST: ${SERVICES_HOST:-143.110.158.161}
NEXT_PUBLIC_APP_PORT: "3014"
NEXT_PUBLIC_APP_PROTOCOL: http
NEXT_PUBLIC_API_HOST: ${SERVICES_HOST:-143.110.158.161}
NEXT_PUBLIC_API_PORT: "4014"
NEXT_PUBLIC_API_PROTOCOL: http
NEXT_PUBLIC_API_WEBSOCKET_PROTOCOL: ws
NEXT_PUBLIC_NETWORK_NAME: Pars
NEXT_PUBLIC_NETWORK_SHORT_NAME: PARS
NEXT_PUBLIC_NETWORK_ID: "36900"
NEXT_PUBLIC_NETWORK_CURRENCY_NAME: PARS
NEXT_PUBLIC_NETWORK_CURRENCY_SYMBOL: PARS
NEXT_PUBLIC_NETWORK_CURRENCY_DECIMALS: "18"
NEXT_PUBLIC_IS_TESTNET: "false"
NEXT_PUBLIC_HAS_BEACON_CHAIN: "false"
ports:
- "3014:3000"
# ==========================================================================
# TESTNET EXPLORERS (profile: testnet)
# ==========================================================================
explorer-lux-testnet:
<<: *blockscout-common
container_name: explorer-lux-testnet
profiles: ["testnet", "all"]
command: sh -c "bin/blockscout eval 'Elixir.Explorer.ReleaseTasks.create_and_migrate()' && bin/blockscout start"
environment:
ETHEREUM_JSONRPC_VARIANT: geth
ETHEREUM_JSONRPC_HTTP_URL: ${TESTNET_RPC}/v1/chain/c/rpc
ETHEREUM_JSONRPC_TRACE_URL: ${TESTNET_RPC}/v1/chain/c/rpc
DATABASE_URL: postgresql://${POSTGRES_USER:-postgres}:${POSTGRES_PASSWORD:-postgres}@postgres:5432/explorer_lux_testnet
NETWORK: LUX
SUBNETWORK: Testnet C-Chain
COIN: LUX
COIN_NAME: LUX
CHAIN_ID: "96368"
POOL_SIZE: "5"
ACCOUNT_POOL_SIZE: "2"
ECTO_USE_SSL: "false"
DISABLE_EXCHANGE_RATES: "true"
CHECKSUM_FUNCTION: eth
SECRET_KEY_BASE: ${SECRET_KEY_BASE:-RMgI4C1HSkxsEjdhtGMfwAHfyT6CKWXOgzCboJflfSm4jeAlic52io05KB6mqzc5}
ports:
- "4020:4000"
explorer-zoo-testnet:
<<: *blockscout-common
container_name: explorer-zoo-testnet
profiles: ["testnet", "all"]
command: sh -c "bin/blockscout eval 'Elixir.Explorer.ReleaseTasks.create_and_migrate()' && bin/blockscout start"
environment:
ETHEREUM_JSONRPC_VARIANT: geth
ETHEREUM_JSONRPC_HTTP_URL: ${TESTNET_RPC}/v1/chain/${ZOO_TESTNET_BC:-2VCQEgaBuvvSDK3qbkC3khHU5zzrFxbkbZ1ecN2YejJQ21j1Bt}/rpc
ETHEREUM_JSONRPC_TRACE_URL: ${TESTNET_RPC}/v1/chain/${ZOO_TESTNET_BC:-2VCQEgaBuvvSDK3qbkC3khHU5zzrFxbkbZ1ecN2YejJQ21j1Bt}/rpc
DATABASE_URL: postgresql://${POSTGRES_USER:-postgres}:${POSTGRES_PASSWORD:-postgres}@postgres:5432/explorer_zoo_testnet
NETWORK: Zoo
SUBNETWORK: Zoo Testnet
COIN: ZOO
COIN_NAME: ZOO
CHAIN_ID: "200201"
POOL_SIZE: "5"
ACCOUNT_POOL_SIZE: "2"
ECTO_USE_SSL: "false"
DISABLE_EXCHANGE_RATES: "true"
CHECKSUM_FUNCTION: eth
SECRET_KEY_BASE: ${SECRET_KEY_BASE:-RMgI4C1HSkxsEjdhtGMfwAHfyT6CKWXOgzCboJflfSm4jeAlic52io05KB6mqzc5}
ports:
- "4021:4000"
explorer-hanzo-testnet:
<<: *blockscout-common
container_name: explorer-hanzo-testnet
profiles: ["testnet", "all"]
command: sh -c "bin/blockscout eval 'Elixir.Explorer.ReleaseTasks.create_and_migrate()' && bin/blockscout start"
environment:
ETHEREUM_JSONRPC_VARIANT: geth
ETHEREUM_JSONRPC_HTTP_URL: ${TESTNET_RPC}/v1/chain/${HANZO_TESTNET_BC:-2gh9VQ6inQT1JNCjGqB6S2JXauXzcqKQGFh3rNkbzmBGkoLifg}/rpc
ETHEREUM_JSONRPC_TRACE_URL: ${TESTNET_RPC}/v1/chain/${HANZO_TESTNET_BC:-2gh9VQ6inQT1JNCjGqB6S2JXauXzcqKQGFh3rNkbzmBGkoLifg}/rpc
DATABASE_URL: postgresql://${POSTGRES_USER:-postgres}:${POSTGRES_PASSWORD:-postgres}@postgres:5432/explorer_hanzo_testnet
NETWORK: Hanzo
SUBNETWORK: Hanzo Testnet
COIN: AI
COIN_NAME: AI
CHAIN_ID: "36962"
POOL_SIZE: "5"
ACCOUNT_POOL_SIZE: "2"
ECTO_USE_SSL: "false"
DISABLE_EXCHANGE_RATES: "true"
CHECKSUM_FUNCTION: eth
SECRET_KEY_BASE: ${SECRET_KEY_BASE:-RMgI4C1HSkxsEjdhtGMfwAHfyT6CKWXOgzCboJflfSm4jeAlic52io05KB6mqzc5}
ports:
- "4022:4000"
explorer-spc-testnet:
<<: *blockscout-common
container_name: explorer-spc-testnet
profiles: ["testnet", "all"]
command: sh -c "bin/blockscout eval 'Elixir.Explorer.ReleaseTasks.create_and_migrate()' && bin/blockscout start"
environment:
ETHEREUM_JSONRPC_VARIANT: geth
ETHEREUM_JSONRPC_HTTP_URL: ${TESTNET_RPC}/v1/chain/${SPC_TESTNET_BC:-2C3h43bgrgze7zmZBd1i9fzyzPSgcwb662sdCogvqcquthhDQk}/rpc
ETHEREUM_JSONRPC_TRACE_URL: ${TESTNET_RPC}/v1/chain/${SPC_TESTNET_BC:-2C3h43bgrgze7zmZBd1i9fzyzPSgcwb662sdCogvqcquthhDQk}/rpc
DATABASE_URL: postgresql://${POSTGRES_USER:-postgres}:${POSTGRES_PASSWORD:-postgres}@postgres:5432/explorer_spc_testnet
NETWORK: SPC
SUBNETWORK: SPC Testnet
COIN: SPC
COIN_NAME: SPC
CHAIN_ID: "36910"
POOL_SIZE: "5"
ACCOUNT_POOL_SIZE: "2"
ECTO_USE_SSL: "false"
DISABLE_EXCHANGE_RATES: "true"
CHECKSUM_FUNCTION: eth
SECRET_KEY_BASE: ${SECRET_KEY_BASE:-RMgI4C1HSkxsEjdhtGMfwAHfyT6CKWXOgzCboJflfSm4jeAlic52io05KB6mqzc5}
ports:
- "4023:4000"
explorer-pars-testnet:
<<: *blockscout-common
container_name: explorer-pars-testnet
profiles: ["testnet", "all"]
command: sh -c "bin/blockscout eval 'Elixir.Explorer.ReleaseTasks.create_and_migrate()' && bin/blockscout start"
environment:
ETHEREUM_JSONRPC_VARIANT: geth
ETHEREUM_JSONRPC_HTTP_URL: ${TESTNET_RPC}/v1/chain/${PARS_TESTNET_BC:-2EsDHJUotqGYo9dSD2RDmPhXpmFNZGV4YP15T8mqmRAtq3Upti}/rpc
ETHEREUM_JSONRPC_TRACE_URL: ${TESTNET_RPC}/v1/chain/${PARS_TESTNET_BC:-2EsDHJUotqGYo9dSD2RDmPhXpmFNZGV4YP15T8mqmRAtq3Upti}/rpc
DATABASE_URL: postgresql://${POSTGRES_USER:-postgres}:${POSTGRES_PASSWORD:-postgres}@postgres:5432/explorer_pars_testnet
NETWORK: Pars
SUBNETWORK: Pars Testnet
COIN: PARS
COIN_NAME: PARS
CHAIN_ID: "494948"
POOL_SIZE: "5"
ACCOUNT_POOL_SIZE: "2"
ECTO_USE_SSL: "false"
DISABLE_EXCHANGE_RATES: "true"
CHECKSUM_FUNCTION: eth
SECRET_KEY_BASE: ${SECRET_KEY_BASE:-RMgI4C1HSkxsEjdhtGMfwAHfyT6CKWXOgzCboJflfSm4jeAlic52io05KB6mqzc5}
ports:
- "4024:4000"
# ==========================================================================
# DEVNET EXPLORERS (profile: devnet)
# ==========================================================================
explorer-lux-devnet:
<<: *blockscout-common
container_name: explorer-lux-devnet
profiles: ["devnet", "all"]
command: sh -c "bin/blockscout eval 'Elixir.Explorer.ReleaseTasks.create_and_migrate()' && bin/blockscout start"
environment:
ETHEREUM_JSONRPC_VARIANT: geth
ETHEREUM_JSONRPC_HTTP_URL: ${DEVNET_RPC}/v1/chain/c/rpc
ETHEREUM_JSONRPC_TRACE_URL: ${DEVNET_RPC}/v1/chain/c/rpc
DATABASE_URL: postgresql://${POSTGRES_USER:-postgres}:${POSTGRES_PASSWORD:-postgres}@postgres:5432/explorer_lux_devnet
NETWORK: LUX
SUBNETWORK: Devnet C-Chain
COIN: LUX
COIN_NAME: LUX
CHAIN_ID: "96367"
POOL_SIZE: "5"
ACCOUNT_POOL_SIZE: "2"
ECTO_USE_SSL: "false"
DISABLE_EXCHANGE_RATES: "true"
CHECKSUM_FUNCTION: eth
SECRET_KEY_BASE: ${SECRET_KEY_BASE:-RMgI4C1HSkxsEjdhtGMfwAHfyT6CKWXOgzCboJflfSm4jeAlic52io05KB6mqzc5}
ports:
- "4030:4000"
explorer-zoo-devnet:
<<: *blockscout-common
container_name: explorer-zoo-devnet
profiles: ["devnet", "all"]
command: sh -c "bin/blockscout eval 'Elixir.Explorer.ReleaseTasks.create_and_migrate()' && bin/blockscout start"
environment:
ETHEREUM_JSONRPC_VARIANT: geth
ETHEREUM_JSONRPC_HTTP_URL: ${DEVNET_RPC}/v1/chain/${ZOO_DEVNET_BC:-XAdZgnha5if6N5FdnLupvtXbtLzYVsuekKqEcnnARRjhm4AEZ}/rpc
ETHEREUM_JSONRPC_TRACE_URL: ${DEVNET_RPC}/v1/chain/${ZOO_DEVNET_BC:-XAdZgnha5if6N5FdnLupvtXbtLzYVsuekKqEcnnARRjhm4AEZ}/rpc
DATABASE_URL: postgresql://${POSTGRES_USER:-postgres}:${POSTGRES_PASSWORD:-postgres}@postgres:5432/explorer_zoo_devnet
NETWORK: Zoo
SUBNETWORK: Zoo Devnet
COIN: ZOO
COIN_NAME: ZOO
CHAIN_ID: "200202"
POOL_SIZE: "5"
ACCOUNT_POOL_SIZE: "2"
ECTO_USE_SSL: "false"
DISABLE_EXCHANGE_RATES: "true"
CHECKSUM_FUNCTION: eth
SECRET_KEY_BASE: ${SECRET_KEY_BASE:-RMgI4C1HSkxsEjdhtGMfwAHfyT6CKWXOgzCboJflfSm4jeAlic52io05KB6mqzc5}
ports:
- "4031:4000"
explorer-hanzo-devnet:
<<: *blockscout-common
container_name: explorer-hanzo-devnet
profiles: ["devnet", "all"]
command: sh -c "bin/blockscout eval 'Elixir.Explorer.ReleaseTasks.create_and_migrate()' && bin/blockscout start"
environment:
ETHEREUM_JSONRPC_VARIANT: geth
ETHEREUM_JSONRPC_HTTP_URL: ${DEVNET_RPC}/v1/chain/${HANZO_DEVNET_BC:-2DAFG41Dn7TGH5ZDVpZb6p7YTGQCPxPGCYD9LRiTi85XZDp4He}/rpc
ETHEREUM_JSONRPC_TRACE_URL: ${DEVNET_RPC}/v1/chain/${HANZO_DEVNET_BC:-2DAFG41Dn7TGH5ZDVpZb6p7YTGQCPxPGCYD9LRiTi85XZDp4He}/rpc
DATABASE_URL: postgresql://${POSTGRES_USER:-postgres}:${POSTGRES_PASSWORD:-postgres}@postgres:5432/explorer_hanzo_devnet
NETWORK: Hanzo
SUBNETWORK: Hanzo Devnet
COIN: AI
COIN_NAME: AI
CHAIN_ID: "36964"
POOL_SIZE: "5"
ACCOUNT_POOL_SIZE: "2"
ECTO_USE_SSL: "false"
DISABLE_EXCHANGE_RATES: "true"
CHECKSUM_FUNCTION: eth
SECRET_KEY_BASE: ${SECRET_KEY_BASE:-RMgI4C1HSkxsEjdhtGMfwAHfyT6CKWXOgzCboJflfSm4jeAlic52io05KB6mqzc5}
ports:
- "4032:4000"
explorer-spc-devnet:
<<: *blockscout-common
container_name: explorer-spc-devnet
profiles: ["devnet", "all"]
command: sh -c "bin/blockscout eval 'Elixir.Explorer.ReleaseTasks.create_and_migrate()' && bin/blockscout start"
environment:
ETHEREUM_JSONRPC_VARIANT: geth
ETHEREUM_JSONRPC_HTTP_URL: ${DEVNET_RPC}/v1/chain/${SPC_DEVNET_BC:-21Uw284EpELtJYa653fwmgCDJCHAusAARSkSoKyiFydfCQoPz2}/rpc
ETHEREUM_JSONRPC_TRACE_URL: ${DEVNET_RPC}/v1/chain/${SPC_DEVNET_BC:-21Uw284EpELtJYa653fwmgCDJCHAusAARSkSoKyiFydfCQoPz2}/rpc
DATABASE_URL: postgresql://${POSTGRES_USER:-postgres}:${POSTGRES_PASSWORD:-postgres}@postgres:5432/explorer_spc_devnet
NETWORK: SPC
SUBNETWORK: SPC Devnet
COIN: SPC
COIN_NAME: SPC
CHAIN_ID: "36912"
POOL_SIZE: "5"
ACCOUNT_POOL_SIZE: "2"
ECTO_USE_SSL: "false"
DISABLE_EXCHANGE_RATES: "true"
CHECKSUM_FUNCTION: eth
SECRET_KEY_BASE: ${SECRET_KEY_BASE:-RMgI4C1HSkxsEjdhtGMfwAHfyT6CKWXOgzCboJflfSm4jeAlic52io05KB6mqzc5}
ports:
- "4033:4000"
explorer-pars-devnet:
<<: *blockscout-common
container_name: explorer-pars-devnet
profiles: ["devnet", "all"]
command: sh -c "bin/blockscout eval 'Elixir.Explorer.ReleaseTasks.create_and_migrate()' && bin/blockscout start"
environment:
ETHEREUM_JSONRPC_VARIANT: geth
ETHEREUM_JSONRPC_HTTP_URL: ${DEVNET_RPC}/v1/chain/${PARS_DEVNET_BC:-3dW6f5woTocMnLqDcNY73DR9TYeLEZZx6M6uVmKTb45zraGSF}/rpc
ETHEREUM_JSONRPC_TRACE_URL: ${DEVNET_RPC}/v1/chain/${PARS_DEVNET_BC:-3dW6f5woTocMnLqDcNY73DR9TYeLEZZx6M6uVmKTb45zraGSF}/rpc
DATABASE_URL: postgresql://${POSTGRES_USER:-postgres}:${POSTGRES_PASSWORD:-postgres}@postgres:5432/explorer_pars_devnet
NETWORK: Pars
SUBNETWORK: Pars Devnet
COIN: PARS
COIN_NAME: PARS
CHAIN_ID: "36914"
POOL_SIZE: "5"
ACCOUNT_POOL_SIZE: "2"
ECTO_USE_SSL: "false"
DISABLE_EXCHANGE_RATES: "true"
CHECKSUM_FUNCTION: eth
SECRET_KEY_BASE: ${SECRET_KEY_BASE:-RMgI4C1HSkxsEjdhtGMfwAHfyT6CKWXOgzCboJflfSm4jeAlic52io05KB6mqzc5}
ports:
- "4034:4000"
# ==========================================================================
# GRAPH NODE (profile: graph)
# ==========================================================================
ipfs:
image: ipfs/kubo:latest
container_name: lux-ipfs
restart: unless-stopped
profiles: ["graph", "all"]
environment:
IPFS_PROFILE: server
volumes:
- ipfs-data:/data/ipfs
ports:
- "5001:5001"
- "8080:8080"
networks:
- services
command: daemon --migrate=true --enable-pubsub-experiment
graph-node:
image: graphprotocol/graph-node:latest
container_name: lux-graph-node
restart: unless-stopped
profiles: ["graph", "all"]
environment:
postgres_host: postgres
postgres_port: "5432"
postgres_user: ${POSTGRES_USER:-postgres}
postgres_pass: ${POSTGRES_PASSWORD:-postgres}
postgres_db: graph_node
ipfs: ipfs:5001
ethereum: "lux:${MAINNET_RPC}/v1/chain/c/rpc"
GRAPH_LOG: info
ports:
- "8000:8000"
- "8001:8001"
- "8020:8020"
networks:
- services
depends_on:
postgres:
condition: service_healthy
# ==========================================================================
# FRONTEND UIs (profile: ui)
# ==========================================================================
lux-exchange:
image: ghcr.io/luxfi/exchange:0.1.0
container_name: lux-exchange
restart: unless-stopped
profiles: ["ui", "all"]
ports:
- "3200:3000"
environment:
NODE_ENV: production
NEXT_PUBLIC_CHAIN_ID: "96369"
NEXT_PUBLIC_NETWORK_URL: ${MAINNET_RPC}/v1/chain/c/rpc
NEXT_PUBLIC_EXPLORER_URL: https://explorer.lux.network
networks:
- services
lux-wallet:
image: ghcr.io/luxfi/wallet:0.1.0
container_name: lux-wallet
restart: unless-stopped
profiles: ["ui", "all"]
ports:
- "3300:3000"
environment:
NODE_ENV: production
NEXT_PUBLIC_CHAIN_ID: "96369"
NEXT_PUBLIC_RPC_URL: ${MAINNET_RPC}/v1/chain/c/rpc
NEXT_PUBLIC_EXPLORER_URL: https://explorer.lux.network
networks:
- services
lux-bridge:
image: ghcr.io/luxfi/bridge:0.1.0
container_name: lux-bridge-ui
restart: unless-stopped
profiles: ["ui", "all"]
ports:
- "3400:3000"
environment:
NODE_ENV: production
NEXT_PUBLIC_CHAIN_ID: "96369"
NEXT_PUBLIC_RPC_URL: ${MAINNET_RPC}/v1/chain/c/rpc
networks:
- services
# Pricing API
# ghcr.io/luxfi/price, the same image deploy/lux-cloud/price.yaml pins. The
# old `ghcr.io/luxfi/pricing:0.1.0` was dead twice over: that tag 404s, and
# `build: ./pricing` named a directory that does not exist in this repo.
price:
image: ghcr.io/luxfi/price:v1.0.0
container_name: lux-price
restart: unless-stopped
profiles: ["ui", "all"]
environment:
COINGECKO_API_KEY: ${COINGECKO_API_KEY:-demo}
PORT: "8080"
ports:
- "8085:8080"
networks:
- services