config: the node on bob is mainnet now, not Planck
All checks were successful
deploy / build (push) Successful in 7m34s
deploy / deploy-web (push) Successful in 5s
deploy / deploy-api (push) Successful in 14s

Mainnet launched today and the node was switched to it. The observer reads
whatever the node is on, so the `[[chains]]` entry pointing at 127.0.0.1:9944
had to follow it — until now the daemon was filing mainnet's blocks under the id
`planck`, with Planck's genesis and PLK still attached to them.

Read from the node, not assumed: `system_chain` "Quantus", genesis
`0xfb5487c0…626fba`, token QTC. `mainnet = true` is asserted here rather than
inferred, which is the field's whole purpose — telemetry also carries a chain
calling itself "Quantus Staging Mainnet", and it is not this one.

The target block time is **12 s, not the 6 s Planck used**.
`TARGET_BLOCK_TIME_MS` is 12_000 in the runtime the node actually runs —
checked at commit b017e642, the `0.11.1-b017e6420aa` its `system_version`
reports, rather than at the tip of the chain repo. It is the denominator for
every hashrate published before twenty tip samples exist, which on a chain
hours old is all of them, so carrying 6.0 across would have put out a mainnet
hashrate at exactly twice its true value — labelled "nominal", not broken.

Planck keeps its 268 telemetry nodes and stays in the site's navigation as
`no_endpoint`: still listed, no longer navigable, because authorship comes from
block headers and we no longer run a node that serves Planck's. That is an
ordinary state here, not an outage.

Nothing about the node itself is touched by this; every command run against it
was a read.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Jp6a8EDar9ueEhAxzep4V5
This commit is contained in:
2026-09-09 12:07:21 +03:00
parent 53dac3717b
commit 2cb8f1cf21
3 changed files with 56 additions and 17 deletions

View File

@@ -72,9 +72,16 @@ explicit transaction to be equivalent.
## Facts established by measurement
Taken from the live Planck chain, 2026-09-04. Don't re-derive or contradict
Taken from the live **Planck** chain, 2026-09-04. Don't re-derive or contradict
without re-measuring.
**Planck is no longer the tracked chain.** Mainnet launched 2026-09-09 and the
node on bob was switched to it; the `[[chains]]` entry followed the node, so
`quantus` is now what that endpoint serves and Planck is telemetry-listed only.
The decoding facts below still hold — same runtime family, same digest shape —
but every *timing* figure was measured on Planck against a 6 s target and says
nothing about mainnet, which targets 12 s.
- Header digest shape is exactly `0x06` + `706f775f` + compact `0x80` (32) +
32-byte preimage. Genesis is the only header without one; 12/12 recent headers
decoded.
@@ -87,6 +94,14 @@ without re-measuring.
factor of three between refreshes.
- `system_properties`: `PLK`, 12 decimals, ss58 prefix 189. Genesis
`0x4901bf5c…e65e72`.
- Mainnet, read from bob 2026-09-09: `system_chain` "Quantus", token `QTC`, 12
decimals, ss58 189, genesis `0xfb5487c0…626fba`. **Its target block time is
12 s, not Planck's 6** — `TARGET_BLOCK_TIME_MS = 12_000` at commit `b017e642`,
which is the `0.11.1-b017e6420aa` the node reports. Check the constant at the
commit the node actually runs, not at the tip of the chain repo: this figure
is the denominator for every hashrate shown before twenty tip samples exist,
so getting it wrong publishes a headline that is wrong by exactly that factor
and labelled "nominal" rather than broken.
- The telemetry feed URL is `wss://feed-telemetry.quantus.cat/feed` — found in
`/tmp/env-config.js` on the telemetry site, **not** the `/feed` path on the
main host, which 404s.
@@ -211,8 +226,8 @@ serving an empty leaderboard. Check the numbers:
```sh
cargo run -p blackbeard-cli -- probe --rpc-url http://bob.hanzalova.internal:9944
cargo run -p blackbeard-cli -- standings --chain planck
curl -s localhost:25864/v1/chains/planck/summary | python3 -m json.tool
cargo run -p blackbeard-cli -- standings --chain quantus
curl -s localhost:25864/v1/chains/quantus/summary | python3 -m json.tool
```
The block route degrades rather than failing, so it is worth checking both ends
@@ -221,7 +236,7 @@ of that: a recent height should carry `difficulty`, `extrinsics` and
difficulty to state pruning unless this observer recorded it at the time.
```sh
curl -s localhost:25864/v1/chains/planck/blocks/1070000 | python3 -m json.tool
curl -s localhost:25864/v1/chains/quantus/blocks/1000 | python3 -m json.tool
```
A working deployment shows a non-null `telemetry_nodes`, `distinct_miners` above

