The two mains shared no history, so this is a per-file three-way merge:
for each file the 65 forge-only commits touched (by patch-id), the base is
the newest version both histories held. 105 files merged or took one side
cleanly, 48 were already identical, and the 45 true conflicts and 31
modify/delete pairs were resolved by what runs on the cluster:
- The forge wins where it is live: explorer 1.5.56 (digest 45db11ff) and
its archive readers, explore-fe-hanzo's ConfigMap env (AI coin,
/v1/indexer/hanzo, /v1/chain/hanzo/rpc), exchange-api reading
luxd-archive, and explore-fe-{lux,zoo}-testnet, pinned to what they run
(v2.8.5-lux / v2.8.4-lux).
- GitHub wins where it is live: explore-fe-lux v2.8.5-lux, explore-fe-zoo
v2.8.4-lux, bankd v1.0.18, lux-build's routes.
- The forge's retirement of workloads that run nowhere stands: lux-mainnet
dex, lux-hb2, lux-market, traffic, wallet-web; the lux-testnet frontends,
indexer, exchange and gateways; lux-operator. deploy/lux-testnet/luxd.yaml
stays, since roll_luxd.sh reads it.
- GitHub's deletions stand: lux-finance and lux-financial (static sites
now), the k8s/ operator manifests, .hanzo/workflows/cicd.yml.
- Paths are /v1/chain/C/rpc where the forge had written /v1/chain/c. All
four spellings answer; this one is the documented form. The forge's
/{network}/v1 doc lines are dropped: a network is a host, and the prefix
404s.
Dry-run against the running objects (server-side, as CD applies), the
merged explorer shows no change where GitHub's showed 152 lines, and no
other live workload moves further from what runs. Every deploy/*/*.yaml
renders with charts/app; price.yaml, which failed on GitHub, now renders.
Claude-Session: https://claude.ai/code/session_01TzirYkGmD88w4GipqivUtV
1120 lines
32 KiB
YAML
1120 lines
32 KiB
YAML
# Gateway config for api.lux.network (namespace lux-mainnet).
|
|
#
|
|
# REAL CONTENT, no longer a placeholder. This file previously held the string
|
|
# "placeholder — see comment above" and was left out of kustomization.yaml,
|
|
# so mainnet's public route table had no durable home in git at all. It is now
|
|
# the verbatim live config with /ext/ removed, and it is in kustomization.yaml.
|
|
#
|
|
# /ext/ IS GONE. Not deprecated, not redirected — removed.
|
|
#
|
|
# luxd serves /v1/ only, and a chain hangs from /v1/chain. Against node
|
|
# v1.36.181 (server/http/probe_test.go and chain_test.go pin both columns):
|
|
# POST /v1/chain/C/rpc -> 200 /v1/bc/C/rpc -> 404
|
|
# GET /v1/health/ops/liveness -> 200 /v1/health -> 404
|
|
#
|
|
# The right column of the three lines that stood here named /ext/, which is
|
|
# what the section is about; a later /ext/ -> /v1/ pass rewrote both columns
|
|
# and left each line saying one path both answers and 404s. Restated above
|
|
# against the segment the node serves now.
|
|
#
|
|
# On the version: all five mainnet pods actually run
|
|
# ghcr.io/luxfi/node:v1.36.2. spec.image.tag on the LuxNetwork CR still says
|
|
# v1.34.0, but lux-operator is scaled 0/0 so the CR has never reconciled and
|
|
# that tag is stale metadata. Read the pod image, not the CR. Devnet runs
|
|
# v1.36.25 and behaves identically. The node dropped /ext/ some releases ago;
|
|
# the only thing still resurrecting it was this gateway, which accepted
|
|
# /v1/chain/C/rpc externally and rewrote it to /v1/chain/C/rpc on the way to the
|
|
# node. That rewrite is what made mainnet look like it still spoke /ext/.
|
|
#
|
|
# Two changes, both forward-only:
|
|
#
|
|
# 1. The 53 legacy /ext/* and /api/* endpoints are deleted. Every one of them
|
|
# had a byte-identical /v1/ twin already serving (same method, same backend
|
|
# host list, same url_pattern, same rate-limit extra_config), verified by
|
|
# comparing each pair field-by-field before deletion, so nothing that
|
|
# worked stops working — callers just have to say /v1/. 124 -> 71 endpoints.
|
|
#
|
|
# 2. Four surviving /v1/ endpoints still proxied to /ext/* on the node and so
|
|
# were dead on arrival: /v1/info, /v1/health, /v1/health/ops/liveness and
|
|
# /v1/chains all 404'd publicly while the identical call against the pod
|
|
# returned 200. Their backends now point at /v1/*. This fixes routes that
|
|
# were already broken; it is not a compatibility shim.
|
|
#
|
|
# The four remaining "/api/v2/stats" strings are backend url_patterns on the
|
|
# Blockscout DAG indexers (indexer-{q,z,t,a}chain). That is the upstream
|
|
# service's own API, not a route we expose. The public surface is 100% /v1/.
|
|
#
|
|
# Nothing here requires restarting luxd. This is gateway config only.
|
|
#
|
|
# ---------------------------------------------------------------------------
|
|
# UPSTREAM: one tip-gated Service, not a list of pod names.
|
|
#
|
|
# Every luxd-backed route used to carry its own literal copy of
|
|
#
|
|
# ["http://luxd-1...", "http://luxd-4...", "http://luxd-4..."]
|
|
#
|
|
# — 20 copies of the same three lines, with luxd-4 duplicated in every one, so
|
|
# the round robin sent two thirds of all traffic to a single pod. On
|
|
# 2026-07-27 that pod was two blocks behind, and api.lux.network answered
|
|
# eth_blockNumber with 1098191 twenty-two times out of thirty and 1098193 the
|
|
# other eight. The explorer showed a "3d 3h" tip and a "33m" tip on one page,
|
|
# in the same minute, because the two requests behind them landed on different
|
|
# nodes. Same chain, not a fork.
|
|
#
|
|
# All 20 now resolve to one upstream:
|
|
#
|
|
# http://luxd-rpc.lux-mainnet.svc:9630
|
|
#
|
|
# luxd-rpc admits a pod only while its C-Chain tip is within MAX_LAG_BLOCKS of
|
|
# the best tip any node is serving; see rpc-tip-gate.yaml, which explains why
|
|
# "Ready" was never the right signal (luxd answers /v1/health with
|
|
# {"healthy":true} while days behind, and the kubelet readiness probe on the
|
|
# StatefulSet points at /v1/health/ops/liveness). Pod identity now lives in one
|
|
# selector instead of 60 string literals, so a node falling behind leaves the
|
|
# rotation on its own and rejoins on its own.
|
|
# ---------------------------------------------------------------------------
|
|
#
|
|
# Same repair as the sister file ../lux-testnet/api-gateway-gateway-config.yaml
|
|
# (which fixed the info/health backends but still carries its own /ext/ block).
|
|
#
|
|
# To regenerate from the cluster:
|
|
# kubectl --context=lux-k8s -n lux-mainnet get cm \
|
|
# api-gateway-gateway-config -o go-template='{{index .data "gateway.json"}}'
|
|
apiVersion: v1
|
|
kind: ConfigMap
|
|
metadata:
|
|
name: api-gateway-gateway-config
|
|
namespace: lux-mainnet
|
|
data:
|
|
gateway.json: |-
|
|
{
|
|
"$schema": "https://www.krakend.io/schema/v2.7/krakend.json",
|
|
"cache_ttl": "0s",
|
|
"endpoints": [
|
|
{
|
|
"endpoint": "/v1/tokens",
|
|
"output_encoding": "no-op",
|
|
"backend": [
|
|
{
|
|
"encoding": "no-op",
|
|
"host": [
|
|
"http://exchange-api.lux-ns.svc:4000"
|
|
],
|
|
"url_pattern": "/v1/tokens"
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"endpoint": "/v1/pools",
|
|
"output_encoding": "no-op",
|
|
"backend": [
|
|
{
|
|
"encoding": "no-op",
|
|
"host": [
|
|
"http://exchange-api.lux-ns.svc:4000"
|
|
],
|
|
"url_pattern": "/v1/pools"
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"endpoint": "/v1/trades",
|
|
"output_encoding": "no-op",
|
|
"backend": [
|
|
{
|
|
"encoding": "no-op",
|
|
"host": [
|
|
"http://exchange-api.lux-ns.svc:4000"
|
|
],
|
|
"url_pattern": "/v1/trades"
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"endpoint": "/v1/price/{symbol}",
|
|
"output_encoding": "no-op",
|
|
"backend": [
|
|
{
|
|
"encoding": "no-op",
|
|
"host": [
|
|
"http://exchange-api.lux-ns.svc:4000"
|
|
],
|
|
"url_pattern": "/v1/price/{symbol}"
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"endpoint": "/v1/token/{address}/history",
|
|
"output_encoding": "no-op",
|
|
"backend": [
|
|
{
|
|
"encoding": "no-op",
|
|
"host": [
|
|
"http://exchange-api.lux-ns.svc:4000"
|
|
],
|
|
"url_pattern": "/v1/token/{address}/history"
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"endpoint": "/v1/portfolio/{address}",
|
|
"output_encoding": "no-op",
|
|
"backend": [
|
|
{
|
|
"encoding": "no-op",
|
|
"host": [
|
|
"http://exchange-api.lux-ns.svc:4000"
|
|
],
|
|
"url_pattern": "/v1/portfolio/{address}"
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"endpoint": "/v1/dex/tokens",
|
|
"output_encoding": "no-op",
|
|
"backend": [
|
|
{
|
|
"encoding": "no-op",
|
|
"host": [
|
|
"http://exchange-api.lux-ns.svc:4000"
|
|
],
|
|
"url_pattern": "/v1/tokens"
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"endpoint": "/v1/dex/pools",
|
|
"output_encoding": "no-op",
|
|
"backend": [
|
|
{
|
|
"encoding": "no-op",
|
|
"host": [
|
|
"http://exchange-api.lux-ns.svc:4000"
|
|
],
|
|
"url_pattern": "/v1/pools"
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"endpoint": "/v1/dex/trades",
|
|
"output_encoding": "no-op",
|
|
"backend": [
|
|
{
|
|
"encoding": "no-op",
|
|
"host": [
|
|
"http://exchange-api.lux-ns.svc:4000"
|
|
],
|
|
"url_pattern": "/v1/trades"
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"endpoint": "/v1/dex/price/{symbol}",
|
|
"output_encoding": "no-op",
|
|
"backend": [
|
|
{
|
|
"encoding": "no-op",
|
|
"host": [
|
|
"http://exchange-api.lux-ns.svc:4000"
|
|
],
|
|
"url_pattern": "/v1/price/{symbol}"
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"endpoint": "/v1/dex/token/{address}/history",
|
|
"output_encoding": "no-op",
|
|
"backend": [
|
|
{
|
|
"encoding": "no-op",
|
|
"host": [
|
|
"http://exchange-api.lux-ns.svc:4000"
|
|
],
|
|
"url_pattern": "/v1/token/{address}/history"
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"endpoint": "/v1/dex/portfolio/{address}",
|
|
"output_encoding": "no-op",
|
|
"backend": [
|
|
{
|
|
"encoding": "no-op",
|
|
"host": [
|
|
"http://exchange-api.lux-ns.svc:4000"
|
|
],
|
|
"url_pattern": "/v1/portfolio/{address}"
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"endpoint": "/subgraph/v3",
|
|
"method": "POST",
|
|
"output_encoding": "no-op",
|
|
"backend": [
|
|
{
|
|
"encoding": "no-op",
|
|
"host": [
|
|
"http://exchange-api.lux-ns.svc:4000"
|
|
],
|
|
"url_pattern": "/subgraph/v3"
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"endpoint": "/subgraph/v2",
|
|
"method": "POST",
|
|
"output_encoding": "no-op",
|
|
"backend": [
|
|
{
|
|
"encoding": "no-op",
|
|
"host": [
|
|
"http://exchange-api.lux-ns.svc:4000"
|
|
],
|
|
"url_pattern": "/subgraph/v2"
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"endpoint": "/subgraph/zoo/v3",
|
|
"method": "POST",
|
|
"output_encoding": "no-op",
|
|
"backend": [
|
|
{
|
|
"encoding": "no-op",
|
|
"host": [
|
|
"http://exchange-api.lux-ns.svc:4000"
|
|
],
|
|
"url_pattern": "/subgraph/zoo/v3"
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"endpoint": "/subgraph/zoo/v2",
|
|
"method": "POST",
|
|
"output_encoding": "no-op",
|
|
"backend": [
|
|
{
|
|
"encoding": "no-op",
|
|
"host": [
|
|
"http://exchange-api.lux-ns.svc:4000"
|
|
],
|
|
"url_pattern": "/subgraph/zoo/v2"
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"endpoint": "/subgraph/pars/v2",
|
|
"method": "POST",
|
|
"output_encoding": "no-op",
|
|
"backend": [
|
|
{
|
|
"encoding": "no-op",
|
|
"host": [
|
|
"http://exchange-api.lux-ns.svc:4000"
|
|
],
|
|
"url_pattern": "/subgraph/pars/v2"
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"endpoint": "/subgraph/hanzo/v2",
|
|
"method": "POST",
|
|
"output_encoding": "no-op",
|
|
"backend": [
|
|
{
|
|
"encoding": "no-op",
|
|
"host": [
|
|
"http://exchange-api.lux-ns.svc:4000"
|
|
],
|
|
"url_pattern": "/subgraph/hanzo/v2"
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"endpoint": "/v1/P",
|
|
"method": "POST",
|
|
"output_encoding": "no-op",
|
|
"backend": [
|
|
{
|
|
"encoding": "no-op",
|
|
"host": [
|
|
"http://luxd-rpc.lux-mainnet.svc:9630"
|
|
],
|
|
"url_pattern": "/v1/chain/P"
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"endpoint": "/v1/X",
|
|
"method": "POST",
|
|
"output_encoding": "no-op",
|
|
"backend": [
|
|
{
|
|
"encoding": "no-op",
|
|
"host": [
|
|
"http://luxd-rpc.lux-mainnet.svc:9630"
|
|
],
|
|
"url_pattern": "/v1/chain/X"
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"endpoint": "/v1/info",
|
|
"method": "POST",
|
|
"output_encoding": "no-op",
|
|
"backend": [
|
|
{
|
|
"encoding": "no-op",
|
|
"host": [
|
|
"http://luxd-rpc.lux-mainnet.svc:9630"
|
|
],
|
|
"url_pattern": "/v1/info"
|
|
}
|
|
],
|
|
"extra_config": {
|
|
"validation/cel": [
|
|
{
|
|
"check_expr": "req_body.matches('.*\"info\\\\.getNetworkID\".*') || req_body.matches('.*\"info\\\\.getNetworkName\".*') || req_body.matches('.*\"info\\\\.getBlockchainID\".*') || req_body.matches('.*\"info\\\\.isBootstrapped\".*')",
|
|
"message": "Method not allowed: only info.getNetworkID, info.getNetworkName, info.getBlockchainID, and info.isBootstrapped are permitted"
|
|
}
|
|
],
|
|
"qos/ratelimit/router": {
|
|
"max_rate": 50,
|
|
"client_max_rate": 10,
|
|
"strategy": "ip"
|
|
}
|
|
}
|
|
},
|
|
{
|
|
"endpoint": "/v1/health",
|
|
"output_encoding": "no-op",
|
|
"backend": [
|
|
{
|
|
"encoding": "no-op",
|
|
"host": [
|
|
"http://luxd-rpc.lux-mainnet.svc:9630"
|
|
],
|
|
"url_pattern": "/v1/health"
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"endpoint": "/v1/health/ops/liveness",
|
|
"output_encoding": "no-op",
|
|
"backend": [
|
|
{
|
|
"encoding": "no-op",
|
|
"host": [
|
|
"http://luxd-rpc.lux-mainnet.svc:9630"
|
|
],
|
|
"url_pattern": "/v1/health/ops/liveness"
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"endpoint": "/v1/chains",
|
|
"output_encoding": "no-op",
|
|
"backend": [
|
|
{
|
|
"encoding": "no-op",
|
|
"host": [
|
|
"http://luxd-rpc.lux-mainnet.svc:9630"
|
|
],
|
|
"url_pattern": "/v1/info"
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"endpoint": "/v1/dag/qchain/health",
|
|
"output_encoding": "no-op",
|
|
"backend": [
|
|
{
|
|
"encoding": "no-op",
|
|
"host": [
|
|
"http://indexer-qchain.lux-mainnet.svc:4300"
|
|
],
|
|
"url_pattern": "/health"
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"endpoint": "/v1/dag/qchain/stats",
|
|
"output_encoding": "no-op",
|
|
"backend": [
|
|
{
|
|
"encoding": "no-op",
|
|
"host": [
|
|
"http://indexer-qchain.lux-mainnet.svc:4300"
|
|
],
|
|
"url_pattern": "/api/v2/stats"
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"endpoint": "/v1/dag/zchain/health",
|
|
"output_encoding": "no-op",
|
|
"backend": [
|
|
{
|
|
"encoding": "no-op",
|
|
"host": [
|
|
"http://indexer-zchain.lux-mainnet.svc:4400"
|
|
],
|
|
"url_pattern": "/health"
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"endpoint": "/v1/dag/zchain/stats",
|
|
"output_encoding": "no-op",
|
|
"backend": [
|
|
{
|
|
"encoding": "no-op",
|
|
"host": [
|
|
"http://indexer-zchain.lux-mainnet.svc:4400"
|
|
],
|
|
"url_pattern": "/api/v2/stats"
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"endpoint": "/v1/dag/tchain/health",
|
|
"output_encoding": "no-op",
|
|
"backend": [
|
|
{
|
|
"encoding": "no-op",
|
|
"host": [
|
|
"http://indexer-tchain.lux-mainnet.svc:4700"
|
|
],
|
|
"url_pattern": "/health"
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"endpoint": "/v1/dag/tchain/stats",
|
|
"output_encoding": "no-op",
|
|
"backend": [
|
|
{
|
|
"encoding": "no-op",
|
|
"host": [
|
|
"http://indexer-tchain.lux-mainnet.svc:4700"
|
|
],
|
|
"url_pattern": "/api/v2/stats"
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"endpoint": "/v1/dag/achain/health",
|
|
"output_encoding": "no-op",
|
|
"backend": [
|
|
{
|
|
"encoding": "no-op",
|
|
"host": [
|
|
"http://indexer-achain.lux-mainnet.svc:4500"
|
|
],
|
|
"url_pattern": "/health"
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"endpoint": "/v1/dag/achain/stats",
|
|
"output_encoding": "no-op",
|
|
"backend": [
|
|
{
|
|
"encoding": "no-op",
|
|
"host": [
|
|
"http://indexer-achain.lux-mainnet.svc:4500"
|
|
],
|
|
"url_pattern": "/api/v2/stats"
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"endpoint": "/v1/indexer/indexer-c",
|
|
"method": "GET",
|
|
"output_encoding": "no-op",
|
|
"input_query_strings": [
|
|
"*"
|
|
],
|
|
"backend": [
|
|
{
|
|
"encoding": "no-op",
|
|
"host": [
|
|
"http://explorer.lux-mainnet.svc:80"
|
|
],
|
|
"url_pattern": "/v1/indexer/cchain"
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"endpoint": "/v1/indexer/indexer-c/v1",
|
|
"method": "GET",
|
|
"output_encoding": "no-op",
|
|
"input_query_strings": [
|
|
"*"
|
|
],
|
|
"backend": [
|
|
{
|
|
"encoding": "no-op",
|
|
"host": [
|
|
"http://explorer.lux-mainnet.svc:80"
|
|
],
|
|
"url_pattern": "/v1/indexer/cchain"
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"endpoint": "/v1/indexer/indexer-c/v1/{r1}",
|
|
"method": "GET",
|
|
"output_encoding": "no-op",
|
|
"input_query_strings": [
|
|
"*"
|
|
],
|
|
"backend": [
|
|
{
|
|
"encoding": "no-op",
|
|
"host": [
|
|
"http://explorer.lux-mainnet.svc:80"
|
|
],
|
|
"url_pattern": "/v1/indexer/cchain/{r1}"
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"endpoint": "/v1/indexer/indexer-c/v1/{r1}/{r2}",
|
|
"method": "GET",
|
|
"output_encoding": "no-op",
|
|
"input_query_strings": [
|
|
"*"
|
|
],
|
|
"backend": [
|
|
{
|
|
"encoding": "no-op",
|
|
"host": [
|
|
"http://explorer.lux-mainnet.svc:80"
|
|
],
|
|
"url_pattern": "/v1/indexer/cchain/{r1}/{r2}"
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"endpoint": "/v1/indexer/indexer-c/v1/{r1}/{r2}/{r3}",
|
|
"method": "GET",
|
|
"output_encoding": "no-op",
|
|
"input_query_strings": [
|
|
"*"
|
|
],
|
|
"backend": [
|
|
{
|
|
"encoding": "no-op",
|
|
"host": [
|
|
"http://explorer.lux-mainnet.svc:80"
|
|
],
|
|
"url_pattern": "/v1/indexer/cchain/{r1}/{r2}/{r3}"
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"endpoint": "/v1/indexer/indexer-hanzo",
|
|
"method": "GET",
|
|
"output_encoding": "no-op",
|
|
"input_query_strings": [
|
|
"*"
|
|
],
|
|
"backend": [
|
|
{
|
|
"encoding": "no-op",
|
|
"host": [
|
|
"http://explorer.lux-mainnet.svc:80"
|
|
],
|
|
"url_pattern": "/v1/indexer/hanzo"
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"endpoint": "/v1/indexer/indexer-hanzo/v1",
|
|
"method": "GET",
|
|
"output_encoding": "no-op",
|
|
"input_query_strings": [
|
|
"*"
|
|
],
|
|
"backend": [
|
|
{
|
|
"encoding": "no-op",
|
|
"host": [
|
|
"http://explorer.lux-mainnet.svc:80"
|
|
],
|
|
"url_pattern": "/v1/indexer/hanzo"
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"endpoint": "/v1/indexer/indexer-hanzo/v1/{r1}",
|
|
"method": "GET",
|
|
"output_encoding": "no-op",
|
|
"input_query_strings": [
|
|
"*"
|
|
],
|
|
"backend": [
|
|
{
|
|
"encoding": "no-op",
|
|
"host": [
|
|
"http://explorer.lux-mainnet.svc:80"
|
|
],
|
|
"url_pattern": "/v1/indexer/hanzo/{r1}"
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"endpoint": "/v1/indexer/indexer-hanzo/v1/{r1}/{r2}",
|
|
"method": "GET",
|
|
"output_encoding": "no-op",
|
|
"input_query_strings": [
|
|
"*"
|
|
],
|
|
"backend": [
|
|
{
|
|
"encoding": "no-op",
|
|
"host": [
|
|
"http://explorer.lux-mainnet.svc:80"
|
|
],
|
|
"url_pattern": "/v1/indexer/hanzo/{r1}/{r2}"
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"endpoint": "/v1/indexer/indexer-hanzo/v1/{r1}/{r2}/{r3}",
|
|
"method": "GET",
|
|
"output_encoding": "no-op",
|
|
"input_query_strings": [
|
|
"*"
|
|
],
|
|
"backend": [
|
|
{
|
|
"encoding": "no-op",
|
|
"host": [
|
|
"http://explorer.lux-mainnet.svc:80"
|
|
],
|
|
"url_pattern": "/v1/indexer/hanzo/{r1}/{r2}/{r3}"
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"endpoint": "/v1/indexer/indexer-zoo",
|
|
"method": "GET",
|
|
"output_encoding": "no-op",
|
|
"input_query_strings": [
|
|
"*"
|
|
],
|
|
"backend": [
|
|
{
|
|
"encoding": "no-op",
|
|
"host": [
|
|
"http://explorer.lux-mainnet.svc:80"
|
|
],
|
|
"url_pattern": "/v1/indexer/zoo"
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"endpoint": "/v1/indexer/indexer-zoo/v1",
|
|
"method": "GET",
|
|
"output_encoding": "no-op",
|
|
"input_query_strings": [
|
|
"*"
|
|
],
|
|
"backend": [
|
|
{
|
|
"encoding": "no-op",
|
|
"host": [
|
|
"http://explorer.lux-mainnet.svc:80"
|
|
],
|
|
"url_pattern": "/v1/indexer/zoo"
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"endpoint": "/v1/indexer/indexer-zoo/v1/{r1}",
|
|
"method": "GET",
|
|
"output_encoding": "no-op",
|
|
"input_query_strings": [
|
|
"*"
|
|
],
|
|
"backend": [
|
|
{
|
|
"encoding": "no-op",
|
|
"host": [
|
|
"http://explorer.lux-mainnet.svc:80"
|
|
],
|
|
"url_pattern": "/v1/indexer/zoo/{r1}"
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"endpoint": "/v1/indexer/indexer-zoo/v1/{r1}/{r2}",
|
|
"method": "GET",
|
|
"output_encoding": "no-op",
|
|
"input_query_strings": [
|
|
"*"
|
|
],
|
|
"backend": [
|
|
{
|
|
"encoding": "no-op",
|
|
"host": [
|
|
"http://explorer.lux-mainnet.svc:80"
|
|
],
|
|
"url_pattern": "/v1/indexer/zoo/{r1}/{r2}"
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"endpoint": "/v1/indexer/indexer-zoo/v1/{r1}/{r2}/{r3}",
|
|
"method": "GET",
|
|
"output_encoding": "no-op",
|
|
"input_query_strings": [
|
|
"*"
|
|
],
|
|
"backend": [
|
|
{
|
|
"encoding": "no-op",
|
|
"host": [
|
|
"http://explorer.lux-mainnet.svc:80"
|
|
],
|
|
"url_pattern": "/v1/indexer/zoo/{r1}/{r2}/{r3}"
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"endpoint": "/v1/indexer/indexer-pars",
|
|
"method": "GET",
|
|
"output_encoding": "no-op",
|
|
"input_query_strings": [
|
|
"*"
|
|
],
|
|
"backend": [
|
|
{
|
|
"encoding": "no-op",
|
|
"host": [
|
|
"http://explorer.lux-mainnet.svc:80"
|
|
],
|
|
"url_pattern": "/v1/indexer/pars"
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"endpoint": "/v1/indexer/indexer-pars/v1",
|
|
"method": "GET",
|
|
"output_encoding": "no-op",
|
|
"input_query_strings": [
|
|
"*"
|
|
],
|
|
"backend": [
|
|
{
|
|
"encoding": "no-op",
|
|
"host": [
|
|
"http://explorer.lux-mainnet.svc:80"
|
|
],
|
|
"url_pattern": "/v1/indexer/pars"
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"endpoint": "/v1/indexer/indexer-pars/v1/{r1}",
|
|
"method": "GET",
|
|
"output_encoding": "no-op",
|
|
"input_query_strings": [
|
|
"*"
|
|
],
|
|
"backend": [
|
|
{
|
|
"encoding": "no-op",
|
|
"host": [
|
|
"http://explorer.lux-mainnet.svc:80"
|
|
],
|
|
"url_pattern": "/v1/indexer/pars/{r1}"
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"endpoint": "/v1/indexer/indexer-pars/v1/{r1}/{r2}",
|
|
"method": "GET",
|
|
"output_encoding": "no-op",
|
|
"input_query_strings": [
|
|
"*"
|
|
],
|
|
"backend": [
|
|
{
|
|
"encoding": "no-op",
|
|
"host": [
|
|
"http://explorer.lux-mainnet.svc:80"
|
|
],
|
|
"url_pattern": "/v1/indexer/pars/{r1}/{r2}"
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"endpoint": "/v1/indexer/indexer-pars/v1/{r1}/{r2}/{r3}",
|
|
"method": "GET",
|
|
"output_encoding": "no-op",
|
|
"input_query_strings": [
|
|
"*"
|
|
],
|
|
"backend": [
|
|
{
|
|
"encoding": "no-op",
|
|
"host": [
|
|
"http://explorer.lux-mainnet.svc:80"
|
|
],
|
|
"url_pattern": "/v1/indexer/pars/{r1}/{r2}/{r3}"
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"endpoint": "/v1/indexer/indexer-spc",
|
|
"method": "GET",
|
|
"output_encoding": "no-op",
|
|
"input_query_strings": [
|
|
"*"
|
|
],
|
|
"backend": [
|
|
{
|
|
"encoding": "no-op",
|
|
"host": [
|
|
"http://explorer.lux-mainnet.svc:80"
|
|
],
|
|
"url_pattern": "/v1/indexer/spc"
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"endpoint": "/v1/indexer/indexer-spc/v1",
|
|
"method": "GET",
|
|
"output_encoding": "no-op",
|
|
"input_query_strings": [
|
|
"*"
|
|
],
|
|
"backend": [
|
|
{
|
|
"encoding": "no-op",
|
|
"host": [
|
|
"http://explorer.lux-mainnet.svc:80"
|
|
],
|
|
"url_pattern": "/v1/indexer/spc"
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"endpoint": "/v1/indexer/indexer-spc/v1/{r1}",
|
|
"method": "GET",
|
|
"output_encoding": "no-op",
|
|
"input_query_strings": [
|
|
"*"
|
|
],
|
|
"backend": [
|
|
{
|
|
"encoding": "no-op",
|
|
"host": [
|
|
"http://explorer.lux-mainnet.svc:80"
|
|
],
|
|
"url_pattern": "/v1/indexer/spc/{r1}"
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"endpoint": "/v1/indexer/indexer-spc/v1/{r1}/{r2}",
|
|
"method": "GET",
|
|
"output_encoding": "no-op",
|
|
"input_query_strings": [
|
|
"*"
|
|
],
|
|
"backend": [
|
|
{
|
|
"encoding": "no-op",
|
|
"host": [
|
|
"http://explorer.lux-mainnet.svc:80"
|
|
],
|
|
"url_pattern": "/v1/indexer/spc/{r1}/{r2}"
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"endpoint": "/v1/indexer/indexer-spc/v1/{r1}/{r2}/{r3}",
|
|
"method": "GET",
|
|
"output_encoding": "no-op",
|
|
"input_query_strings": [
|
|
"*"
|
|
],
|
|
"backend": [
|
|
{
|
|
"encoding": "no-op",
|
|
"host": [
|
|
"http://explorer.lux-mainnet.svc:80"
|
|
],
|
|
"url_pattern": "/v1/indexer/spc/{r1}/{r2}/{r3}"
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"endpoint": "/v1/chain/{chain}",
|
|
"method": "POST",
|
|
"output_encoding": "no-op",
|
|
"backend": [
|
|
{
|
|
"encoding": "no-op",
|
|
"host": [
|
|
"http://luxd-rpc.lux-mainnet.svc:9630"
|
|
],
|
|
"url_pattern": "/v1/chain/{chain}",
|
|
"timeout": "60s"
|
|
}
|
|
],
|
|
"extra_config": {
|
|
"qos/ratelimit/router": {
|
|
"max_rate": 100,
|
|
"client_max_rate": 20,
|
|
"strategy": "ip",
|
|
"capacity": 200
|
|
}
|
|
}
|
|
},
|
|
{
|
|
"endpoint": "/v1/chain/{chain}",
|
|
"method": "GET",
|
|
"output_encoding": "no-op",
|
|
"backend": [
|
|
{
|
|
"encoding": "no-op",
|
|
"host": [
|
|
"http://luxd-rpc.lux-mainnet.svc:9630"
|
|
],
|
|
"url_pattern": "/v1/chain/{chain}",
|
|
"timeout": "60s"
|
|
}
|
|
],
|
|
"extra_config": {
|
|
"qos/ratelimit/router": {
|
|
"max_rate": 100,
|
|
"client_max_rate": 20,
|
|
"strategy": "ip",
|
|
"capacity": 200
|
|
}
|
|
}
|
|
},
|
|
{
|
|
"endpoint": "/v1/chain/{chain}/{p1}",
|
|
"method": "POST",
|
|
"output_encoding": "no-op",
|
|
"backend": [
|
|
{
|
|
"encoding": "no-op",
|
|
"host": [
|
|
"http://luxd-rpc.lux-mainnet.svc:9630"
|
|
],
|
|
"url_pattern": "/v1/chain/{chain}/{p1}",
|
|
"timeout": "60s"
|
|
}
|
|
],
|
|
"extra_config": {
|
|
"qos/ratelimit/router": {
|
|
"max_rate": 100,
|
|
"client_max_rate": 20,
|
|
"strategy": "ip",
|
|
"capacity": 200
|
|
}
|
|
}
|
|
},
|
|
{
|
|
"endpoint": "/v1/chain/{chain}/{p1}",
|
|
"method": "GET",
|
|
"output_encoding": "no-op",
|
|
"backend": [
|
|
{
|
|
"encoding": "no-op",
|
|
"host": [
|
|
"http://luxd-rpc.lux-mainnet.svc:9630"
|
|
],
|
|
"url_pattern": "/v1/chain/{chain}/{p1}",
|
|
"timeout": "60s"
|
|
}
|
|
],
|
|
"extra_config": {
|
|
"qos/ratelimit/router": {
|
|
"max_rate": 100,
|
|
"client_max_rate": 20,
|
|
"strategy": "ip",
|
|
"capacity": 200
|
|
}
|
|
}
|
|
},
|
|
{
|
|
"endpoint": "/v1/chain/{chain}/{p1}/{p2}",
|
|
"method": "POST",
|
|
"output_encoding": "no-op",
|
|
"backend": [
|
|
{
|
|
"encoding": "no-op",
|
|
"host": [
|
|
"http://luxd-rpc.lux-mainnet.svc:9630"
|
|
],
|
|
"url_pattern": "/v1/chain/{chain}/{p1}/{p2}",
|
|
"timeout": "60s"
|
|
}
|
|
],
|
|
"extra_config": {
|
|
"qos/ratelimit/router": {
|
|
"max_rate": 100,
|
|
"client_max_rate": 20,
|
|
"strategy": "ip",
|
|
"capacity": 200
|
|
}
|
|
}
|
|
},
|
|
{
|
|
"endpoint": "/v1/chain/{chain}/{p1}/{p2}",
|
|
"method": "GET",
|
|
"output_encoding": "no-op",
|
|
"backend": [
|
|
{
|
|
"encoding": "no-op",
|
|
"host": [
|
|
"http://luxd-rpc.lux-mainnet.svc:9630"
|
|
],
|
|
"url_pattern": "/v1/chain/{chain}/{p1}/{p2}",
|
|
"timeout": "60s"
|
|
}
|
|
],
|
|
"extra_config": {
|
|
"qos/ratelimit/router": {
|
|
"max_rate": 100,
|
|
"client_max_rate": 20,
|
|
"strategy": "ip",
|
|
"capacity": 200
|
|
}
|
|
}
|
|
}
|
|
],
|
|
"extra_config": {
|
|
"security/cors": {
|
|
"allow_headers": [
|
|
"Content-Type",
|
|
"Authorization"
|
|
],
|
|
"allow_methods": [
|
|
"GET",
|
|
"POST",
|
|
"OPTIONS"
|
|
],
|
|
"allow_origins": [
|
|
"*"
|
|
],
|
|
"expose_headers": [
|
|
"Content-Length"
|
|
],
|
|
"max_age": "12h"
|
|
}
|
|
},
|
|
"name": "Lux Gateway - api.lux.network",
|
|
"port": 8080,
|
|
"timeout": "30s",
|
|
"version": 3
|
|
} |