Welches Format hat die Coinbase-Transaktion?

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, nonceund ändern. extranonceDer 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.

Antworten (2)

Eine Coinbase-Transaktion folgt dem gleichen Format wie eine normale Transaktion, außer:

  • Es hat genau ein txin
  • Der vorherige Hash dieses TXins ist 0000...0000.
  • Der Prevout-Index dieses TXins ist 0xFFFFFFFF
  • Das Prevout-Skript von txin ist ein beliebiges Byte-Array (es muss kein gültiges Skript sein, obwohl dies normalerweise sowieso gemacht wird) von 2 bis 100 Bytes. Es muss mit einem korrekten Schub der Blockhöhe beginnen (siehe BIP34).
  • Die Summe der Werte des Txouts darf die Subvention (vorerst 25 BTC, halbiert sich alle 210000 Blöcke) zuzüglich der Gebühren der Nicht-Coinbase-Transaktionen im selben Block nicht überschreiten.

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