From db9ee142bca8a7983e5a8e3e3a4e6f2cbd0a6726 Mon Sep 17 00:00:00 2001 From: rob thijssen Date: Thu, 10 Sep 2026 11:37:06 +0300 Subject: [PATCH] config: give mainnet the two public archive nodes as fallbacks MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 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 Claude-Session: https://claude.ai/code/session_01Jp6a8EDar9ueEhAxzep4V5 --- asset/config/config.toml.tmpl | 28 ++++++++++++++++++++++++++-- 1 file changed, 26 insertions(+), 2 deletions(-) diff --git a/asset/config/config.toml.tmpl b/asset/config/config.toml.tmpl index 0d872e5..7b2706b 100644 --- a/asset/config/config.toml.tmpl +++ b/asset/config/config.toml.tmpl @@ -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