luxd moved chain APIs from /v1/bc/<alias> to /v1/chain/<alias> and deleted the
old prefix, and health moved onto typed ops at /v1/health/ops/*. Both landed in
node 1.36.181. Nothing here could move before that image existed, and the image
cannot roll out while the manifests still ask for addresses it no longer serves,
so the pin and the paths move in one commit.
What moved:
image 1.36.171 -> 1.36.181, digest with it, on devnet/testnet/mainnet
internal exchange-api, lux-hb2, rpc-tip-gate, the luxd startup script
probes /v1/health/liveness -> /v1/health/ops/liveness (bare /v1/health,
which the local compose healthcheck used, no longer routes at all)
public the devnet and testnet gateway routes
Comments that RECORD an observation keep their original spelling: a note saying
/v1/bc/zoo/rpc returned 404 on a given date is a fact about that date, and
rewriting it would make the record false. Only live addresses moved.
1.36.181 also carries chains v1.7.38, so the deployed node has the zkvm
content-derived transaction identity.
Co-authored-by: Hanzo Dev <[email protected]>
218 lines
5.4 KiB
YAML
218 lines
5.4 KiB
YAML
# Lux Explorer — luxfi/explorer (single Go binary, SPA embedded, SQLite per chain)
|
|
#
|
|
# Replaces the old Elixir/Blockscout fleet (6 deployments + Postgres) with one
|
|
# Deployment that indexes every Lux chain from a single chains.yaml. The SPA
|
|
# routes per Host header so each `explore-<chain>.lux.network` keeps its own
|
|
# brand. /v1/indexer/<slug>/* exposes the per-chain API for the matching
|
|
# `api-explore-<chain>.lux.network`.
|
|
#
|
|
# Image: ghcr.io/luxfi/explorer:1.2.2
|
|
# Port: 8090 (HTTP_ADDR)
|
|
# Data: /data SQLite per chain slug
|
|
---
|
|
apiVersion: v1
|
|
kind: Namespace
|
|
metadata:
|
|
name: lux-explorer
|
|
---
|
|
apiVersion: v1
|
|
kind: ConfigMap
|
|
metadata:
|
|
name: explorer-chains
|
|
namespace: lux-explorer
|
|
data:
|
|
chains.yaml: |
|
|
data_dir: /data
|
|
http_addr: :8090
|
|
|
|
brand_default:
|
|
name: Lux Explorer
|
|
coin: LUX
|
|
accent_color: "#5cf"
|
|
icon_url: /icon.svg
|
|
logo_url: /logo.svg
|
|
|
|
networks:
|
|
- label: Mainnet
|
|
domain: explore.lux.network
|
|
chain_id: 96369
|
|
|
|
chains:
|
|
- slug: cchain
|
|
name: Lux C-Chain
|
|
chain_id: 96369
|
|
type: evm
|
|
# rpc is what the EXPLORER POD dials; public_rpc is what the BROWSER is
|
|
# told. They are different values and one field cannot be both: envs.js
|
|
# used to emit rpc verbatim, so every visitor to explore.lux.network was
|
|
# handed the svc.cluster.local name above and could resolve nothing.
|
|
# Verified public: eth_chainId -> 0x17871 (96369).
|
|
# SPC and Osage deliberately have no public_rpc — api.lux.network 404s on
|
|
# /v1/chain/{spc,osage}/rpc, so the binary emits "" for them rather than a
|
|
# URL that always fails.
|
|
rpc: http://luxd-headless.lux-mainnet.svc.cluster.local:9630/v1/chain/C/rpc
|
|
public_rpc: https://api.lux.network/v1/chain/C/rpc
|
|
coin: LUX
|
|
enabled: true
|
|
default: true
|
|
indexer:
|
|
poll_interval: 30s
|
|
brand:
|
|
name: Lux C-Chain
|
|
coin: LUX
|
|
accent_color: "#5cf"
|
|
|
|
- slug: zoo
|
|
name: Zoo
|
|
chain_id: 200200
|
|
type: evm
|
|
rpc: http://luxd-headless.lux-mainnet.svc.cluster.local:9630/v1/chain/zoo/rpc
|
|
coin: ZOO
|
|
enabled: true
|
|
indexer:
|
|
poll_interval: 30s
|
|
brand:
|
|
name: Zoo
|
|
coin: ZOO
|
|
accent_color: "#7c3aed"
|
|
|
|
- slug: hanzo
|
|
name: Hanzo
|
|
chain_id: 36963
|
|
type: evm
|
|
rpc: http://luxd-headless.lux-mainnet.svc.cluster.local:9630/v1/chain/hanzo/rpc
|
|
coin: AI
|
|
enabled: true
|
|
indexer:
|
|
poll_interval: 30s
|
|
brand:
|
|
name: Hanzo
|
|
coin: AI
|
|
accent_color: "#0b1220"
|
|
|
|
- slug: spc
|
|
name: Sparkle Pony Club
|
|
chain_id: 36911
|
|
type: evm
|
|
rpc: http://luxd-headless.lux-mainnet.svc.cluster.local:9630/v1/chain/spc/rpc
|
|
coin: SPC
|
|
enabled: true
|
|
indexer:
|
|
poll_interval: 30s
|
|
brand:
|
|
name: Sparkle Pony Club
|
|
coin: SPC
|
|
|
|
- slug: pars
|
|
name: Pars
|
|
chain_id: 494949
|
|
type: evm
|
|
rpc: http://luxd-headless.lux-mainnet.svc.cluster.local:9630/v1/chain/pars/rpc
|
|
coin: PARS
|
|
enabled: true
|
|
indexer:
|
|
poll_interval: 30s
|
|
brand:
|
|
name: Pars
|
|
coin: PARS
|
|
---
|
|
apiVersion: v1
|
|
kind: PersistentVolumeClaim
|
|
metadata:
|
|
name: explorer-data
|
|
namespace: lux-explorer
|
|
spec:
|
|
accessModes:
|
|
- ReadWriteOnce
|
|
storageClassName: do-block-storage
|
|
resources:
|
|
requests:
|
|
storage: 50Gi
|
|
---
|
|
apiVersion: apps/v1
|
|
kind: Deployment
|
|
metadata:
|
|
name: explorer
|
|
namespace: lux-explorer
|
|
labels:
|
|
app: explorer
|
|
spec:
|
|
replicas: 1
|
|
strategy:
|
|
type: Recreate
|
|
selector:
|
|
matchLabels:
|
|
app: explorer
|
|
template:
|
|
metadata:
|
|
labels:
|
|
app: explorer
|
|
spec:
|
|
imagePullSecrets:
|
|
- name: ghcr-luxfi
|
|
terminationGracePeriodSeconds: 60
|
|
containers:
|
|
- name: explorer
|
|
image: ghcr.io/luxfi/explorer:1.2.2
|
|
imagePullPolicy: IfNotPresent
|
|
args:
|
|
- --config=/etc/explorer/chains.yaml
|
|
ports:
|
|
- containerPort: 8090
|
|
name: http
|
|
env:
|
|
- name: HTTP_ADDR
|
|
value: ":8090"
|
|
- name: DATA_DIR
|
|
value: /data
|
|
- name: EXPLORER_CONFIG
|
|
value: /etc/explorer/chains.yaml
|
|
volumeMounts:
|
|
- name: data
|
|
mountPath: /data
|
|
- name: config
|
|
mountPath: /etc/explorer
|
|
readOnly: true
|
|
resources:
|
|
requests:
|
|
cpu: 100m
|
|
memory: 256Mi
|
|
limits:
|
|
cpu: "1"
|
|
memory: 2Gi
|
|
readinessProbe:
|
|
httpGet:
|
|
path: /health
|
|
port: 8090
|
|
initialDelaySeconds: 5
|
|
periodSeconds: 10
|
|
livenessProbe:
|
|
httpGet:
|
|
path: /health
|
|
port: 8090
|
|
initialDelaySeconds: 30
|
|
periodSeconds: 30
|
|
volumes:
|
|
- name: data
|
|
persistentVolumeClaim:
|
|
claimName: explorer-data
|
|
- name: config
|
|
configMap:
|
|
name: explorer-chains
|
|
---
|
|
apiVersion: v1
|
|
kind: Service
|
|
metadata:
|
|
name: explorer
|
|
namespace: lux-explorer
|
|
labels:
|
|
app: explorer
|
|
spec:
|
|
type: ClusterIP
|
|
selector:
|
|
app: explorer
|
|
ports:
|
|
- name: http
|
|
port: 8090
|
|
targetPort: 8090
|