Auf der Suche nach Nonces mit geraden Zahlen

Jeder Bitcoin und seine abgeleiteten Kryptowährungen haben einen Nonce-Wert im Block, unabhängig vom Algorithmus. Jeder Miner versucht, nach einer Glücksnonce zu suchen, die den Hash-Wert unter der erforderlichen Schwierigkeit kleiner als das Ziel machen kann.

In letzter Zeit suche ich jedoch kryptobasierte Kryptowährungen wie die Dogecoin- und Vertcoin-Blockchain nach wenigen Blöcken. Ich fand, dass die meisten Nonce gerade Zahlen sind, außer (nur manuell im Block-Explorer durchsucht)

Block #184161 - Nonce = 8dce5c01

Block #184143 - Nonce = 2a674001

Block #184139 - Nonce = 930aa899

viele andere Blöcke aus dem letzten Block (Block Nr. 184174) und Blöcke dazwischen sind gerade Zahlen. Darüber hinaus sind viele Nonce-Werte in Hexadezimalzahl der Form XXXXXX00 (in einer ganzzahligen Hexadezimalzahlenform wird sie als 00XXXXXX im Block gespeichert) oder Vielfachen von 256.

Das gleiche Ergebnis habe ich bei Vertcoin-Blöcken beobachtet. Ich habe einige Blöcke manuell durchquert und auch festgestellt, dass Nonces von ihnen auch gerade Zahlen sind.

Ich möchte eine Frage stellen. Wenn ich scrypt oder n-scrypt so konfiguriere, dass nur gerade Zahlen gesucht werden, ist es möglich, eine höhere Chance zu haben, die Nonce zu finden, die den Strom schnell lösen kann?

Übrigens, ich erwarte nicht, dass die Mining-Einnahmen jedes Miners im Pool (PPS oder PPLNS) größer sein werden als die des normalen Nonce-Suchalgorithmus, da die Pool-Anzahl für "Shares" gefunden wurde. Wenn Sie ungerade Zahlen überspringen, verlieren Sie auch die Chance, einen Anteil zu erhalten (gelöst durch die ungerade Nonce), der den Diff ausgleichen kann, den der Pool Ihnen gibt. Wenn ein Pool jedoch eine Nonce findet, die den Block lösen kann, gewinnt der Pool und erhält die Belohnungen.


Bearbeitet: 18.04

Ich habe ein kleines Programm geschrieben, um einige statistische Daten zu sammeln. Vom letzten Dogecoin-Block Nr. 186.299 bis Nr. 145.000 (das letzte obligatorische Update)

insgesamt 41.300 Blöcke

  • Anzahl Quoten = 3.891 (9,42 %)
  • Anzahl der Events = 37.409 (90,58 %)
    • Das Verhältnis von ungerade zu gerade beträgt etwa 1:10
  • Unter den geraden Zahlen ist die Anzahl der Vielfachen von 256 = 35.106
    • 85% von insgesamt
    • 93,866 % der Abende

Aktualisierung: 20.4

Ich habe kürzlich auch die Nonces von Block 552.780 bis 253.898 von Litecoin überprüft.

insgesamt 298.883 Blöcke.

  • Anzahl der Quoten = 42.963 (14,374521 %)
  • Anzahl der Events = 255.920 (85,625479 %)
  • Unter den geraden Zahlen ist die Anzahl der Vielfachen von 256 = 225.746
    • 75,529890 % des Gesamtbetrags

Aktualisierung: 21.4

Ich verwende ein kleines Perl-Skript und rufe litecoind/dogecoind wallet auf, um die Nonce jedes Blocks auszudrucken. Es ist sehr langsam, aber ganz einfach. Es wäre sehr schnell, wenn Sie einen Binärblock-Datenbank-Parser verwenden.

#!/usr/bin/perl -w

