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]>
694 lines
26 KiB
YAML
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
|