Warum wird das Ziel in kompakter Form im Blockheader gespeichert?

Warum wird das Ziel in „Bits“ umgewandelt und nicht vollständig im Blockheader gespeichert?

Warum zum Beispiel:

{
"hash" : "000000000003ba27aa200b1cecaad478d2b00432346c3f1f3986da1afd33e506",
"height" : 100000,
"bits" : "1b04864c",
"difficulty" : 14484.16236123,
}

und nicht:

{
"hash" : "000000000003ba27aa200b1cecaad478d2b00432346c3f1f3986da1afd33e506",
"height" : 100000,
"target" : "000000000004864c000000000000000000000000000000000000000000000000",
"difficulty" : 14484.16236123,
}

Ist es um Platz zu sparen?

Es besteht keine Notwendigkeit für dieses Maß an Genauigkeit, aber es ist notwendig, Platz im Header zu sparen, da Clients die Block-Header normalerweise im RAM speichern.

Antworten (1)

Ihre Wiedergabe ist nicht zuletzt länger, der gesamte Header ist nur 80 Bytes lang. Die Codierung von "Bits" ist historisch und vom Client der Vorabversion 0.1.0 übrig geblieben. Es gibt andere Dinge im Header, die besser hätten kodiert werden können (die Nonce hätte länger sein sollen, und die Version hätte als Bitfield und nicht als Int gelesen werden sollen, und eine Aux-Merkle-Wurzel wäre schön gewesen), aber so wie es ist, gibt es nichts wirklich Großartiges Grund, aufgrund der Trägheit hinter der aktuellen Formation etwas zu ändern.

Was meinst du mit auxMerkle-Wurzel? Außerdem wäre es schön, genaue Zeiten sowohl im Header (als auch im Zusammenhang mit einzelnen Txs) zu haben.
Ein dedizierter Teil des Merkle-Baums nur für Achseldaten wie UTXO-Verpflichtungen. Zeitstempel auf Transaktionen wären völlig bedeutungslos, sie existieren nur, um Schwierigkeitsanpassungen zu ermöglichen. Es gibt keinen Nutzen für sie, der sich nicht darauf verlassen würde, dass sie bis zu einem gewissen Grad korrekt sind. Wenn es eine Möglichkeit gäbe, sicherzustellen, dass die Zeitstempel korrekt sind, bräuchten wir zunächst keine Blockchain.
"historisch"? Bedeutet dies, dass es keine aktuelle Verwendung für bitsim Blockheader gibt? Ich frage mich, warum es überhaupt da ist, vorausgesetzt, ein vollständiger Knoten synchronisiert sich von Block 0 und kann die Schwierigkeit für jeden Block selbst berechnen ...