my $odd = 0;
my $even = 0;
my $m256 = 0;
my $total = 0;
for ($i = 186299; $i >= 145000; $i = $i-1) {
    $nonce = `dogecoind getblock \`dogecoind getblockhash $i\` | grep nonce`;
    chomp $nonce;
    $nonce =~ s/[^0-9]*//g;
    printf "%d %d\n", $i, $nonce;

    if (($nonce %2)== 1) {
            $odd++;
    }
    else {
            $even = $even + 1;
            $m256++ if (($nonce % 256) == 0);
    }
    $total ++;
}
printf "odds=%d (%f%%) evens=%d (%f%%) 256s=%d (%f%%)\n",
     $odd, (100.0*$odd/$total),
     $even, (100.0*$even/$total),
     $m256, 100.0*$m256/$total;
Jede Nonce hat die gleiche Chance, einen Block oder Share zu lösen. Wenn Sie nur gerade Nonces verwenden, ändern sich Ihre Chancen überhaupt nicht. Es könnte sein, dass einige Mining-Software es vorzieht, sogar Nonce-Werte auszuprobieren; Vielleicht ist es auf bestimmter Hardware oder so effizienter.
Ja, jede ungerade oder gerade Zahl hat die gleiche Wahrscheinlichkeit, den Block zu lösen. Das Rennspiel ist jedoch, dass Sie die Runde gewinnen, wenn Ihr Pool früher als andere Pools oder andere (Solo) eine Nonce-Lösung findet. Außerdem glaube ich nicht, dass es auf bestimmter Hardware effizienter ist, da nur die Nonce geändert werden kann, der SHA- und der Scrypt-Core-Algorithmus nicht geändert werden konnten, jedes Bit zählt.
Ich stimme hier @NateEldredge zu. Als ich mir auch einen anderen kryptobasierten Altcoin, Litcoin, ansah, sah ich keinen signifikanten Unterschied zwischen dem Auftreten von geraden und ungeraden Nonces. Es scheint mit Dodgecoin zusammenzuhängen, nicht mit dem verwendeten Hashing-Algorithmus. Es wäre jedoch interessant zu wissen, warum die Nonce-Werte in Dodgecoin diese Form annehmen. Ausweichmünze.
Ich erhalte ähnliche statistische Daten zwischen LTC und DOGE (sogar Vertcoin). Ich kenne den Grund nicht, sieht aber sehr interessant aus.
Es wäre wahrscheinlich ziemlich einfach, einen kontrollierten Test mit geringem Schwierigkeitsgrad durchzuführen. Wenn sogar Nonces wirklich deutlich erfolgreicher sind, würde dies auf eine Schwäche in scrypt hindeuten.
Wären Sie bereit, den Code zu teilen, der Ihre Daten gesammelt hat?
@NateEldredge, bitte sehen Sie sich mein neuestes Update an. Nur ein kleines Perl zum Abrufen von Block-Nonces.
An diesem Punkt glaube ich, dass Ihre scheinbar unschuldige Frage eine vollständige Untersuchung verdient und ihre Teilergebnisse in einem Blog oder sogar (sollten Sie sie aufpolieren) in einer Zeitschrift veröffentlichen. Wenn die Ungleichheit für andere kryptobasierte Coins gilt, haben Sie vielleicht eine Schwachstelle oder eine nette Möglichkeit entdeckt, die Rentabilität von Minern zu steigern! Wie Nate vorgeschlagen hat, könnte es sich lohnen, es in einem isolierten, kleinen Netzwerk zu testen. Haben Sie nach SHA-256-basierten Coins gesucht? Wo kann ich Ihnen für Ihre Bemühungen ein Trinkgeld geben?
Danke für deinen Vorschlag, @JoePineda. Ja, ich mache auch ein kleines Experiment. Ich habe nicht nach SHA-256-basierten Münzen gesucht, weil ich schnell einige Bitcoin-Blöcke durchsucht habe und keine regelmäßigen Muster gesehen habe. Als ich die Dogecoin-Blockchain überprüfte, bemerkte ich, dass gerade Zahlen häufiger vorkommen, und in einem Block-Explorer wird die Nonce in Hexadezimalzahl angezeigt, sodass ich bemerkte, dass so viele Nonces Vielfache von 256 sind. Und Sie können mein Profil für die sehen Einzelheiten. Vielen Dank!
Es gibt eine Variable, die Sie nicht berücksichtigen, aber wenn ich Bergbau betreiben würde, hätte ich damit Recht. Die Variable sind die Transaktionen, die in dem Block enthalten sind, der immer zufällig ist.
Deshalb sollte ich dies in einem öffentlichen P2P-Netzwerk testen, nicht in einem kleinen und geschlossenen Testnetz. Darüber hinaus werden die in dem Artikel gefundenen Nonces von bestehenden öffentlichen kryptobasierten Kryptocoins abgerufen, unabhängig davon, ob die Anzahl der Transaktionen in jedem Block nur wenige Zahlen oder einige Dutzend Transaktionen beträgt.
Beachten Sie, dass je nach Endianness "Vielfache von 256" == "klein genug, dass ich mir nur die Mühe gemacht habe, 3 Bytes auszufüllen, nicht alle 4"
Ich weiß, worauf du hinauswillst. Das Getwork-Protokoll liefert Daten in Little Endian. Überprüfen Sie den LTC-Block 100000 , goo.gl/w0UWpx und litecoin.info/Block_hashing_algorithm , die Dezimalzahl 2147586629 oder 0x80019245 in Hex und wird als 0x45,0x92,0x01,0x80 in Little Endian im Block gespeichert. Die Nonce, die Sie entweder im Blockchain-Web oder in der Brieftasche (getblock-Methode) sehen, werden in Host-Endian konvertiert, um die 32-Bit-Zahl anzuzeigen (x86 ist auch Little Endian, daher ist keine Konvertierung erforderlich). Das bedeutet, dass alle Vielfachen von 256, die die Form XXXXXX00 in Hex haben, als „00XXXXXX“ im Block gespeichert werden.

