Files
universe/k8s/lux-devnet/explorer.yaml
T

257 lines
8.0 KiB
YAML

# Regenerated from the LIVE explorer-chains ConfigMap on do-sfo3-lux-k8s.
# Live is the source here: nothing reconciles k8s/, so this file drifts BEHIND
# the cluster as often as ahead, and it had drifted badly -- it was missing the
# osage chain entirely, missing every graph: block, carrying a pars chain_id
# (494950) the chain does not use, and holding a luxd-headless URL for hanzo
# where the cluster runs the one that works. Applying it would have been a
# downgrade, not a fix.
---
###############################################################################
# Unified Lux Explorer — Devnet
#
# Single Go binary `ghcr.io/luxfi/explorer:1.2.11` that indexes every EVM
# non-primary chain on this network into per-chain SQLite databases under /data/{slug}
# and serves the embedded SPA + /v1/indexer/{slug}/* + /v1/graph/* +
# /v1/explorer/admin/* + /v1/explorer/realtime on :8090.
#
# Replaces Blockscout (indexer-{slug}-indexer Deployments) + their
# per-chain PostgreSQL StatefulSets (indexer-{slug}-pg) + the
# lux-explorer/explorer-devnet-v2 Deployment. Postgres-free indexer.
#
# zoo app chain EVM is not bootstrapped on devnet luxd-* nodes (verified
# 2026-05-24: /v1/chain/zoo/rpc returns 404). Declared with enabled:false
# until the zoo app chain EVM is tracked on devnet validators.
###############################################################################
apiVersion: v1
kind: ConfigMap
metadata:
name: explorer-chains
namespace: lux-devnet
labels:
app: explorer
network: devnet
data:
chains.yaml: |
data_dir: /data
http_addr: :8090
static_dir: /etc/explorer/static
brand_default:
name: Lux Explorer
coin: LUX
accent_color: "#5cf"
icon_file: /etc/explorer/static/icon-lux.svg
logo_file: /etc/explorer/static/logo-lux.svg
icon_url: /icon.svg
logo_url: /logo.svg
networks:
- { label: Mainnet, domain: explore.lux.network, chain_id: 96369 }
- { label: Testnet, domain: testnet.explore.lux.network, chain_id: 96368 }
- { label: Devnet, domain: devnet.explore.lux.network, chain_id: 96367 }
# Per-chain RPC URLs use luxd's chain.name aliases (hanzo/zoo/pars/spc/osage)
# registered by chain manager at VM init (see node/chains/manager.go:752).
# No literal blockchain IDs anywhere — survives re-bootstraps without edits.
chains:
- slug: cchain
name: Lux C-Chain
chain_id: 96367
type: evm
rpc: http://luxd-headless.lux-devnet.svc.cluster.local:9650/v1/chain/C/rpc
coin: LUX
enabled: true
default: true
indexer: { poll_interval: 30s }
# DEX settlement precompile (0x9999): logs indexed into the `dex` (CLOB) subgraph as Order/Market/Fill.
pool_manager: "0x0000000000000000000000000000000000009999"
graph:
enabled: true
subgraphs:
- { name: amm, schema: amm, enabled: true }
- { name: dex, schema: dex, enabled: true }
brand:
name: Lux C-Chain
coin: LUX
accent_color: "#5cf"
icon_file: /etc/explorer/static/icon-lux.svg
logo_file: /etc/explorer/static/logo-lux.svg
- slug: hanzo
name: Hanzo
chain_id: 36964
type: evm
rpc: http://luxd-headless.lux-devnet.svc.cluster.local:9650/v1/chain/hanzo/rpc
coin: AI
enabled: false
indexer: { poll_interval: 30s }
graph:
enabled: true
subgraphs:
- { name: amm, schema: amm, enabled: true }
brand: { name: Hanzo, coin: AI, accent_color: "#0b1220" }
- slug: zoo
name: Zoo
chain_id: 200202
type: evm
rpc: http://luxd-headless.lux-devnet.svc.cluster.local:9650/v1/chain/zoo/rpc
coin: ZOO
enabled: false
indexer: { poll_interval: 30s }
graph:
enabled: true
subgraphs:
- { name: amm, schema: amm, enabled: true }
brand:
name: Zoo
coin: ZOO
accent_color: "#FCF006"
icon_file: /etc/explorer/static/icon-zoo.svg
logo_file: /etc/explorer/static/logo-zoo.svg
- slug: pars
name: Pars
chain_id: 7072
type: evm
rpc: http://luxd-headless.lux-devnet.svc.cluster.local:9650/v1/chain/pars/rpc
coin: PARS
enabled: false
indexer: { poll_interval: 30s }
graph:
enabled: true
subgraphs:
- { name: amm, schema: amm, enabled: true }
brand: { name: Pars, coin: PARS, accent_color: "#15803d" }
- slug: spc
name: SPC
chain_id: 36912
type: evm
rpc: http://luxd-headless.lux-devnet.svc.cluster.local:9650/v1/chain/spc/rpc
coin: SPC
enabled: false
indexer: { poll_interval: 30s }
graph:
enabled: true
subgraphs:
- { name: amm, schema: amm, enabled: true }
brand: { name: SPC, coin: SPC, accent_color: "#0ea5e9" }
- slug: osage
name: Osage
chain_id: 1873
type: evm
rpc: http://luxd-headless.lux-devnet.svc.cluster.local:9650/v1/chain/osage/rpc
coin: OSG
enabled: false
indexer: { poll_interval: 30s }
graph:
enabled: true
subgraphs:
- { name: amm, schema: amm, enabled: true }
brand: { name: Osage, coin: OSG, accent_color: "#dc2626" }
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: explorer-data
namespace: lux-devnet
labels:
app: explorer
network: devnet
spec:
accessModes: [ReadWriteOnce]
storageClassName: do-block-storage-retain
resources:
requests:
storage: 50Gi
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: explorer
namespace: lux-devnet
labels:
app: explorer
network: devnet
spec:
replicas: 1
strategy: { type: Recreate }
selector:
matchLabels:
app: explorer
network: devnet
template:
metadata:
labels:
app: explorer
network: devnet
spec:
securityContext:
runAsUser: 65532
runAsNonRoot: true
fsGroup: 65532
imagePullSecrets:
- name: ghcr-luxfi
terminationGracePeriodSeconds: 60
containers:
- name: explorer
image: ghcr.io/luxfi/explorer:1.2.11
imagePullPolicy: IfNotPresent
args: [--config=/etc/explorer/chains.yaml]
ports:
- { name: http, containerPort: 8090 }
env:
- { name: DATA_DIR, value: /data }
- { name: HTTP_ADDR, value: ":8090" }
volumeMounts:
- { name: config, mountPath: /etc/explorer, readOnly: true }
- { name: data, mountPath: /data }
resources:
requests: { cpu: 250m, memory: 512Mi }
limits: { cpu: "2", memory: 4Gi }
readinessProbe:
httpGet: { path: /health, port: http }
initialDelaySeconds: 5
periodSeconds: 10
timeoutSeconds: 5
failureThreshold: 6
livenessProbe:
httpGet: { path: /health, port: http }
initialDelaySeconds: 30
periodSeconds: 30
timeoutSeconds: 10
failureThreshold: 5
startupProbe:
httpGet: { path: /health, port: http }
initialDelaySeconds: 5
periodSeconds: 5
timeoutSeconds: 5
failureThreshold: 30
volumes:
- name: config
configMap: { name: explorer-chains }
- name: data
persistentVolumeClaim: { claimName: explorer-data }
---
apiVersion: v1
kind: Service
metadata:
name: explorer
namespace: lux-devnet
labels:
app: explorer
network: devnet
spec:
type: ClusterIP
selector:
app: explorer
network: devnet
ports:
# gateway routes hit :80 (api-gateway-gateway gateway.json); legacy
# explorer-{env}-v2 ExternalName aliases in lux-explorer hit :8090.
- { name: http, port: 80, targetPort: 8090, protocol: TCP }
- { name: http-v2, port: 8090, targetPort: 8090, protocol: TCP }