Ich habe vor kurzem begonnen, auf das zu achten, was auf Kryptomärkten vor sich geht, und als langjähriger Entwickler beschlossen, einen Blick auf die Software zu werfen, die wir öffentlich zugänglich haben.
Daher habe ich hier eine Frage an alle Krypto-Guru: Wie es aus der Bitcoin-Protokollspezifikation hervorgeht, akzeptiert Bitcoin JEDE Nonce, die die Bedingung der Ziel-(Block-)Bits erfüllt. Jeder einzelne Miner, den ich öffentlich gemacht habe, verwendet eine sequentielle Schleife über nonce1 und nonce2. eigentliche Frage: Warum implementieren die Leute +1 für die Nonce in jedem Thread, sagen wir stattdessen, wenn man 2 Threads hat, geht man von Anfang an +1; Der zweite zählt -1 vom Ende des Nonces-Intervalls?
Meiner bescheidenen Meinung nach wäre es schneller, wenn Sie mehrere Threads im selben Intervall ausführen ... oder in der perfekten Welt das gesamte Intervall in N Subintervalle aufteilen und jeden Thread sein eigenes Stück machen lassen würden. Aus mathematischer Sicht scheint es, als würden wir mit diesem Ansatz eine höhere Wahrscheinlichkeit erhalten, „goldene Nonce“ zu treffen, im Gegensatz zu +1 über das gesamte Intervall. Bin ich hier falsch?
Nach alledem habe ich die Blockchain heruntergeladen und einige Tests durchgeführt, um die Nonce-Verteilung im uint32_t-Intervall zu sehen. Die Ergebnisse haben mich nicht überrascht ... Ich habe eine ziemlich gleichmäßige Nonce-Verteilung wie: ungerade Nonce: 49.997 gerade Nonce: 50.003
Teilen Sie uint32_t in 1024 identische Intervalle auf und sehen Sie, wie viele Nonces aus der vorhandenen Blockchain in jedem Intervall sitzen. Ergebnisse sind die gleichen: gleichmäßige Verteilung.
Nochmals, warum ist es +1 in der Miner-Schleife? obwohl (+3), (-2) (theoretisch) bessere Chancen (schneller) ergeben hätte, goldene Nonce zu finden, als andere (+1).
Die Verteilung der gewinnenden Nonces ist gegen 0 verzerrt, da dies ein Selektionseffekt ist: Die meisten beginnen bei 0 mit der Suche nach Nonces, sodass die niedrigeren Nonces zuerst gefunden werden, obwohl es auch höhere Nonces geben kann, die einen Gewinnblock erzeugen könnten:
Dies verdeutlicht sehr gut, dass die Verteilung der Nonces gleichmäßig ist:
Quelle: https://en.bitcoin.it/wiki/Distribution_of_nonces_and_hashes
Somit ist +1 in der Miner-Schleife die einfachste Art, die Nonce zu ändern, und es funktioniert, weil die gültige Nonce-Verteilung einheitlich ist. ASICs gehen oft sehr unterschiedlich mit Nonces um. Außerdem können ASICs den gesamten Nonce-Bereich sehr schnell scannen, sodass es eigentlich egal ist, wo Sie mit der Suche nach einem gültigen Nonce beginnen.
Wenn Sie vier Threads verwenden und den Bereich auf die vier Threads aufteilen, bedeutet dies, dass jeder Thread seinen Bereich beendet und viermal so oft einen neuen beginnt. Das ist eindeutig ein Verlustgeschäft, wenn es darum geht, jedem Thread seinen eigenen vollen Bereich zu geben.
Nick Odell
Zauberer von Ozzie
Alex D
Alex D
Jannes
Alex D
Alex D
Alex D