Antworten (3)

Ich denke, dass Tim S. mit seinem Kommentar zur Endianness die Antwort hat.

Ihre Beobachtungen darüber, dass die Nonce ihr niedrigstes Byte Null hat (ein Vielfaches von 256), beziehen sich auf die Little-Endian-Byte-Reihenfolge des Blocks selbst. Aus Sicht einer Big-Endian-Maschine sind dies Aussagen über das High - Byte der Nonce.

Betrachten Sie also einen Bergmann, der Big-Endian ist. Der natürliche Algorithmus ist "start with nonce=0, compute scrypt, increment nonce, repeat", also werden Ihre "geraden" Nonces zuerst versucht. Wenn jedoch eine neue Transaktion (oder ein neuer Block von einem anderen Miner) eintrifft, muss ein neuer Block-Header erstellt werden, und es wäre natürlich, die Nonce in diesem Fall bei Null neu zu starten. Um eine Nonce zu erhalten, die "kein Vielfaches von 256" ist, muss es 2^24Hashes vervollständigen, bevor es neu gestartet wird.

Natürlich ist x86 die am weitesten verbreitete Desktop-CPU und Little-Endian, aber das meiste Scrypt-Mining wird auf GPUs durchgeführt. Ich gehe davon aus, dass die Mehrheit dieser GPUs Big-Endian sind oder dass zumindest einige gängige Mining-Software sie veranlasst, ihre Nonce auf Big-Endian-Weise zu erhöhen. Weiß jemand, ob dies der Fall ist?

