Bitcoin-Mining-Algorithmus

Ich habe mir einige Beispiel-Mining-Algorithmen und auch Beispielcode angesehen und da war etwas, das ich nicht wirklich verstand. Im einfachen Bitcoin-Mining-Algorithmus sagt er: Der einfachste Miner würde so funktionieren:

The simplest miner would work like this:

     1. Request a new [Getwork][1] from a given pool/bitcoind with specified credentials
     2. For nonce=0;nonce<0xFFFFFFFF;nonce++
     - Set Getwork Data nonce
     - SHA-256 hash the Getwork Data ([block header][2])
     - Check if hash result is smaller than Getwork Target, if so, submit a share
     - If more than 1 second passed since you received Getwork, stop the loop
     3. GOTO: 1

Was ich nicht verstehe, ist Schritt 2, Teil 4. Betrachten wir das obige Skript ist über einen UART-Port mit einem FPGA verbunden. Soll ich nicht warten, bis das FPGA tatsächlich eine gültige Nonce findet und die None über die UART-Leitung sendet? Warum sollte ich die Schleife nach 1 Sekunde verlassen und dann den gesamten Vorgang erneut durchlaufen? Das macht für mich keinen Sinn, weil der FPGA dann nur ein paar Sekunden Zeit hat, um die Nonce für die gegebene Arbeit zu erhöhen, und dann mit der nächsten Arbeit fortfährt? Wie ist das überhaupt realistisch, denn selbst wenn dieselbe Arbeit erneut eingereicht wird, wird sie dieselbe Schleife durchlaufen und am Ende nichts Produktives bewirken. Welchen Fehler mache ich hier? Beispielcode, von dem ich spreche:

https://github.com/progranism/Open-Source-FPGA-Bitcoin-Miner/blob/master/projects/Verilog_Xilinx_Port/sources/software/miner.py macht dasselbe. Es sagt golden.wait(timeout), anstatt nur golden.wait() aufzurufen und zu blockieren, bis eine Nonce gefunden wird

Antworten (2)

Die gehashten Daten werden ständig aktualisiert. Der Blockheader enthält ein Zeitfeld und wird alle paar Sekunden aktualisiert. Wenn es keine Zeitüberschreitung und kein Zurücksetzen gibt (neue Arbeit erhalten), arbeitet der Algorithmus an einem veralteten Header.

„Beim Generieren hashst du ständig den Block-Header. Der Block wird auch gelegentlich aktualisiert, während du daran arbeitest.“ https://en.bitcoin.it/wiki/Block_hashing_algorithm

Da ich absolut nichts darüber weiß, wie das funktioniert, würde ich die Hypothese aufstellen:

  • dass andere die gleiche Arbeit bekommen
  • Je länger Sie an den Daten kauen, desto höher ist die Wahrscheinlichkeit, dass jemand anderes das Problem bereits gelöst hat
  • Auch wenn dies bei jeder Iteration im Netzwerk wartet, startet es den 1-Sekunden-Timer, nachdem es die Arbeit erhalten hat