The explorer indexes zoo and hanzo, whose nodes now answer
The backend's values were deleted as a copy while it was paused for the lux mainnet import; it kept running from a live config with one chain, because on 09-09 only lux answered. Zoo (200200) and hanzo (36963) answer in-cluster now, so they get rows: zoo's venue contracts and 2T genesis are read on its chain, hanzo's new chain has no venue yet. The frontends' wallet RPC pointed at api.zoo.ngo (served by cloud, not the chain) and /v1/chain/hanzo (a 404); both now name the chain endpoint. Co-authored-by: Hanzo Dev <[email protected]>
This commit is contained in:
@@ -92,7 +92,7 @@ configMaps:
|
||||
# presenting none. None of these four answer yet -- the chains are not up --
|
||||
# so the page shows nothing, which is the truth, and starts working the day
|
||||
# the chain does without another edit here.
|
||||
NEXT_PUBLIC_NETWORK_RPC_URL: https://api.hanzo.network/v1/chain/hanzo
|
||||
NEXT_PUBLIC_NETWORK_RPC_URL: https://api.hanzo.network/v1/chain/c/rpc
|
||||
NEXT_PUBLIC_API_HOST: api-explore.lux.network
|
||||
NEXT_PUBLIC_API_PROTOCOL: https
|
||||
# The Blockscout-shaped API this UI reads is mounted per chain at
|
||||
|
||||
@@ -92,7 +92,7 @@ configMaps:
|
||||
# presenting none. None of these four answer yet -- the chains are not up --
|
||||
# so the page shows nothing, which is the truth, and starts working the day
|
||||
# the chain does without another edit here.
|
||||
NEXT_PUBLIC_NETWORK_RPC_URL: https://api.zoo.ngo/v1/chain/c/rpc
|
||||
NEXT_PUBLIC_NETWORK_RPC_URL: https://api.zoo.network/v1/chain/c/rpc
|
||||
NEXT_PUBLIC_API_HOST: api-explore.lux.network
|
||||
NEXT_PUBLIC_API_PROTOCOL: https
|
||||
# The Blockscout-shaped API this UI reads is mounted per chain at
|
||||
|
||||
@@ -0,0 +1,212 @@
|
||||
# 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
|
||||
# No registry holds a 1.5.x build of this image; the data node runs it from its
|
||||
# image cache, so it carries no pull secret.
|
||||
image:
|
||||
repository: ghcr.io/luxfi/explorer
|
||||
tag: 1.5.49
|
||||
digest: sha256:b23eccfdc705ad0a772dfa49d189e097a582076c8fc7b5dc1cd4f81a8cbda06e
|
||||
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.
|
||||
nodeSelector:
|
||||
kubernetes.io/hostname: ip-10-64-1-20
|
||||
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 }
|
||||
|
||||
# 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 door in front of the archive node: it forwards eth_, net_ and web3_
|
||||
# calls and rewrites Host to localhost, which this node accepts.
|
||||
rpc: http://rpc.lux-mainnet.svc.cluster.local/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
|
||||
# Wrapped LUX, asked directly on this chain: symbol() = WLUX,
|
||||
# name() = Wrapped LUX, 2874 bytes of code. The address this file
|
||||
# carried before, 0x4888E4a2…8B3E, holds none here — it was the
|
||||
# wrapped native of the chain this network replaced, and a pricing
|
||||
# base that is not a contract prices everything at nothing.
|
||||
native: "0x66dbed9572eb9be45ef05526c65beddf8d60a672"
|
||||
# 2T minted at block 0 — eth_getBalance at height 0 on this chain,
|
||||
# not a spec sheet.
|
||||
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 }
|
||||
# The two contracts whose PairCreated / PoolCreated this subgraph
|
||||
# trusts, and the periphery a quote and a swap are addressed to.
|
||||
# Deployed on this chain 2026-09-09 by luxfi/standard script/venue.ts
|
||||
# and recorded in that repo at deployments/venue/96369.json, which is
|
||||
# where these came from. The addresses this file used to carry belong
|
||||
# to the deployment on the network this one replaced and hold no code
|
||||
# here; a subgraph pointed at those trusts a root that is not there,
|
||||
# which is why they were unset rather than guessed at.
|
||||
#
|
||||
# Changing either factory changes the store's source fingerprint, so
|
||||
# the indexer drops its derived rows and re-reads this chain from
|
||||
# block 0 — which is what puts the venue's whole history in the graph
|
||||
# rather than only what it sees after this lands.
|
||||
factory_v2: "0x41f76735F33fdb2C81478bF4B7654c5d9ba719c1"
|
||||
factory_v3: "0x6E5884084814F4785e21f6f9C11D3C299Ef5d7f1"
|
||||
# A quote off the indexed book is exact for a constant-product pair
|
||||
# and an estimate for a concentrated one, where the answer depends on
|
||||
# which ticks the trade crosses. With the quoter set, the chain prices
|
||||
# that route itself.
|
||||
quoter_v2: "0x6EA2F79f743C809D1152657Ef5d5907f47a34cfc"
|
||||
# SwapRouter02: the one contract a swap is addressed to and an
|
||||
# approval is granted, over both generations.
|
||||
router: "0xbbD8d9A1E6bf5627A2F6D2aF38664bbe1cEF63Bb"
|
||||
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
|
||||
# Selects only validators within MAX_LAG_BLOCKS of the leader.
|
||||
rpc: http://hanzod-rpc.hanzo-mainnet.svc.cluster.local:9630/v1/chain/c/rpc
|
||||
public_rpc: https://api.hanzo.network/v1/chain/c/rpc
|
||||
coin: AI
|
||||
enabled: true
|
||||
indexer: { poll_interval: 30s }
|
||||
brand:
|
||||
name: Hanzo
|
||||
coin: AI
|
||||
accent_color: "#0b1220"
|
||||
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: {}
|
||||
Reference in New Issue
Block a user