Aus diesem Diagramm sieht es so aus, als könnten moderne GPUs Scrypt mit ungefähr 1 Mhash/Sek. ausführen. Hashes würden also 2^2416 Sekunden dauern. Litecoin verzeichnet derzeit durchschnittlich etwa 10.000 Transaktionen pro Tag, was im Durchschnitt alle 8 Sekunden eine Transaktion ist. Es wäre also nicht verwunderlich, dass ein Miner vor dem Neustart normalerweise nicht in sein High-Byte (das für Sie das Low-Byte ist) gelangt.

Diese Hypothese würde auch erklären, warum wir bei Bitcoin kein solches Muster sehen. Aktuelle SHA-256-ASIC-Miner laufen mit vielen Ghash/Sek. und durchlaufen daher sehr wahrscheinlich alle 2^32möglichen Nonces, bevor sie durch neue Transaktionsdaten neu gestartet werden. (Möglicherweise sehen wir jedoch Muster im extraNonce.)

Nicht leise, nur AMD GPU ist Big Endian. Der Hash muss noch in Little-Endian-Reihenfolge berechnet werden. Sogar Hardware kann den Hash berechnen, ohne sich um Endian zu kümmern, um einen Hash-Wert zu erhalten, die Nonce wird jedoch erneut mit cgminerscrypt (in der CPU) überprüft, bevor sie an den Pool gesendet wird. Wenn die GPU Big Endian verwendet, um den Hash zu berechnen, und ein gültiges Ergebnis erhält, wird cgminer dies ablehnen. Daher muss der Nonce-Wert entweder von der Big- oder Little-Endian-Plattform konsistent gelesen werden. Sie können die Erweiterung von AMD mit printf verwenden, um die Nonce in GPU und die Nonce des cgminers zu drucken, um zu sehen, dass sie denselben Wert haben.
Dass 2^8 gleich Null bleibt, ist für so viele Fälle auch nicht möglich. Für 2 ^ 24 benötigt es nur 16 Sekunden, um in 1 MH / s GPU zu berechnen, sodass es zum nächsten Byte von 2 ^ 8 vorrückt. Wenn ein beliebiges Bit der höchsten 8 Bits von Big Endian nicht Null ist, kann es in Little Endian nicht ein Vielfaches von 256 sein. Wenn man bedenkt, dass die Blockzeit von LTC 2,5 Minuten beträgt und Dogecoin für 1 Minute das Ziel ist, ist es lang genug für die GPU, um die verbleibenden 2^8 Bits zu verwenden. Wenn er 2^32 erschöpfend durchsucht und nichts gefunden hat, erhöht der Miner den Zeitstempel um 1 Sekunde und beginnt immer wieder von vorne.
Sie können den Quellcode von GPU OpenCL scrypt im beliebten cgminer/sgminer überprüfen. Der OpenCL-Miner zählt die Nonce von 0 bis zu einem oberen Wert, indem er die Thread-ID als Nonce verwendet. Im Grunde ist es also ein inkrementeller Wert, zum Beispiel werden 4096 Threads ausgegeben, um Nonce von 0 bis 4095 zu berechnen (weil Threads von 0 bis 4095 nummeriert sind), und dann 4096 bis 8191 im zweiten Lauf und so weiter. Sie können extra printfoder applogzu cgminer/sgminer hinzufügen, um zu sehen, was die Nonce den Diff lösen und vom Pool akzeptiert werden kann. Grundsätzlich ist die für jeden akzeptierten Unterschied gedruckte Nonce auch ein Inkrementwert von einer kleinen zu einer größeren Zahl.
@jclin: Danke für die Kommentare. Ich habe den Fehler mit dem niedrigen Bit kurz nach dem Posten bemerkt, konnte ihn aber bis jetzt nicht korrigieren. Ich schätze die Details über cgminer und seine Interaktion mit der GPU; Ich werde sie sorgfältiger lesen, wenn ich mehr Zeit habe.
Auch ich muss meine Kommentare korrigieren. "2^8 Bits" ist das High-Byte (oder 8 Bits und hat 2^8 Werte)
Nachdem ich Ihre Antwort gelesen hatte, ist mir ein interessantes Experiment eingefallen: Führen Sie den gleichen Text über die Blockchain von Bitcoin und anderen SHA-256-Coins vor der Einführung von ASICs durch und dann noch einmal, bevor alle mit CPUs in den Bergbau einstiegen - die Ergebnisse könnten a haben andere Verteilung, oder sie könnten nicht. Beide Ergebnisse wären wirklich interessant!
Ich stimme zu. Die Endianness kann einen Hinweis darauf geben, dass verschiedene Mining-Geräte (GPU oder ASIC) den Block gefunden haben.

