Files
zeekayandHanzo Dev 7417193940 A chain answers under one segment, and the fleet asks for it there
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]>
2026-08-30 16:17:20 -07:00

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