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]>
222 lines
7.5 KiB
YAML
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: {}
|