Ich habe die folgenden Tests mit C# durchgeführt (unter Verwendung des Block-Headers aus dem Litecoin-Wiki ; Dogecoin ist das gleiche Geschäft). Hier ist ein Test mit scrypt: (Ich habe das Limit nicht auf 14857 voreingestellt; es hat nur so lange gedauert, dass ich es dort gestoppt habe)

var dict = new Dictionary<uint, int> { { 0, 0 }, { 1, 0 } };
byte[] blockHeader = new byte[] { 0x01, 0x00, 0x00, 0x00, 0xae, 0x17, 0x89, 0x34, 0x85, 0x1b, 0xfa, 0x0e, 0x83, 0xcc, 0xb6, 0xa3, 0xfc, 0x4b, 0xfd, 0xdf, 0xf3, 0x64, 0x1e, 0x10, 0x4b, 0x6c, 0x46, 0x80, 0xc3, 0x15, 0x09, 0x07, 0x4e, 0x69, 0x9b, 0xe2, 0xbd, 0x67, 0x2d, 0x8d, 0x21, 0x99, 0xef, 0x37, 0xa5, 0x96, 0x78, 0xf9, 0x24, 0x43, 0x08, 0x3e, 0x3b, 0x85, 0xed, 0xef, 0x8b, 0x45, 0xc7, 0x17, 0x59, 0x37, 0x1f, 0x82, 0x3b, 0xab, 0x59, 0xa9, 0x71, 0x26, 0x61, 0x4f, 0x44, 0xd5, 0x00, 0x1d, 0x45, 0x92, 0x01, 0x80, };
for (uint nonce = 0; nonce < 14857; nonce++)
{
    var nonceBytes = BitConverter.GetBytes(nonce);
    Array.Copy(nonceBytes, 0, blockHeader, blockHeader.Length - 4, 4);
    var hash = SCrypt.ComputeDerivedKey(blockHeader, blockHeader, 1024, 1, 1, null, 32);
    if (hash[31] == 0)
        dict[nonce % 2] += 1;
}

Ergebnisse:

0 32
1 29

Und mit SHA256 (unter Verwendung des Blockheaders aus dem Bitcoin-Wiki )

var sha = SHA256.Create();
var dict = new Dictionary<uint, int> { { 0, 0 }, { 1, 0 } };
byte[] blockHeader = new byte[] {0x01,0x00,0x00,0x00,
    0x81,0xcd,0x02,0xab,0x7e,0x56,0x9e,0x8b,0xcd,0x93,0x17,0xe2,0xfe,0x99,0xf2,0xde,0x44,0xd4,0x9a,0xb2,0xb8,0x85,0x1b,0xa4,0xa3,0x08,0x00,0x00,0x00,0x00,0x00,0x00,
    0xe3,0x20,0xb6,0xc2,0xff,0xfc,0x8d,0x75,0x04,0x23,0xdb,0x8b,0x1e,0xb9,0x42,0xae,0x71,0x0e,0x95,0x1e,0xd7,0x97,0xf7,0xaf,0xfc,0x88,0x92,0xb0,0xf1,0xfc,0x12,0x2b,
    0xc7,0xf5,0xd7,0x4d,
    0xf2,0xb9,0x44,0x1a,
    0x42,0xa1,0x46,0x95,};
