Wenn Miner sich mit dem Server verbinden, erhalten sie eine „Job“-Nachricht mit einem merkle_branch-Feld zurück, das Hashes enthält, die Transaktionen entsprechen, die in den Block aufgenommen werden, an dem gearbeitet wird.
Was ich mich frage, ist, stört sich der Pool-Server sehr oft daran, diesen Transaktionssatz zu ändern, oder warten sie nur darauf, dass ein Block gelöst wird, und übertragen erst dann einen neuen Job mit einer anderen Liste?
Mit anderen Worten: Arbeiten zwischen den Blocklösungen alle im Pool im Allgemeinen an denselben Transaktionen?
Die Stratum-Pool-Verwaltungssoftware, mit der ich vertraut bin, ist https://github.com/zone117x/node-stratum-pool , also kann ich Ihnen sagen, was sie tun. Stratum ist jedoch ein Protokoll, sodass mehrere Softwareteile es unterschiedlich implementieren könnten.
Dieser Parameter wird durch das in der config gesteuert blockRefreshInterval
. Alle blockRefreshInterval
Millisekunden prüft der Stratum-Server den Bitcoin-Kernknoten über RPC auf neue Blöcke mit getblocktemplate
. Wenn es seit dem letzten Aufruf keinen neuen Block gegeben hat getblocktemplate
, setzt er den aktuellen Job, der an alle neuen Arbeitsanforderungen zurückgegeben wird.
Das in der Konfiguration vorgeschlagene Abfrageintervall beträgt alle 1 Sekunde. Bergleute können auch Arbeit zu sehr unterschiedlichen Raten anfordern, so dass einige möglicherweise an älteren Arbeiten arbeiten. Solange es für den nächsten Block funktioniert, gilt es jedoch als gültig. Der Pool verwendet jedoch dieselben Node- und Mempool-Daten, um Blöcke zu erstellen. Angesichts all dieser Variablen werden Miner also höchstwahrscheinlich nicht an genau demselben Transaktionssatz arbeiten .
Relevante Codebits:
Fraggle
Morsecoder
Morsecoder
Morsecoder
Fraggle