api.lux.network answers from the node that holds the real chain

Both lux-api rules now send to luxd-rpc, the Service that selects the sync
node, and not to lux-chain, whose hand-made EndpointSlice named the five docker
validators on evo. Those five were a fork of mainnet -- same genesis, a
different block 1, real transactions on both sides -- and they are stopped.
Serving a partially imported real chain beats serving a complete wrong one.

bc-path rewrites /v1/chain/c/... to /v1/bc/C/... because the sync node is on
luxd v1.36.148, which serves the EVM at the old path, while every caller of
api.lux.network speaks the /v1/chain path that v1.36.181 serves. It is the one
thing to delete when the node moves to .181.

Recorded here and applied live by hand: lux-mainnet-luxd has never been synced,
and syncing it now would stand a second luxd beside the hand-applied sync
StatefulSet. When that app is adopted, it carries this route.


Co-authored-by: Hanzo Dev <[email protected]>
This commit is contained in:
2026-09-09 13:09:08 -07:00
co-authored by Hanzo Dev
parent 56db6d6ca3
commit 61abbb3bfd
+45
View File
@@ -803,3 +803,48 @@ workload:
# moved to the chart (pods now say `Helm`), so it matched ZERO pods and reported
# expectedPods=0 for 162 days. Corrected 2026-08-06 to
# {name: luxd, component: validator} — verified selecting exactly 5.
# api.lux.network. Both rules send to luxd-rpc, the Service that selects the
# sync node -- the one holding the real chain -- and not to `lux-chain`, a
# selector-less Service whose hand-made EndpointSlice named the five docker
# validators on evo. Those five were a fork: same genesis, different block 1,
# real transactions on both sides; the divergence only shows above block 0.
# They are stopped and stay stopped.
#
# bc-path exists because this node is on luxd v1.36.148, which serves the EVM
# at /v1/bc/C/rpc, while everything that calls api.lux.network -- the gateway's
# route table, the explorer, the traffic sender -- speaks /v1/chain/c/rpc, the
# path v1.36.181 serves. The rewrite holds the public contract steady until the
# node moves to .181; delete bc-path on that day and nothing else changes.
middlewares:
- name: bc-path
spec:
replacePathRegex:
regex: "^/v1/chain/[cC](/.*)?$"
replacement: "/v1/bc/C$1"
- name: c-chain
spec:
replacePath:
path: /v1/bc/C/rpc
routes:
- name: lux-api
spec:
entryPoints: [websecure]
routes:
- match: (Host(`api.lux.network`) || Host(`api.lux.cloud`)) && PathPrefix(`/v1/chain`)
kind: Rule
priority: 300
middlewares:
- name: bc-path
services:
- name: luxd-rpc
port: 9630
- match: (Host(`api.lux.network`) || Host(`api.lux.cloud`)) && Path(`/`)
kind: Rule
priority: 310
middlewares:
- name: c-chain
services:
- name: luxd-rpc
port: 9630
tls: {}