config: give mainnet the two public archive nodes as fallbacks
All checks were successful
deploy / build (push) Successful in 8m10s
deploy / deploy-web (push) Successful in 4s
deploy / deploy-api (push) Successful in 16s

Mainnet was the only chain left on a single endpoint, and that endpoint is our
own node — so a restart on bob took the flagship chain off the site while both
testnets, on two endpoints each, stayed up.

Our node stays first, and has to: loopback pays no network hop, and `127.0.0.1/32`
is the only address whitelisted against its `--rpc-rate-limit 300`. Behind it are
`rpc1-` and `rpc2-mainnet.quantus.com`, both of which answer `archive_v1_*`,
report the same genesis and the same runtime, and accept a `wss://` upgrade.

They took some finding, which is recorded in the template's comment so the next
person does not repeat the search: mainnet uses a different domain *and* a
different prefix from the testnets, its bootnodes serve only p2p on 30333, and
the official explorer talks to a GraphQL indexer rather than to any node at all.

This buys availability, not depth. Failover moves on a transport failure, and a
pruned node answers `{"result": null}` — a success, so a deep state read would
stop at it rather than fall through to a peer that has the answer. Filed as #9.

Closes #8

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Jp6a8EDar9ueEhAxzep4V5
This commit is contained in:
2026-09-10 11:37:06 +03:00
parent 1a59b2d398
commit db9ee142bc

View File

@@ -92,8 +92,32 @@ mainnet = true
# stays in the site's navigation; it is simply no longer navigable, because
# authorship comes from headers and we no longer hold an endpoint that serves
# them. That is the ordinary `no_endpoint` state, not an outage.
rpc_url = "http://127.0.0.1:9944"
ws_url = "ws://127.0.0.1:9944"
# Our own node first, and it must stay first: loopback pays no network hop, and
# `127.0.0.1/32` is the only address whitelisted against the node's own
# `--rpc-rate-limit 300`. Reaching it by its mesh name instead would cap the
# backfill at a hundred blocks a minute for no reason.
#
# The two public archive nodes behind it are the fallback. They were not easy to
# find: mainnet uses a different domain *and* a different prefix from the
# testnets — `rpc1-mainnet.quantus.com`, where Planck has
# `a1-planck.quantus.cat` — and its bootnodes (`a1..a7-p2p-mainnet.quantus.com`)
# expose only port 30333, so they gossip and serve nothing. The official
# explorer is no help either: it talks to a GraphQL indexer rather than to a
# node.
#
# This buys availability, not depth. Failover moves on a transport failure, and
# a node that has pruned answers `{"result": null}` — a success, so a deep read
# stops at it rather than falling through to a peer that holds the state. #9.
rpc_urls = [
"http://127.0.0.1:9944",
"https://rpc1-mainnet.quantus.com",
"https://rpc2-mainnet.quantus.com",
]
ws_urls = [
"ws://127.0.0.1:9944",
"wss://rpc1-mainnet.quantus.com",
"wss://rpc2-mainnet.quantus.com",
]
# TWELVE, not the 6.0 Planck used. `TARGET_BLOCK_TIME_MS` is 12_000 in the
# runtime bob actually runs — verified at commit b017e642, which is the
# `0.11.1-b017e6420aa` its `system_version` reports, not merely at the tip of