From 27a4f3030408b04d164d9c5880dca3a732734ff4 Mon Sep 17 00:00:00 2001 From: rob thijssen Date: Thu, 10 Sep 2026 11:10:03 +0300 Subject: [PATCH] feat: index Planck MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit `a1-planck.quantus.cat` answers, and has all along. The config comment claimed Planck "publishes no RPC endpoint we can find" — true when written, and never rechecked after the node we ran for it was switched to mainnet. A million blocks of history and 2.38M zk-tree leaves were sitting there unasked for. Measured before committing to it. Three chains backfilling at once cost 4.8% of one core, five of eight Postgres connections with one active, and no movement in API latency — summary 7 ms p95, block 13 ms, account 49 ms. The walk is bound by RPC round trips rather than by anything local, so it needs no deployable of its own; and `backfill` only reads in-memory state while writing solely to Postgres, so it contends with nothing the API serves. Unthrottled deliberately: ~46 hours at roughly 20 requests a second against a public node. Leaning on public decentralised testnet infrastructure exercises what it is there for. Restart resilience confirmed by killing the process mid-walk — `event_scan.low` stayed put rather than jumping back to the tip. That is load-bearing here rather than tidy, because the cert-rotation path restarts this service several times a day and a cursor in memory would mean Planck never finishing. `a2-planck` answers too, and is noted for when a chain can hold more than one endpoint. Closes #6 Co-Authored-By: Claude Opus 5 Claude-Session: https://claude.ai/code/session_01Jp6a8EDar9ueEhAxzep4V5 --- asset/config/config.toml.tmpl | 33 ++++++++++++++++++++++++++++----- readme.md | 19 +++++++++++++++++++ 2 files changed, 47 insertions(+), 5 deletions(-) diff --git a/asset/config/config.toml.tmpl b/asset/config/config.toml.tmpl index 7e1238c..5a84362 100644 --- a/asset/config/config.toml.tmpl +++ b/asset/config/config.toml.tmpl @@ -121,11 +121,34 @@ target_block_time_seconds = 6.0 warm_start_blocks = 100800 max_gap_fill_blocks = 5000 -# Planck, Quantus Staging Mainnet and Quantus Dirac Testnet are listed in the -# nav from telemetry and are NOT navigable: none publishes an RPC endpoint we -# can find, and the one node we ran for Planck now mines mainnet. The pattern for the ones that do is `a1-.quantus.cat` / -# `a2-.quantus.cat`; if endpoints appear for those chains, each becomes a -# [[chains]] block like the two above and nothing else changes. +[[chains]] +id = "planck" +display_name = "Planck" +genesis = "0x4901bf5c57fd3f9e726af399c763de6670dbdb115a91c0237e173f16eef65e72" +# Public, and operated by the Quantus team. The node we used to run for Planck +# now mines mainnet, which is why this entry was absent for a while — the chain +# was reachable the whole time and nothing here was asking. +# +# Backfilling a million blocks is roughly two days at ~20 requests a second +# against someone else's node, deliberately unthrottled: leaning on public +# decentralised testnet infrastructure is what it is for. Measured alongside the +# other two chains it costs about 5% of one core and does not move API latency — +# the walk is bound by RPC round trips, not by anything here. +rpc_url = "https://a1-planck.quantus.cat" +ws_url = "wss://a1-planck.quantus.cat" +# A testnet, so the nav files it under `TESTNETS` and says its balances are not +# real. Never inferred from the name — see `mainnet` above. +target_block_time_seconds = 6.0 +warm_start_blocks = 100800 +max_gap_fill_blocks = 5000 + +# Quantus Staging Mainnet and Quantus Dirac Testnet are listed in the nav from +# telemetry and are NOT navigable: neither publishes an RPC endpoint we can +# find. The pattern for the ones that do is `a1-.quantus.cat` / +# `a2-.quantus.cat` — `a2-planck` answers too, and will be worth having +# once a chain can hold more than one endpoint. If endpoints appear for those +# chains, each becomes a [[chains]] block like the three above and nothing else +# changes. # # Mainnet launched on 2026-09-09 as telemetry's "Quantus", and is the # `[[chains]]` entry above. "Quantus Staging Mainnet" is a different, staging diff --git a/readme.md b/readme.md index 4fb1e83..af2c647 100644 --- a/readme.md +++ b/readme.md @@ -528,6 +528,25 @@ deliberate exception is a height resolving to its hash, which *replaces* rather than pushes — it is the same block under a better name, not a second place the reader has been. +## Backfill is cheap, and bound by somebody else's node + +Three chains walking their history at once — mainnet, Heisenberg and Planck's +million blocks — costs about **5% of one core**, holds five of eight Postgres +connections with one active, and does not move API latency: `summary` at 7 ms +p95, `block` at 13 ms. The walk is bound by RPC round trips, not by anything +here, which is why it needs no deployable of its own. + +It is also separable if it ever does. `backfill` only *reads* in-memory state — +the tip height and the current runtime — and writes exclusively to Postgres, so +it contends with nothing the API serves. Live `ingest` is the half that could +not move: it feeds the window, the ticker and the attributions that the API +answers from. + +Progress survives a restart because `event_scan` is a table rather than a field. +That is load-bearing rather than tidy: `blackbeard-api-cert.path` restarts the +service several times a day when the host certificate rotates, and a cursor in +memory would mean Planck never finishing. + ## Data Postgres on `magrathea.kosherinata.internal`, mTLS and passwordless — the host's