Bitcoin (und andere Krypto-Münzen) Nonce-Schleife

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).

Warum sollte das schneller sein, als jedem Thread einen eigenen Blockheader für meinen zu geben?
Was ist schneller, um eine PIN zu erraten?: Zufallsraten oder von 0000 bis 9999?
hängt von deinem Glück ab. aber theoretisch finden Sie eine PIN höchstwahrscheinlich schneller, wenn Sie einheitliche Zufallszahlen verwenden. Versuche es. Eine einfache Software-App zeigt es Ihnen. Wenn Sie bedenken, dass Sie immer wieder neue PINs finden müssen, bietet Ihnen Random einige Vorteile
@NickODell, versuchen Sie es selbst: Führen Sie cpuminer mit 64 Threads aus. Die Thread-Geschwindigkeit wird sinken, aber die Anzahl der akzeptierten Nonces wird über einen begrenzten Zeitraum steigen.
Ich denke, Sie sind verwirrt, weil Sie denken, dass alle Miner das Gleiche berechnen, weshalb Sie mit +2 weiterkommen könnten. Jeder Miner arbeitet an einem anderen zufälligen Stück Arbeit. Der nächste Punkt, den Sie wissen müssen, ist, dass der PoW-Algorithmus fortschrittsfrei ist: Jede einzelne Zahl hat die gleiche Chance, egal ob Sie am Anfang oder am Ende oder in der Mitte beginnen. Es spielt keine Rolle, ob Sie +1 oder +2 oder +zufällig machen. Also wählt jeder das Einfachste.
@Jannes, danke für deinen Beitrag! Das macht Sinn
PoW ist keine Antwort. es gibt dir Intervalle. Der Pool, die Aufgabengeber, es ist ihnen egal, ob Sie es schneller können. Wenn Sie können, werden sie Ihre Bits/Diffs anpassen ... was meiner Meinung nach wieder eine rote Fahne für den Hochgeschwindigkeitsansatz der "Fuzzy-Logik" ist, wenn ich das sagen darf :)
Entschuldigung für die Verwirrung, ich meinte "grüne Flagge" für die Fuzzy-Logik und rot für das Brutforce / Rainbow-Ding

Antworten (2)

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:Verteilung der Nonce-Werte gewinnen

Dies verdeutlicht sehr gut, dass die Verteilung der Nonces gleichmäßig ist:Histogramm gültiger Nonces und Hashes

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.

Selbst in der ASIC-Welt, wenn man bedenkt, dass sie das gesamte Intervall so schnell scannen können, wäre es nicht schneller, zufällige oder andere Algorithmen zu verwenden?
@AlexD Einfacher als Nonce++ geht es nicht. ☺ Alles darüber hinaus (z. B. ein Pseudo-„Zufallsgenerator [Zahlengenerator] oder ein anderer Algorithmus“) würde die Dinge nur verlangsamen. Die Leute haben SAT-Lösung als Alternative zum Brute-Force-Bitcoin-Mining erforscht , aber Brute-Force ist immer noch schneller.
Ich habe bisher noch keinen Zufall erwähnt :) Pseudo-Zufall ist der Weg ins Nirgendwo bei Brutforce-Angriffen :) aber ich bin mir ziemlich sicher, dass es einen besseren Weg gibt, Dinge effizienter zu erzwingen! :)
@AlexD Wenn jemand einen besseren Weg findet, muss Bitcoin eine andere Proof-of-Work-Methode anwenden.
Früher dachte ich, dass für einen bestimmten Block eine gültige Nonce irgendwann von +1 bis zum Erfolg gefunden würde - ist es tatsächlich so, dass manchmal keine Nonce gefunden wird und der Miner dann den Block verlassen und eine andere Sammlung von Transaktionen ausprobieren muss?
@PrinceM Ja, das könnte vorkommen.
Warum ist die Anzahl möglicher Nonces endlich? Warum können Sie nicht einfach weiter erhöhen, bis einer gefunden wird? Ist das eine "Regel" oder Teil des Protokolls? Oder geht es nur schneller?
@PrinceM " Warum ist die Anzahl der möglichen Nonces endlich? " Das Nonce- Feld in einem Bitcoin-Block ist eine 32-Bit-Zahl (4-Byte), es gibt also 2³² ≈ 4,3 Milliarden mögliche Zahlen, die es darstellen kann. ASICs sind so schnell, dass sie fast sofort den gesamten Nonce-Bereich scannen können (~4,3 Milliarden Hashes). Deshalb ist extraNonce nützlich, um einen "gewinnenden" Block zu finden.
@Geremia interessant, also kann es eine Nonce geben, die diesen Block zum Laufen bringt, er „passt“ einfach nicht unbedingt in den Block. Habe es!

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.

Ich wünschte, ich könnte '-1' bei dir machen. Ihre Antwort ergibt keinen Sinn in Bezug auf meine Frage. Bitte lesen Sie es noch einmal. jeder Thread macht dasselbe wie: +1 unten; Der nächste Schritt wäre -1 ganz oben. Würde das die Entropie erhöhen?
@AlexD Ich verstehe nicht, was du sagst, denke ich. Da jede Nonce die gleiche Chance hat, kommt es nur darauf an, wie viele Nonces pro Sekunde Sie versuchen können. Was wäre der Vorteil dieser Komplexität?