Files
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

222 lines
7.5 KiB
YAML

# The explorer backend: indexes each chain in chains.yaml and serves
# /v1/indexer/<slug> and /v1/graph/<slug>, which the explore-fe-* frontends read
# through api-explore.lux.network.
cd:
automated: false
replicas: 1
selectorLabels:
app: explorer
network: mainnet
labels:
network: mainnet
# ghcr.io/luxfi/explorer is public, so the pull needs no secret.
image:
repository: ghcr.io/luxfi/explorer
tag: 1.5.56
digest: sha256:45db11ffafd392898aa6ec68261617bc0c272262bffea16b233ed73d1df094c8
pullPolicy: IfNotPresent
imagePullSecrets: []
args:
- --config=/etc/explorer/chains.yaml
env:
- name: DATA_DIR
value: /data
- name: HTTP_ADDR
value: :8090
resources:
limits: {cpu: '2', memory: 4Gi}
requests: {cpu: 250m, memory: 512Mi}
volumeMounts:
- {mountPath: /etc/explorer, name: config, readOnly: true}
- {mountPath: /data, name: data}
livenessProbe:
httpGet: {path: /health, port: api, scheme: HTTP}
initialDelaySeconds: 30
periodSeconds: 30
timeoutSeconds: 10
failureThreshold: 5
readinessProbe:
httpGet: {path: /health, port: api, scheme: HTTP}
initialDelaySeconds: 5
periodSeconds: 10
timeoutSeconds: 5
failureThreshold: 6
startupProbe:
httpGet: {path: /health, port: api, scheme: HTTP}
initialDelaySeconds: 5
periodSeconds: 5
timeoutSeconds: 5
failureThreshold: 30
securityContext:
runAsNonRoot: true
runAsUser: 65532
fsGroup: 65532
ports:
- name: api
containerPort: 8090
expose: false
service:
extraPorts:
- {name: http, port: 80, targetPort: 8090}
- {name: http-v2, port: 8090, targetPort: 8090}
volumes:
- name: config
configMap: {name: explorer-chains}
- name: data
persistentVolumeClaim: {claimName: explorer-data}
# explorer-data is a local volume on this node, the apps node: indexing is CPU work
# and the data node runs its CPU saturated.
nodeSelector:
kubernetes.io/hostname: ip-10-64-1-50
strategy: Recreate
topologySpread:
enabled: false
lifecycle: null
terminationGracePeriodSeconds: 60
configMaps:
- name: explorer-chains
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 }
- { label: Testnet, domain: explore-test.lux.network, chain_id: 96368 }
# A chain is listed while its node answers. A row for a chain that is not
# there polls a 404 forever and gets plain text back where a JSON-RPC reply
# belongs -- noise that buries the one line a real indexing failure prints.
# Pars, Osage and SPC have no node, so they have no row.
chains:
- slug: cchain
name: Lux C-Chain
chain_id: 96369
type: evm
# The archive node itself: indexing only reads, and the node answers a
# read in about a millisecond without a door in between.
rpc: http://luxd-archive.lux-mainnet.svc.cluster.local:9630/v1/chain/C/rpc
# What the BROWSER is told to dial, and it is not optional. `rpc`
# above is the address this PROCESS dials — a cluster-internal name
# that resolves nowhere outside the mesh. Without public_rpc the
# binary's browserRPC() falls through to browserReachable(rpc), which
# is false for a .svc.cluster.local name, and hands the SPA "" — so
# every RPC-backed control disappears from the explorer.
public_rpc: https://api.lux.network/v1/chain/C/rpc
coin: LUX
enabled: true
default: true
# Each holds code on this chain. The wrapped native answers
# symbol() = WLUX; the router's factory() is factory_v3 and its
# WETH9() is native.
native: "0x4888E4a2Ee0F03051c72D2BD3ACf755eD3498B3E"
factory_v2: "0xD173926A10A0C4eCd3A51B1422270b65Df0551c1"
factory_v3: "0x80bBc7C4C7a59C899D1B37BC14539A22D5830a84"
# Changing either factory changes the store's source fingerprint, so
# the indexer drops its derived rows and re-reads this chain from block 0.
quoter_v2: "0x15C729fdd833Ba675edd466Dfc63E1B737925A4c"
router: "0x939bC0Bca6F9B9c52E6e3AD8A3C590b5d9B9D10E"
# eth_getBalance(treasury, 0) on this chain.
genesis_supply: "2000000000000"
# Holds what has not been distributed. Read live, because it falls as
# tokens reach holders, and what it still holds is not circulating.
treasury: "0x9011E888251AB053B7bD1cdB598Db4f9DEd94714"
indexer: { poll_interval: 30s }
graph:
enabled: true
subgraphs:
- { name: amm, schema: amm, enabled: true }
brand:
name: Lux C-Chain
coin: LUX
accent_color: "#5cf"
- slug: zoo
name: Zoo
chain_id: 200200
type: evm
rpc: http://luxd-archive.zoo-mainnet.svc.cluster.local:9630/v1/chain/C/rpc
public_rpc: https://api.zoo.network/v1/chain/c/rpc
coin: ZOO
enabled: true
# Each holds code on this chain. The wrapped native answers symbol() = WLUX,
# a name carried over from the genesis Zoo was cut from.
native: "0x4888E4a2Ee0F03051c72D2BD3ACf755eD3498B3E"
factory_v2: "0xD173926A10A0C4eCd3A51B1422270b65Df0551c1"
factory_v3: "0x80bBc7C4C7a59C899D1B37BC14539A22D5830a84"
quoter_v2: "0x15C729fdd833Ba675edd466Dfc63E1B737925A4c"
router: "0x939bC0Bca6F9B9c52E6e3AD8A3C590b5d9B9D10E"
# eth_getBalance(treasury, 0) on this chain.
genesis_supply: "2000000000000"
treasury: "0x9011E888251AB053B7bD1cdB598Db4f9DEd94714"
indexer: { poll_interval: 30s }
graph:
enabled: true
subgraphs:
- { name: amm, schema: amm, enabled: true }
brand:
name: Zoo
coin: ZOO
accent_color: "#7c3aed"
- slug: hanzo
name: Hanzo
chain_id: 36963
type: evm
rpc: http://hanzod-rpc.hanzo-mainnet.svc.cluster.local:9630/v1/chain/hanzo/rpc
public_rpc: https://api.hanzo.network/v1/chain/hanzo/rpc
coin: AI
enabled: true
indexer: { poll_interval: 30s }
brand:
name: Hanzo
coin: AI
accent_color: "#0b1220"
# Testnets, each read from its archive node.
- slug: cchain-testnet
name: Lux C-Chain Testnet
chain_id: 96368
type: evm
rpc: http://luxd-archive.lux-testnet.svc.cluster.local:9630/v1/chain/C/rpc
public_rpc: https://api.lux-test.network/v1/chain/c/rpc
coin: LUX
enabled: true
indexer: { poll_interval: 30s }
brand:
name: Lux C-Chain Testnet
coin: LUX
accent_color: "#5cf"
- slug: zoo-testnet
name: Zoo Testnet
chain_id: 200201
type: evm
rpc: http://luxd-archive.zoo-testnet.svc.cluster.local:9630/v1/chain/C/rpc
public_rpc: https://api.zoo-test.network/v1/chain/c/rpc
coin: ZOO
enabled: true
indexer: { poll_interval: 30s }
brand:
name: Zoo Testnet
coin: ZOO
accent_color: "#7c3aed"
routes:
- name: api-explore
spec:
entryPoints: [websecure]
routes:
- match: Host(`api-explore.lux.cloud`) || Host(`api-explore.lux.network`)
kind: Rule
services:
- name: explorer
port: 8090
tls: {}