Arena: map reward preimages to telemetry node names via first block import #11
Reference in New Issue
Block a user
Delete Branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Feasibility checked 2026-09-03 against the live feed. It works, with a confidence signal that tells the honest cases from the ambiguous ones. Related: #2 (arena), #9 (range-aware leaderboard).
What the feed gives us
wss://feed-telemetry.quantus.cat/feedis stock substrate-telemetry, feed version 33. Aftersubscribe:<planck genesis>:AddedNode(code 3): node id, name, implementation, version, network peer id. 43 nodes on Planck at the time of checking, all named (karl node,quanpool-planck,DiffPool-QUAN-Planck,OGAWORLD/JAPAN, severalQuantusMinerGUI, ...).ImportedBlock(code 6): node id,[height, hash, block_time, timestamp, propagation_time]. The telemetry backend stamps the first node to report a hash withpropagation_time = 0and gives every later reporter its delay in ms after that first report.Sampled 75 s at the tip (height 1,035,380 onward), 37 to 38 nodes importing each block:
A node that authored a block imports it before announcing it, so it leads its peers by the announce-plus-gossip time, 200 to 700 ms here. When the author's node is not on telemetry, the first reporter is just the first peer to receive it by gossip, and the second reporter arrives within tens of ms. The lead over the second reporter is therefore the confidence signal: above about 150 ms the first reporter is the author; below about 50 ms the author is off-telemetry and the block is unattributable.
Design (arena exporter, which already holds both halves)
The exporter already parses the author preimage from every header it records, and already runs a feed client for the node census. Add:
BestBlock, code 1), keeping per hash: first reporter, its timestamp, and the second reporter's delay. Old-history imports from syncing nodes are dropped by the height filter.record(), where the header's preimage is known, look the hash up: if the lead exceeds the threshold, count(preimage -> node id); otherwise count(preimage -> unattributed).quantus_author_node_info{preimage, node_name, peer_id} = fraction of that preimage's attributed blocks first seen at that node, plusquantus_author_attributed_fraction{preimage}so a preimage whose owner is off-telemetry shows as such rather than as a wrong name.preimagewithgroup_left(node_name), show name and confidence. Disambiguate duplicate names (QuantusMinerGUIappears under several node ids) with the short peer id.Validation: our own preimage must map to our node's telemetry name with high confidence; if it does not, the threshold or the method is wrong.
Limits
QuantusMinerGUI,quanpool-planck,OGAWORLD/JAPAN) do report.0x2ccf3929..., today's 30% miner, is the first one to check.FinalizedBlock(code 7), which the exporter must discard cheaply.Effort: about a day in the exporter plus the panel; no protocol change, no node change.