rpc: /ext/ -> /v1/ on our own hosts
luxd serves /v1/*; /ext/* 404s. Third-party chains keep their own paths. Co-authored-by: Hanzo Dev <[email protected]>
This commit is contained in:
@@ -21,7 +21,7 @@ equals per-env EVM chainID (sovereign-L1 rule).
|
||||
| mainnet | 200200 | 9700 | https://api.zoo.network |
|
||||
| testnet | 200201 | 9710 | https://api.zoo-test.network |
|
||||
| devnet | 200202 | 9720 | https://api.zoo-dev.network |
|
||||
| localnet | 200203 | 9730 | http://127.0.0.1:9730/ext/bc/C/rpc |
|
||||
| localnet | 200203 | 9730 | http://127.0.0.1:9730/v1/bc/C/rpc |
|
||||
|
||||
Ports are explicit (`httpPort` + `stakingPort` in chain.yaml). No
|
||||
port+1 implicit rule. No collisions across envs.
|
||||
|
||||
+5
-5
@@ -71,7 +71,7 @@ networks:
|
||||
httpPort: 9730
|
||||
stakingPort: 9731
|
||||
genesisFile: ./configs/genesis/localnet/genesis.json
|
||||
rpcUrl: http://127.0.0.1:9730/ext/bc/C/rpc
|
||||
rpcUrl: http://127.0.0.1:9730/v1/bc/C/rpc
|
||||
cluster: colima
|
||||
namespace: zoo-local
|
||||
imageTag: v1.30.6
|
||||
@@ -83,18 +83,18 @@ chains:
|
||||
slug: zoo-evm
|
||||
vmType: evm
|
||||
description: "Zoo EVM — DeAI / DeSci primary chain"
|
||||
rpcPath: /ext/bc/C/rpc
|
||||
wsPath: /ext/bc/C/ws
|
||||
rpcPath: /v1/bc/C/rpc
|
||||
wsPath: /v1/bc/C/ws
|
||||
- name: P
|
||||
slug: zoo-platform
|
||||
vmType: platform
|
||||
description: "Zoo P-chain — sovereign validator set"
|
||||
rpcPath: /ext/bc/P
|
||||
rpcPath: /v1/bc/P
|
||||
- name: X
|
||||
slug: zoo-exchange
|
||||
vmType: avm
|
||||
description: "Zoo X-chain — UTXO fee asset (ZOO)"
|
||||
rpcPath: /ext/bc/X
|
||||
rpcPath: /v1/bc/X
|
||||
|
||||
token:
|
||||
name: "Zoo"
|
||||
|
||||
+1
-1
@@ -34,4 +34,4 @@ services:
|
||||
ports: ["4001:4001"]
|
||||
environment:
|
||||
- ZOO_RPC=http://node:9550
|
||||
- LUX_RPC=https://api.lux.network/ext/bc/C/rpc
|
||||
- LUX_RPC=https://api.lux.network/v1/bc/C/rpc
|
||||
|
||||
@@ -22,18 +22,18 @@ env:
|
||||
key: bridge-url
|
||||
name: zoo-db-credentials
|
||||
- name: ZOO_RPC_URL
|
||||
value: http://zoo-rpc:9650/ext/bc/zoo/rpc
|
||||
value: http://zoo-rpc:9650/v1/bc/zoo/rpc
|
||||
- name: LUX_RPC_URL
|
||||
valueFrom:
|
||||
configMapKeyRef:
|
||||
key: lux-rpc-url
|
||||
name: zoo-config-487tfkdgm6
|
||||
- name: THRESHOLD_RPC_URL
|
||||
value: http://zoo-rpc:9650/ext/bc/zoo-threshold/rpc
|
||||
value: http://zoo-rpc:9650/v1/bc/zoo-threshold/rpc
|
||||
- name: IDENTITY_RPC_URL
|
||||
value: http://zoo-rpc:9650/ext/bc/zoo-identity/rpc
|
||||
value: http://zoo-rpc:9650/v1/bc/zoo-identity/rpc
|
||||
- name: KEY_RPC_URL
|
||||
value: http://zoo-rpc:9650/ext/bc/zoo-keys/rpc
|
||||
value: http://zoo-rpc:9650/v1/bc/zoo-keys/rpc
|
||||
resources:
|
||||
limits:
|
||||
cpu: 500m
|
||||
|
||||
@@ -19,18 +19,18 @@ env:
|
||||
- name: DATABASE_URL
|
||||
value: sqlite:///app/data/data.db
|
||||
- name: ZOO_RPC_URL
|
||||
value: http://zoo-rpc:9650/ext/bc/zoo/rpc
|
||||
value: http://zoo-rpc:9650/v1/bc/zoo/rpc
|
||||
- name: LUX_RPC_URL
|
||||
valueFrom:
|
||||
configMapKeyRef:
|
||||
key: lux-rpc-url
|
||||
name: zoo-config
|
||||
- name: THRESHOLD_RPC_URL
|
||||
value: http://zoo-rpc:9650/ext/bc/zoo-threshold/rpc
|
||||
value: http://zoo-rpc:9650/v1/bc/zoo-threshold/rpc
|
||||
- name: IDENTITY_RPC_URL
|
||||
value: http://zoo-rpc:9650/ext/bc/zoo-identity/rpc
|
||||
value: http://zoo-rpc:9650/v1/bc/zoo-identity/rpc
|
||||
- name: KEY_RPC_URL
|
||||
value: http://zoo-rpc:9650/ext/bc/zoo-keys/rpc
|
||||
value: http://zoo-rpc:9650/v1/bc/zoo-keys/rpc
|
||||
resources:
|
||||
limits:
|
||||
cpu: 500m
|
||||
|
||||
@@ -17,7 +17,7 @@ env:
|
||||
- name: ETHEREUM_JSONRPC_VARIANT
|
||||
value: geth
|
||||
- name: ETHEREUM_JSONRPC_HTTP_URL
|
||||
value: http://zoo-rpc:9650/ext/bc/zoo/rpc
|
||||
value: http://zoo-rpc:9650/v1/bc/zoo/rpc
|
||||
- name: DATABASE_URL
|
||||
valueFrom:
|
||||
secretKeyRef:
|
||||
|
||||
@@ -22,18 +22,18 @@ env:
|
||||
key: bridge-url
|
||||
name: zoo-db-credentials
|
||||
- name: ZOO_RPC_URL
|
||||
value: http://zoo-rpc:9650/ext/bc/zoo/rpc
|
||||
value: http://zoo-rpc:9650/v1/bc/zoo/rpc
|
||||
- name: LUX_RPC_URL
|
||||
valueFrom:
|
||||
configMapKeyRef:
|
||||
key: lux-rpc-url
|
||||
name: zoo-config-dhmbk98hkm
|
||||
- name: THRESHOLD_RPC_URL
|
||||
value: http://zoo-rpc:9650/ext/bc/zoo-threshold/rpc
|
||||
value: http://zoo-rpc:9650/v1/bc/zoo-threshold/rpc
|
||||
- name: IDENTITY_RPC_URL
|
||||
value: http://zoo-rpc:9650/ext/bc/zoo-identity/rpc
|
||||
value: http://zoo-rpc:9650/v1/bc/zoo-identity/rpc
|
||||
- name: KEY_RPC_URL
|
||||
value: http://zoo-rpc:9650/ext/bc/zoo-keys/rpc
|
||||
value: http://zoo-rpc:9650/v1/bc/zoo-keys/rpc
|
||||
resources:
|
||||
limits:
|
||||
cpu: 500m
|
||||
|
||||
+10
-10
@@ -36,11 +36,11 @@ function productionUrls(): ZooUrls {
|
||||
const luxApi = LUX_API[NETWORK] || LUX_API.mainnet
|
||||
const ep = EXPLORE_PREFIX[NETWORK] || ''
|
||||
return {
|
||||
rpcZoo: `${luxApi}/${NETWORK}/ext/bc/zoo/rpc`,
|
||||
rpcLux: `${luxApi}/${NETWORK}/ext/bc/C/rpc`,
|
||||
rpcInfo: `${luxApi}/${NETWORK}/ext/info`,
|
||||
rpcHealth: `${luxApi}/${NETWORK}/ext/health`,
|
||||
rpcPlatform: `${luxApi}/${NETWORK}/ext/bc/P`,
|
||||
rpcZoo: `${luxApi}/${NETWORK}/v1/bc/zoo/rpc`,
|
||||
rpcLux: `${luxApi}/${NETWORK}/v1/bc/C/rpc`,
|
||||
rpcInfo: `${luxApi}/${NETWORK}/v1/info`,
|
||||
rpcHealth: `${luxApi}/${NETWORK}/v1/health`,
|
||||
rpcPlatform: `${luxApi}/${NETWORK}/v1/bc/P`,
|
||||
exploreZoo: `https://${ep}explore-zoo.lux.network`,
|
||||
apiExploreZoo: `https://api-${ep}explore-zoo.lux.network`,
|
||||
exchange: 'https://zoo.exchange',
|
||||
@@ -50,11 +50,11 @@ function productionUrls(): ZooUrls {
|
||||
|
||||
function localUrls(): ZooUrls {
|
||||
return {
|
||||
rpcZoo: 'http://127.0.0.1:9630/ext/bc/zoo/rpc',
|
||||
rpcLux: 'http://127.0.0.1:9630/ext/bc/C/rpc',
|
||||
rpcInfo: 'http://127.0.0.1:9630/ext/info',
|
||||
rpcHealth: 'http://127.0.0.1:9630/ext/health',
|
||||
rpcPlatform: 'http://127.0.0.1:9630/ext/bc/P',
|
||||
rpcZoo: 'http://127.0.0.1:9630/v1/bc/zoo/rpc',
|
||||
rpcLux: 'http://127.0.0.1:9630/v1/bc/C/rpc',
|
||||
rpcInfo: 'http://127.0.0.1:9630/v1/info',
|
||||
rpcHealth: 'http://127.0.0.1:9630/v1/health',
|
||||
rpcPlatform: 'http://127.0.0.1:9630/v1/bc/P',
|
||||
exploreZoo: 'http://localhost:4011',
|
||||
apiExploreZoo: 'http://localhost:4011',
|
||||
exchange: 'http://localhost:3001',
|
||||
|
||||
+1
-1
@@ -2,7 +2,7 @@
|
||||
|
||||
Zoo is a brand L2 on Lux primary network (shares validators via primary-network
|
||||
staking; see `~/work/zoo/universe/chain.yaml`). The Zoo L2 EVM lives on
|
||||
`api.lux.network/ext/bc/zoo/rpc` (chainId 200200 mainnet, 200201 testnet,
|
||||
`api.lux.network/v1/bc/zoo/rpc` (chainId 200200 mainnet, 200201 testnet,
|
||||
200202 devnet). The manifests in this directory describe Zoo's *brand*
|
||||
services — bridge, explorer, gateway, marketing sites — that run alongside
|
||||
the L2 in a `do-sfo3-zoo-k8s` cluster. Validators themselves run on Lux
|
||||
|
||||
@@ -85,7 +85,7 @@ spec:
|
||||
- name: DATABASE_URL
|
||||
value: sqlite:///app/data/data.db
|
||||
- name: ZOO_RPC_URL
|
||||
value: http://zoo-rpc:9650/ext/bc/zoo/rpc
|
||||
value: http://zoo-rpc:9650/v1/bc/zoo/rpc
|
||||
- name: LUX_RPC_URL
|
||||
valueFrom:
|
||||
configMapKeyRef:
|
||||
@@ -93,13 +93,13 @@ spec:
|
||||
key: lux-rpc-url
|
||||
# Chain-native signing via T-Chain RPC (replaces MPC StatefulSet)
|
||||
- name: THRESHOLD_RPC_URL
|
||||
value: http://zoo-rpc:9650/ext/bc/zoo-threshold/rpc
|
||||
value: http://zoo-rpc:9650/v1/bc/zoo-threshold/rpc
|
||||
# Chain-native identity via I-Chain RPC (replaces external IAM)
|
||||
- name: IDENTITY_RPC_URL
|
||||
value: http://zoo-rpc:9650/ext/bc/zoo-identity/rpc
|
||||
value: http://zoo-rpc:9650/v1/bc/zoo-identity/rpc
|
||||
# Chain-native key management via K-Chain RPC (replaces external KMS)
|
||||
- name: KEY_RPC_URL
|
||||
value: http://zoo-rpc:9650/ext/bc/zoo-keys/rpc
|
||||
value: http://zoo-rpc:9650/v1/bc/zoo-keys/rpc
|
||||
volumeMounts:
|
||||
- name: data
|
||||
mountPath: /app/data
|
||||
|
||||
@@ -82,10 +82,10 @@ spec:
|
||||
# platform.getBlockchains on that validator returns only the Lux
|
||||
# primary-network chains, and ZooChain zoo-evm carries no blockchainId, i.e.
|
||||
# the Zoo devnet EVM has never been created. Do NOT repoint this at
|
||||
# /ext/bc/C/rpc to make it respond — C-Chain is Lux's primary EVM and no
|
||||
# /v1/bc/C/rpc to make it respond — C-Chain is Lux's primary EVM and no
|
||||
# other network uses it. zoo-testnet/zoo-mainnet override with their own
|
||||
# tracked blockchainID, which is what this becomes once devnet has one.
|
||||
rpcEndpoint: http://zoo-chain-rpc:9630/ext/bc/zoo/rpc
|
||||
rpcEndpoint: http://zoo-chain-rpc:9630/v1/bc/zoo/rpc
|
||||
chainName: zoo
|
||||
coinSymbol: ZOO
|
||||
service:
|
||||
|
||||
@@ -19,7 +19,7 @@ configMapGenerator:
|
||||
- LUX_NETWORK_ID=3
|
||||
# Zoo EVM chainID — per-env, baked into the L2 genesis blob.
|
||||
- ZOO_EVM_CHAIN_ID=200202
|
||||
- lux-rpc-url=https://api.lux-dev.network/ext/bc/C/rpc
|
||||
- lux-rpc-url=https://api.lux-dev.network/v1/bc/C/rpc
|
||||
|
||||
# Mainnet hosts in base/ingress.yaml don't apply to devnet — remove
|
||||
# them so the devnet-specific ingressroute.yaml is canonical.
|
||||
|
||||
@@ -25,7 +25,7 @@ metadata:
|
||||
spec:
|
||||
replacePathRegex:
|
||||
regex: "^/(.*)$"
|
||||
replacement: "/ext/bc/zoo/rpc/$1"
|
||||
replacement: "/v1/bc/zoo/rpc/$1"
|
||||
---
|
||||
apiVersion: traefik.io/v1alpha1
|
||||
kind: Middleware
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
# Node flag injection for the operator-rendered zoo-chain StatefulSet.
|
||||
# See k8s/zoo-mainnet/statefulset-patch.yaml for the full rationale: the node
|
||||
# ignores ZOO_* env for these settings, so --http-host=0.0.0.0 (etc.) must be
|
||||
# passed as CLI flags or the kubelet liveness probe can't reach /ext/health and
|
||||
# passed as CLI flags or the kubelet liveness probe can't reach /v1/health and
|
||||
# the node restart-loops. devnet = Lux primary networkId 3, 1 validator, sybil
|
||||
# protection off (networkId 3 convention).
|
||||
#
|
||||
|
||||
@@ -19,7 +19,7 @@ configMapGenerator:
|
||||
- LUX_NETWORK_ID=1
|
||||
# Zoo EVM chainID — per-env, baked into the L2 genesis blob.
|
||||
- ZOO_EVM_CHAIN_ID=200200
|
||||
- lux-rpc-url=https://api.lux.network/ext/bc/C/rpc
|
||||
- lux-rpc-url=https://api.lux.network/v1/bc/C/rpc
|
||||
patches:
|
||||
- path: network-patch.yaml
|
||||
- target:
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
# Zoo mainnet — 5 validators that join Lux mainnet primary network (networkId 1)
|
||||
# and track the Zoo EVM chain (chainID 200200, blockchainID
|
||||
# 4HBM17czc7zFQMPrd9CVZ6YbABm1jecf99iwvFw8Gbo6gFaU3 — looked up live
|
||||
# 2026-06-10 from api.lux.network/ext/bc/P platform.getBlockchains).
|
||||
# 2026-06-10 from api.lux.network/v1/bc/P platform.getBlockchains).
|
||||
#
|
||||
# Bootstrap IPs and NodeIDs are the public addresses of the Lux mainnet
|
||||
# validators (do-sfo3-lux-k8s, namespace lux-mainnet, LB IPs 2026-06-10).
|
||||
@@ -65,7 +65,7 @@ metadata:
|
||||
spec:
|
||||
chainRef: zoo-evm
|
||||
image: ghcr.io/luxfi/explorer:1.2.18
|
||||
rpcEndpoint: http://zoo-chain-rpc.zoo-mainnet.svc.cluster.local:9630/ext/bc/4HBM17czc7zFQMPrd9CVZ6YbABm1jecf99iwvFw8Gbo6gFaU3/rpc
|
||||
rpcEndpoint: http://zoo-chain-rpc.zoo-mainnet.svc.cluster.local:9630/v1/bc/4HBM17czc7zFQMPrd9CVZ6YbABm1jecf99iwvFw8Gbo6gFaU3/rpc
|
||||
chainName: zoo
|
||||
coinSymbol: ZOO
|
||||
service:
|
||||
|
||||
@@ -125,7 +125,7 @@ spec:
|
||||
containerPort: 9631
|
||||
livenessProbe:
|
||||
httpGet:
|
||||
path: /ext/health/liveness
|
||||
path: /v1/health/liveness
|
||||
port: 9630
|
||||
initialDelaySeconds: 300
|
||||
periodSeconds: 30
|
||||
|
||||
@@ -30,7 +30,7 @@ metadata:
|
||||
spec:
|
||||
replacePathRegex:
|
||||
regex: "^/(.*)$"
|
||||
replacement: "/ext/bc/zoo/rpc/$1"
|
||||
replacement: "/v1/bc/zoo/rpc/$1"
|
||||
---
|
||||
# This middleware strips a leading slash from blank paths (root POST).
|
||||
apiVersion: traefik.io/v1alpha1
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
# config as ZOO_* env vars. The node binary does NOT read its http-host /
|
||||
# bootstrap / track-chains settings from ZOO_* env — only from real CLI flags.
|
||||
# Without --http-host=0.0.0.0 it binds the HTTP / health API to 127.0.0.1, so the
|
||||
# kubelet liveness probe (which hits the pod IP) can never reach /ext/health: the
|
||||
# kubelet liveness probe (which hits the pod IP) can never reach /v1/health: the
|
||||
# node boots, passes its internal check, then gets SIGTERM'd ~90s in when the
|
||||
# probe fails 3x — an endless restart loop.
|
||||
#
|
||||
|
||||
@@ -19,7 +19,7 @@ configMapGenerator:
|
||||
- LUX_NETWORK_ID=2
|
||||
# Zoo EVM chainID — per-env, baked into the L2 genesis blob.
|
||||
- ZOO_EVM_CHAIN_ID=200201
|
||||
- lux-rpc-url=https://api.lux-test.network/ext/bc/C/rpc
|
||||
- lux-rpc-url=https://api.lux-test.network/v1/bc/C/rpc
|
||||
|
||||
# Mainnet hosts in base/ingress.yaml don't apply to testnet — remove
|
||||
# them via kustomize so only the testnet-specific ingressroute.yaml
|
||||
|
||||
@@ -52,7 +52,7 @@ metadata:
|
||||
spec:
|
||||
chainRef: zoo-evm
|
||||
image: ghcr.io/luxfi/explorer:1.2.18
|
||||
rpcEndpoint: http://zoo-chain-rpc.zoo-testnet.svc.cluster.local:9630/ext/bc/c3PrgGAAoJXz8RgNAw3j7dSUjUiHVk3mtTneYfr7GvZRxmTPH/rpc
|
||||
rpcEndpoint: http://zoo-chain-rpc.zoo-testnet.svc.cluster.local:9630/v1/bc/c3PrgGAAoJXz8RgNAw3j7dSUjUiHVk3mtTneYfr7GvZRxmTPH/rpc
|
||||
chainName: zoo
|
||||
coinSymbol: tZOO
|
||||
service:
|
||||
|
||||
@@ -24,7 +24,7 @@ metadata:
|
||||
spec:
|
||||
replacePathRegex:
|
||||
regex: "^/(.*)$"
|
||||
replacement: "/ext/bc/zoo/rpc/$1"
|
||||
replacement: "/v1/bc/zoo/rpc/$1"
|
||||
---
|
||||
apiVersion: traefik.io/v1alpha1
|
||||
kind: Middleware
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
# Node flag injection for the operator-rendered zoo-chain StatefulSet.
|
||||
# See k8s/zoo-mainnet/statefulset-patch.yaml for the full rationale: the node
|
||||
# ignores ZOO_* env for these settings, so --http-host=0.0.0.0 (etc.) must be
|
||||
# passed as CLI flags or the kubelet liveness probe can't reach /ext/health and
|
||||
# passed as CLI flags or the kubelet liveness probe can't reach /v1/health and
|
||||
# the node restart-loops. testnet = Lux primary networkId 2, 3 validators, Zoo
|
||||
# testnet EVM chain c3PrgGAAoJXz8RgNAw3j7dSUjUiHVk3mtTneYfr7GvZRxmTPH.
|
||||
# command is `zood` (zooai/node), not `./luxd` — same luxfi/node flag set,
|
||||
|
||||
+10
-10
@@ -30,12 +30,12 @@ const ep = EXPLORE_PREFIX[NETWORK] || ''
|
||||
const urls: Record<string, Record<string, string>> = {
|
||||
production: {
|
||||
// Zoo chain RPC (subnet of Lux)
|
||||
rpcZoo: `${luxApi}/${NETWORK}/ext/bc/zoo/rpc`,
|
||||
rpcZoo: `${luxApi}/${NETWORK}/v1/bc/zoo/rpc`,
|
||||
// Parent Lux chain RPCs
|
||||
rpcLux: `${luxApi}/${NETWORK}/ext/bc/C/rpc`,
|
||||
rpcInfo: `${luxApi}/${NETWORK}/ext/info`,
|
||||
rpcHealth: `${luxApi}/${NETWORK}/ext/health`,
|
||||
rpcPlatform: `${luxApi}/${NETWORK}/ext/bc/P`,
|
||||
rpcLux: `${luxApi}/${NETWORK}/v1/bc/C/rpc`,
|
||||
rpcInfo: `${luxApi}/${NETWORK}/v1/info`,
|
||||
rpcHealth: `${luxApi}/${NETWORK}/v1/health`,
|
||||
rpcPlatform: `${luxApi}/${NETWORK}/v1/bc/P`,
|
||||
// Zoo explorer (hosted under lux.network)
|
||||
exploreZoo: `https://${ep}explore-zoo.lux.network`,
|
||||
apiExploreZoo: `https://api-${ep}explore-zoo.lux.network`,
|
||||
@@ -44,11 +44,11 @@ const urls: Record<string, Record<string, string>> = {
|
||||
website: 'https://zoo.network',
|
||||
},
|
||||
local: {
|
||||
rpcZoo: 'http://127.0.0.1:9630/ext/bc/zoo/rpc',
|
||||
rpcLux: 'http://127.0.0.1:9630/ext/bc/C/rpc',
|
||||
rpcInfo: 'http://127.0.0.1:9630/ext/info',
|
||||
rpcHealth: 'http://127.0.0.1:9630/ext/health',
|
||||
rpcPlatform: 'http://127.0.0.1:9630/ext/bc/P',
|
||||
rpcZoo: 'http://127.0.0.1:9630/v1/bc/zoo/rpc',
|
||||
rpcLux: 'http://127.0.0.1:9630/v1/bc/C/rpc',
|
||||
rpcInfo: 'http://127.0.0.1:9630/v1/info',
|
||||
rpcHealth: 'http://127.0.0.1:9630/v1/health',
|
||||
rpcPlatform: 'http://127.0.0.1:9630/v1/bc/P',
|
||||
exploreZoo: 'http://localhost:4011',
|
||||
apiExploreZoo: 'http://localhost:4011',
|
||||
exchange: 'http://localhost:3001',
|
||||
|
||||
Reference in New Issue
Block a user