Nonce Größe - Wird es immer groß genug sein?

Wenn ich das richtig verstehe, hat der Block nur 4 Bytes (32 Bit) für die Nonce. Kann die Schwierigkeit so hoch werden, dass es keine einmaligen Lösungen mehr gibt? Wenn ja, welche Möglichkeiten hat ein Miner dann?

Da David bereits eine solide Antwort hat, werde ich nur einen Trivia-Kommentar machen. Selbst bei einer Schwierigkeit von 1 besteht eine Wahrscheinlichkeit von 36,7 %, dass im gesamten Nonce-Bereich (2^32) kein gültiger Hash gefunden wird. Bei einer Schwierigkeit von 1 Million gibt es 99,999905 %, dass Sie im gesamten Nonce-Bereich keine Lösung finden werden. Glücklicherweise ermöglicht Ihnen jede andere Änderung am Blockheader weitere 4 Milliarden Versuche.

Antworten (2)

Die Schwierigkeit geht bereits so weit, dass über eine Billiarde Hashes erforderlich sind, um einen Block zu lösen. 2^32 sind nur 4 Milliarden. Weniger als einer von einer Milliarde Mal wird es eine Nonce geben, die den Block gültig macht.

Ein Miner muss einfach jede mögliche Nonce auf einem anderen Block ausprobieren. Er kann die Coinbase, das Transaktionsset und/oder den Blockzeitstempel variieren. Jede Änderung an einem dieser Dinge führt zu einer neuen Chance, dass es eine gültige Nonce gibt.

Oft ist es die beste Wahl, den Zeitstempel zu erhöhen, eine Praxis, die als NTime Rolling bezeichnet wird .

Der Block-Zeitstempel muss sowieso nicht genau sein, also können Sie den Zeitstempel zurücksetzen, sagen wir, zehn Sekunden, bevor Sie mit dem Mining beginnen, und ihn dann 20 Mal erhöhen, bevor Sie aufgeben und einen neuen Block erhalten. Im schlimmsten Fall wird Ihr Block-Zeitstempel um etwa ein Dutzend Sekunden abweichen – niemand kümmert sich darum.

Danach möchten Sie wahrscheinlich einen neuen Block erhalten, da möglicherweise einige neue Transaktionen einbezogen werden müssen. Dies verbessert nicht nur die Effizienz des Netzwerks als Ganzes, sondern verringert auch die Wahrscheinlichkeit, dass Ihnen eine Transaktionsgebühr entgeht.

Nach meinen Berechnungen durchläuft ein Miner mit 270 Mhash/Sek. 2^32 Nonces in etwa 15 Sekunden! Werden diese Techniken, von denen Sie sprechen, vom Bitcoin-Server oder vom Miner ausgeführt?
Typischerweise werden diese Änderungen vom Bitcoin-Knoten (z. B. Mining-Pool-Server) vorgenommen. Der Zeitstempel könnte möglicherweise vom Miner geändert werden, aber ich glaube nicht, dass dies geschehen ist. Das Ändern der extraNonce in der Generierungstransaktion ist schwieriger, aber ich denke, dass nur der Merkle-Zweig und nicht der gesamte Block erforderlich ist. Das Hinzufügen neuer Transaktionen erfordert definitiv den Knoten.
@MeniRosenfeld Während diese Änderungen traditionell vom Pool durchgeführt wurden, sind sie höchst ineffizient. Die NTimeRolling-Option ermöglicht es dem Miner, den Zeitstempel lokal zu erhöhen. Der Pool muss nur neue Header bei Blockänderungen berechnen, regelmäßig für neue Transaktionen oder wenn NTime Rolling abläuft.
Mir scheint, dass die Nonce auf mindestens 64 Bit und nicht auf 32 Bit ausgelegt sein sollte. Überrascht von der mangelnden Voraussicht hier. Vielleicht könnte der Blockheader neu gestaltet werden?

Ob es eine Lösung gibt oder nicht, hängt vom Inhalt des Blocks sowie von den möglichen Werten der Nonce ab.

Der Transaktionsblock kann bei Bedarf geändert werden, was im Wesentlichen bedeutet, dass Sie weitere 32 Bits an Nonce-Werten zum Ausprobieren erhalten. Es gibt eine zusätzliche Komponente eines Transaktionsblocks namens "Coinbase", die geändert werden kann, ohne die tatsächlichen Transaktionen innerhalb des Blocks zu ändern. Dies diente in der Vergangenheit dazu , Kurznachrichten in die Blockchain einzufügen .

Der Coinbase-Wert kann verwendet werden, um eine kleine Zeichenfolge einzufügen, wie hier beschrieben: bitcoin.stackexchange.com/a/26/516
aber Sie müssten die Merkle-Wurzel neu berechnen, wenn Sie die Coinbase-TX ändern? Oder es ändert seinen Hash nicht?