Warum ändern Knoten die Blockversionsnummer nicht, wenn die Nonce überläuft?

Nach der Berechnung von 4 Milliarden Nonces soll der Miner die Merkle-Root aktualisieren.

Warum wählen sie nicht eine neue Nonce und weisen sie der Blockversionsnummer zu und beginnen von vorne?

Es würde Zeit sparen und einen ASIC verbessern.

Antworten (2)

Blockversionen werden als Teil anderer Anwendungsfälle modifiziert, wie z. B. BIP 9, die bestimmte Bits in der Blockversion verwenden, um bestimmte vorgeschlagene Aktualisierungen des Protokolls zu signalisieren. Das Erhöhen der Blockversion und das Behandeln als Nonce würde diese Art der Verwendung verhindern.

Darüber hinaus ist die Verwendung eines Versionsfelds als Quelle der Zufälligkeit (nicht wirklich, aber ähnlich genug, wenn es um Nonces geht) im Allgemeinen eine schlechte Idee - Versionsfelder spielen eine wichtige Rolle, wenn es darum geht, anderen Knoten im Netzwerk zu helfen, zu bestimmen, wie ein Block zu decodieren und zu verarbeiten ist , oder eine andere Entität innerhalb der Blockchain. Dies in eine effektive Zufallszahl umzuwandeln, um eine Handvoll Zyklen zu sparen, wäre einfach eine schlechte Designwahl.

Das Neuberechnen des Merkle-Baums durch einfaches Ändern eines einzelnen tx darin ist unabhängig davon ein relativ schneller Vorgang, da Sie nur die von diesem tx betroffenen Knoten neu berechnen müssen.

Darüber hinaus kann das Inkrementieren der extraNonce und das Neuberechnen der Merkle-Root durch den Miner-Controller erfolgen, während der ASIC selbst hasht, und in die Warteschlange gestellt werden, sodass der ASIC sofort zum neuen Header wechseln kann, wenn die Nonce überläuft. Das verlangsamt das Mining also überhaupt nicht.

Bergleute tun dies, aber nicht so einfach. Es ist eigentlich ein aktuelles kontroverses Thema namens ASICBoost. Der Versionsnummer werden im Rahmen dieses Algorithmus unterschiedliche Werte zugeordnet.

Es ist jedoch etwas komplexer, als nur die Versionsnummer als erweiterte Nonce zu verwenden. Denken Sie daran, dass SHA256 eigentlich mehrere mathematische Operationen sind, die in einem Namen zusammengefasst sind. Ich glaube, dass die Funktionsweise auf die ersten paar Operationen des SHA256-Algorithmus zurückzuführen ist, bei denen Bits von der rechten Seite des Blockheaders nach links verschoben werden. Wenn Sie die rechte Seite des Blockheaders (die letzten 4 Bytes der Merkle-Wurzel, die Nonce und den Zeitstempel) weitgehend konstant halten können, können Sie diese ersten paar Berechnungen der SHA256-Funktion überspringen (weil Sie eingeben dasselbe jedes Mal von diesen Bits). Um den endgültigen Hash-Wert zu ändern, müssen Sie jedoch die Bits auf der linken Seite ändern können, die die Versionsnummer enthalten.

Das spart offenbar rund 20% Mining-Power.