View File

@@ -72,13 +72,38 @@ max_connections = 8
# start.
[[chains]]
id = "planck"
display_name = "Planck"
genesis = "0x4901bf5c57fd3f9e726af399c763de6670dbdb115a91c0237e173f16eef65e72"
id = "quantus"
display_name = "Quantus"
# Mainnet. Genesis read from the node itself on 2026-09-09, the day it launched:
# `chain_getBlockHash(0)` against bob, which reports system_chain "Quantus" and
# a QTC token. It is NOT the staging chain — that one is
# `0xb0e90ed9f291a9194f79…` and telemetry calls it "Quantus Staging Mainnet".
genesis = "0xfb5487c0be6ae4ade2d41d16e50465129861636c2b8d61fa94d7a19631626fba"
# Operator-asserted, never inferred — the whole reason this field exists is that
# a chain publishing itself as "Quantus Staging Mainnet" must not get it by
# having "mainnet" in its name. This one is the real network.
mainnet = true
# Loopback: we run this node. 9944 serves HTTP and WebSocket both.
#
# This endpoint used to be Planck. The node was switched to mainnet on
# 2026-09-09 and this entry followed it — the observer reads whatever the node
# is on, so leaving the id as `planck` would have filed mainnet's blocks under
# the testnet's name. Planck itself still has 268 nodes on telemetry, so it
# 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"
target_block_time_seconds = 6.0
# 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
# the chain repo. This is the denominator for every hashrate shown before
# twenty tip samples exist, so carrying Planck's 6.0 over would have published
# a mainnet hashrate exactly twice its true value, correctly labelled
# "nominal — from target block time" and wrong.
target_block_time_seconds = 12.0
# The chain is hours old. These are harmless while its history is shorter than
# the window — the warm start simply finds fewer blocks than it asks for.
warm_start_blocks = 100800
max_gap_fill_blocks = 5000
@@ -96,13 +121,12 @@ 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-<chain>.quantus.cat` /
# 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-<chain>.quantus.cat` /
# `a2-<chain>.quantus.cat`; if endpoints appear for those chains, each becomes a
# [[chains]] block like the two above and nothing else changes.
#
# Real mainnet has not launched. It is expected to follow a commit to
# github.com/Quantus-Network/chain publishing a new mainnet spec, around the
# announced 2026-09-09 TGE — "Quantus Staging Mainnet" is a staging chain and
# deliberately not labelled `mainnet = true` here.
# Mainnet launched on 2026-09-09 as telemetry's "Quantus", and is the
# `[[chains]]` entry above. "Quantus Staging Mainnet" is a different, staging
# chain and remains deliberately unlabelled.

View File

@@ -134,10 +134,10 @@ minutes.
## A block has two addresses, and only one of them is stable
`#/planck/1069799` is a *position*. Because `block` is keyed on (chain, height)
`#/quantus/1069799` is a *position*. Because `block` is keyed on (chain, height)
and a reorg overwrites, a link to a height quietly comes to mean a different
block the moment the chain forks there. So opening one resolves it and rewrites
the address to `#/planck/0x…`, which names one block for good — including after
the address to `#/quantus/0x…`, which names one block for good — including after
it has lost, which is the only way an orphan is linkable at all.
The page is assembled from both sources because neither is sufficient. The node