for (uint nonce = 0; nonce < 1000000; nonce++)
{
    var nonceBytes = BitConverter.GetBytes(nonce);
    Array.Copy(nonceBytes, 0, blockHeader, blockHeader.Length - 4, 4);
    var hash = sha.ComputeHash(sha.ComputeHash(blockHeader));
    if (hash[0] == 1)
        dict[nonce % 2] += 1;
}

Die Ergebnisse:

0 1908 
1 1951 

Dies zeigt, dass Münzalgorithmen unabhängig davon, ob die Nonce gerade ist, ungefähr die gleiche Anzahl von Ergebnissen mit hohem Schwierigkeitsgrad erzeugen. (Ich glaube, dies ist ein guter Test sowohl für SHA256-Münzen wie Bitcoin als auch für verschlüsselte Münzen wie Litecoin und Dogecoin; ja, ich tue so, als wäre die Schwierigkeit viel geringer, indem ich nur auf ein Byte achte, aber der Punkt bleibt)

Warum also sind Vielfache von 256 und gerade Zahlen in der realen Welt so verbreitet? Meine Vermutung ist, dass Mining-Software am häufigsten diese Nonces auswählt, obwohl sie keinen Vorteil haben. Was Sie zum Beispiel eine Nonce nennen, die durch 256 teilbar ist, könnte als Zahl unter 2^24 betrachtet werden (mit umgekehrter Endianness). Nonces müssen nicht mit hoher Entropie ausgewählt werden, daher ist es akzeptabel, dass sie etwas vorhersehbar sind - solange Sie nicht Ihre Zeit verschwenden, indem Sie dieselbe Nonce zweimal für denselben Blockheader verwenden.

Bitte beachten Sie, dass ich die Ergebnisse von kryptobasierten Kryptowährungen erhalten habe. Ich habe auch nicht das gleiche Muster gesehen, das in meiner Frage im SHA256-basierten Algorithmus erwähnt wurde. Außerdem ist es nicht genau, nur den Algorithmus auszuführen, da es einen Zielwert gibt, der sich aus der Schwierigkeit ableiten lässt, und das sha256- oder scrypt-Ergebnis kleiner als der Zielwert sein muss. Wenn Sie auch nur den Verschlüsselungsalgorithmus ausführen, werden Sie wahrscheinlich die gleichen Ergebnisse erzielen, dass gerade und ungerade keine großen Unterschiede in ihrem Auftreten haben.
Ich werde sehen, ob ich einen richtigen Test mit scrypt machen kann.
@jclin Ich habe meine Antwort aktualisiert, um scrypt einzuschließen. Wie ich erwartet hatte, sind gerade Nonces nicht besser als ungerade. (Ich wäre sehr überrascht, wenn dem so wäre – es würde bedeuten, dass diese Krypto-Hashes tatsächlich leicht manipuliert werden könnten.) Sie haben eine interessante Trivialität gefunden, nichts Bedeutendes.
Ich verstehe, dass Daten (sogar Nonce ist das LSB = 0), die mit sha256 oder scrypt berechnet werden, keine signifikanten Ergebnisse zur Bevorzugung von Even Nonces liefern. Wenn LTC auf niedrigem Schwierigkeitsgrad ist, zum Beispiel Block 0~10, können Sie sehen, dass die meisten davon ungerade Zahlen sind. Die im Block gefundene Nonce ist möglicherweise nicht die einzige Lösung, sondern nur die erste, die kleiner als der erforderliche Zielwert ist. So ist zum Beispiel LTC-Block Nr. 5 Nonce 6103, und es sollte eine gerade Zahl größer als 6103 geben, um den Block unter der Schwierigkeit zu lösen. Ihr Programm beweist nur, dass viele Nonces Ihre Anforderung von hash[0]=1 erfüllen können.
Also habe ich die Frage gestellt, weil ich das in Blockchain nicht verstehe. Ich gehe davon aus, dass Evens und Odds gleichmäßig in der Blockchain gefunden werden sollten, da alle Miner Nonce von 0~2^32 suchen. Niemand wird eine ungerade Zahl überspringen, weil beim gepoolten Mining, wenn jemand die Chancen überspringt, er nicht den Anteil erhält, der den durch den Pool bereitgestellten Diff lösen kann. Wenn jemand nur die Nonce im 2^24-Raum berechnet, muss er möglicherweise einige Daten ändern, z. B. den Zeitstempel, um die nächste Nonce von 0 bis 2^24 zu berechnen. Das letzte Byte mit 2^24 bildet also eine 4-Byte-Ganzzahl. Es macht keinen Sinn, 8 Bits der Nonce zu ignorieren.
Siehe meinen Kommentar, der unter der ursprünglichen Frage zum Endianness-Problem beantwortet wurde. Hoffentlich habe ich nicht viel Zeit mit der interessanten Trivialität verbracht. Ich denke, die meiste Zeit wird damit verbracht, auf Kommentare zu antworten, kleine Perl-Skripte zu schreiben (kleiner als Kommentare, auf die ich in Worten geantwortet habe), und Krypto-Währungen und Miner-Software sind Open Source.
@jclin: Wenn Scrypt wirklich sicher ist, ist das Überspringen von Nonces oder nicht im Solo- oder Pool-Mining irrelevant. Jede Nonce erzeugt mit gleicher Wahrscheinlichkeit einen gültigen Block, und ebenso erzeugt jede Nonce mit gleicher Wahrscheinlichkeit einen gültigen Share (was nur ein Ziel mit niedrigerem Schwierigkeitsgrad ist). Sie könnten alle Zahlen der Reihe nach durchgehen oder die geraden Zahlen oder die Primzahlen – es macht keinen Unterschied.

