feat(attribution): carry a miner's name across chains by reward preimage
All checks were successful
deploy / build (push) Successful in 7m6s
deploy / deploy-web (push) Successful in 5s
deploy / deploy-api (push) Successful in 14s

Live telemetry names the miners who win often and leaves everyone else as a
hex string. Measured on mainnet: of 22 miners, 2 were named and 14 had no name
available anywhere — but 6 already had one on Planck, under the same reward
preimage. Those 6 are exactly the small operators the naming is worst for,
because a name needs a block whose first reporter the feed could separate and
they win few blocks.

The preimage is derived from a secret only its owner holds, so the same
preimage on two chains is the same operator. That is an inference the site can
stand behind, unlike guessing from timing — and it is the only lever that works
without waiting on the feed at all.

It is a separate `AttributionSource` and renders as one. `Carried` names carry
no confidence and no votes, because they assert nothing about this chain: only
that this is who the operator was last known to be. Any live attribution here
outranks one, and the row shows an `elsewhere` chip rather than the telemetry
`node` chip so the two can never be read as the same claim.

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 14:59:29 +03:00
parent a177e805f4
commit ffcfb79cab
8 changed files with 188 additions and 9 deletions

View File

@@ -0,0 +1,28 @@
{
"db_name": "PostgreSQL",
"query": "\n select distinct on (a.miner) a.miner, a.node_name as \"node_name!\"\n from miner_attribution a\n where a.chain <> $1\n and a.node_name is not null\n and not exists (\n select 1 from miner_attribution mine\n where mine.chain = $1 and mine.miner = a.miner\n )\n order by a.miner, a.updated_at desc\n ",
"describe": {
"columns": [
{
"ordinal": 0,
"name": "miner",
"type_info": "Text"
},
{
"ordinal": 1,
"name": "node_name!",
"type_info": "Text"
}
],
"parameters": {
"Left": [
"Text"
]
},
"nullable": [
false,
true
]
},
"hash": "56b27b0c55bcca16be18d3222c19691fd491bcda14f98fbd1c71e20cbe97d0bf"
}