Ich versuche, das Format der Coinbase-Transaktion zu verstehen. Ich habe gelesen, dass es willkürlich und nicht spezifiziert ist. Ich frage mich, weil ich Mining-Arbeit generieren und einen internen Pool erstellen muss. Wie ich herausgefunden habe, können Sie die Felder ntime
, nonce
und ändern. extranonce
Der letzte sollte in den Coinbase-Parameter passen, oder? Kann mir also jemand helfen, den Inhalt der Coinbase-Transaktion zu analysieren und wie soll ich eine erstellen, damit alle Miner in meinem Pool unterschiedliche Header für das Hashing haben könnten? Eine Schritt-für-Schritt-Anleitung zu einem bestehenden Block wäre sehr willkommen, Links und andere Dinge auch.
Eine Coinbase-Transaktion folgt dem gleichen Format wie eine normale Transaktion, außer:
Da es sich bei scriptSig um ein beliebiges Byte-Array handelt, gibt es eine Einschränkung: Die darin enthaltenen checksig-Operationen werden auf das Block-Sigop-Limit (20000) angerechnet, sodass Sie dies wahrscheinlich nicht versehentlich auslösen möchten. Wenn Sie es zu einer Liste nur von Push-Operationen (einschließlich der Extranonce) machen, wird dies vermieden.
Sehen Sie sich Block #280963 an . Sehen Sie sich die Coinbase-Transaktion d1c6b8...fd08 an . Sie können CoinBase-Daten sehen:
038349040d00456c69676975730052d8f72ffabe6d6dd991088decd13e658bbecc0b2b4c87306f637828917838c02a5d95d0e1bdff9b0400000000000000002f73733331312f00906b570400000000e4050000
Dies ist ein Skript. Siehe Wiki für Details. In der Coinbase-Transaktion kann dieses Skript beliebige Daten enthalten. Wenn Sie diese Daten ändern, ändert sich auch Merkle Root, und verschiedene Miner können damit beginnen, Nonce/Timestamp für Merlke Root zu ändern, die Sie ihnen zur Verfügung stellen. Weitere Informationen zum Merkle-Baum finden Sie im Wiki .
Die Coinbase-Transaktion enthält eine einzelne Eingabe. Dies ist eine Eingabe, die nicht verwendet wird, und sie enthält 32 Bytes Nullen als vorherige tx. Sehen Sie sich das Wiki an , um weitere Informationen darüber zu erhalten, was die Datentransaktion enthält. Ich biete als Beispiel für die Dekodierung von Raw-Coinbase-Transaktionen.
> getrawtransaction d1c6b8140246950475735394b0ac68f9ada60d313d2b5308afbc569c84f7fd08
< 01000000010000000000000000000000000000000000000000000000000000000000000000ffffffff53038349040d00456c69676975730052d8f72ffabe6d6dd991088decd13e658bbecc0b2b4c87306f637828917838c02a5d95d0e1bdff9b0400000000000000002f73733331312f00906b570400000000e4050000ffffffff01bf208795000000001976a9145399c3093d31e4b0af4be1215d59b857b861ad5d88ac00000000
01000000 - version
01 - input count
0000000000000000000000000000000000000000000000000000000000000000 - prev tx
ffffffff - prev out n
53 - length of coinbase script
038349040d00456c69676975730052d8f72ffabe6d6dd991088decd13e658bbecc0b2b4c87306f637828917838c02a5d95d0e1bdff9b0400000000000000002f73733331312f00906b570400000000e4050000 - coinbase script
ffffffff - sequence
01 - output count
bf20879500000000 - 2508660927, satoshi count, or 25.08660927 BTC
19 - script length
76a9145399c3093d31e4b0af4be1215d59b857b861ad5d88ac - script
00000000 - locktime