Die Endianness ist möglicherweise kein Problem, da sie entweder in Big oder Little Endian eine Möglichkeit bietet, die Möglichkeit zu erhöhen, die Nonce schnell zu finden, im Vergleich zu anderen, die nur nacheinander über 2 ^ 32-mal iterieren.

In Big Endian bedeutet das Ergebnis, dass > 80 % der Nonces unter dem Leerzeichen von 0 bis 2^24 gefunden werden. Verschwenden Sie also keine Zeit, um weiterhin 2^24 bis 2^32 zu versuchen, sondern gehen Sie einfach zur nächsten Sekunde vor oder ändern Sie einige Daten um die Nonce wieder von 0 zu finden.

In Little Endian bedeutet das Ergebnis, dass > 80 % der Nonces ein Vielfaches von 256 sind, sodass Sie möglicherweise auch 80 % bis 90 % der Möglichkeiten haben, die Nonce zu finden, die den Block lösen kann.

Da die Nonce nicht vorhersehbar ist, sollte es kein Problem sein, die Nonce von 0 aufwärts in Big Endian oder Little Endian zu zählen. Sie konnten immer eine mögliche Lösung für den Block finden.

Nein, ich glaube du hast einen Denkfehler. Dieser Ansatz wird kein einziges Mal schneller gewinnen - es wird genau dasselbe sein. Jede Nonce hat die gleiche Gewinnchance. Der Wert der gewinnenden Nonce, falls es überhaupt eine für einen bestimmten Block gibt, ist völlig zufällig; er liegt genauso wahrscheinlich zwischen 0 und 2^24wie in jedem anderen gleich großen Bereich. Für einige Blöcke (in der Tat die überwiegende Mehrheit) gibt es keine 32-Bit-Nonce, die gewinnt. Für andere mögen es viele sein.
Es spielt also überhaupt keine Rolle, welche Nonce-Werte Sie ausprobieren oder ob Sie alle Nonces für einen bestimmten Block ausprobieren oder ob Sie aufgeben, bevor Sie alle ausprobiert haben, und den Block-Header auf andere Weise ändern. Am Ende des Tages hängt die durchschnittliche Anzahl der gefundenen Gewinnblöcke nur von der Anzahl der verschiedenen gültigen Block-Header ab, die Sie zu hashen versucht haben – wie genau sie sich unterscheiden, ist völlig irrelevant.
Und meiner Hypothese zufolge finden mehr Menschen Nonces zwischen 0 und 2^24, weil mehr Menschen dort suchen - weil es rechnerisch bequem ist, dies zu tun. Wenn wir alle zu einem Miner wechseln würden, der es vorzieht, Nonces zwischen 145235236 und 162012452 auszuprobieren, würden wir erwarten, viele gewinnbringende Nonces in diesem Bereich zu finden, aber die gefundene Gesamtzahl wäre im Durchschnitt genau gleich.
Ich glaube, dass jede Nonce die gleiche Gewinnchance hat. Wenn man bedenkt, dass das Suchspiel sequentiell ist, ist das, was man zuerst hat oder schnell bekommt, der Schlüssel, um den Block zu lösen. Wie bei einem Würfelspiel, wenn Sie wissen, dass Nummer sechs häufig auftaucht, könnten Sie sechs kaufen, um mehr als andere zu gewinnen. Einen Würfel mehrmals zu werfen und 6,6,6,6 zu zeigen, bedeutet nicht, dass der Würfel unfair ist. Darauf könnten 5,5,5,5,4,4,4,4,...,1,1,1,1 folgen und die Möglichkeit jeder Würfelzahl ist 1/6, und wir könnten es sein beim 2. oder 3. Auftritt von 6.
Ich bin mir nicht sicher, ob es rechnerisch bequem ist oder nicht, nur 24 Bit einer Ganzzahl zu berechnen. Wie ich weiß, scannt der beliebte cgminer und sgminer mit Ausnahme der ASIC-Miner-Implementierung einmal bis 0xFFFFFFFF oder die Zeit ist abgelaufen oder wird aufgrund eines neuen Blocks abgebrochen.
Ganz recht. Ich vermute , dass es normalerweise abbricht, bevor es 0x00FFFFFF erreicht. Beachten Sie, dass ein neuer Block nicht das Einzige ist, was einen Neustart auslösen würde – ebenso das Eintreffen einer neuen Transaktion, die der Miner in den aktuellen Block aufnehmen möchte (was den Merkle-Root-Wert im Header ändert). Im Durchschnitt kommt alle paar Sekunden eine neue Transaktion – viel häufiger als ein neuer Block, der durchschnittlich 2,5 Minuten dauert.
Der "rechnerisch bequeme" Teil ist, dass es praktisch ist, nach jedem Neustart mit einer Nonce von 0 zu beginnen - und das bedeutet, dass niedrige Nonces viel häufiger ausprobiert werden als höhere. Es wäre nicht weniger praktisch, stattdessen bei einer Nonce von 0xDEADBEEF zu beginnen, es würde im Code nur seltsam aussehen - aber wenn dies der Fall wäre, würde sich diese Frage darum drehen, warum so viele Nonces 0xDE als Low-Byte haben.
@NateEldredge Vergessen Sie nicht den Zeitstempel, der jede Sekunde aktualisiert werden sollte (ich weiß nicht genau, ob sie das tatsächlich tun, aber dies würde einen einmaligen Neustart viel schneller auslösen als eine neue eingehende Transaktion).
Jede Sekunde neu zu starten ist eine Miner-Wahl, keine zwingende Voraussetzung für das Mining, denke ich. Aber es sollte eine Toleranz für die veralteten Sekunden geben, nicht alle veralteten Zeitstempel werden akzeptiert. Die neu eingehenden Transaktionen (innerhalb weniger Sekunden) müssen auch nicht für den letzten Block erforderlich sein, insbesondere wenn die Gebühr null beträgt.