Warum schiebt das Genesis-Block-Coinbase-Eingabeskript Bits und den Wert 0x04 vor die berühmte „Chancellor“-Nachricht?

Laut Wiki besteht das Eingabeskript des Genesis-Blocks aus diesen Bytes:

04FFFF001D0104455468652054696D65732030332F4A616E2F32303039204368616E63656C6C6F72206F6E206272696E6B206F66207365636F6E64206261696C6F757420666F722062616E6B73

Wir können dies wie folgt aufschlüsseln:

  • 0x04: drücke 4 Bytes
  • 0xffff001d: derselbe Wert wie das "bits"-Feld des Genesis-Block-Headers
  • 0x01: 1 Byte drücken
  • 0x04: Drücken Sie den Wert 4
  • Rest: ASCII-Kodierung der berühmten Nachricht "The Times 03/Jan/2009 Chancellor on brink of second bailout for banks"

Soweit ich weiß, sind die ersten beiden Werte, die auf den Stapel geschoben werden ( 0xffff001dund 0x04), unnötig. Natürlich auch die Kanzlerbotschaft, aber zumindest ist ihre Bedeutung etwas klarer.

Das Push bits/ 0x04Pattern taucht jedoch auch in anderen Blöcken auf. Zum Beispiel zeigt sich das gleiche Muster im nächsten Block (0e3e2357e806b6cdb1f70b54c3a3a17b6714ee1f0e68bebb44a74b1efd512098).

Ich habe diese Frage gefunden , mit einer Antwort, die spekuliert:

010445 sind also tatsächlich Teil von 2 Operationen - 01 schiebt 04 auf den Stapel, 45 schiebt die Nachricht auf den Stapel. Warum push 04, schlägt mich, vielleicht war es nur ein Test, um sicherzustellen, dass etwas funktioniert? Ein interner Zähler, der von Satoshi während der Genesis-Blockerstellung verwendet wird? Da das Skript einer Münzgenerierungstransaktion wirklich bedeutungslos ist, werden wir es vielleicht nie erfahren.

Meine Fragen:

  1. Sind diese anfänglichen Push-Datenoperationen notwendig?
  2. Wenn nicht, warum erscheinen diese Elemente (Bits und 0x04) in mehr als einem Block?
  3. War das Hinzufügen dieses Präfixes zum Transaktionseingabeskript von Coinbase Teil des Standardverhaltens des ursprünglichen Bitcoin-Clients?
  4. Wenn nicht, wäre dies nicht eine Signatur für Blöcke, die Satoshi abgebaut hat?

Antworten (1)

Im Wiki habe ich noch ein paar Infos gefunden:

Generationen haben eine einzige Eingabe, und diese Eingabe hat einen "coinbase"-Parameter anstelle eines scriptSig. Die Daten in „coinbase“ können alles sein; es wird nicht verwendet. Bitcoin setzt dort das aktuelle Ziel im Kompaktformat und die „extraNonce“-Zahl mit beliebiger Genauigkeit, die sich jedes Mal erhöht, wenn das Nonce-Feld im Block-Header überläuft. Ausgaben können alles sein, aber Bitcoin erstellt eine genau wie eine IP-Adresstransaktion. Die Extranonce trägt dazu bei, die Domäne für die Proof-of-Work-Funktion zu erweitern. Bergleute können Nonce (4 Byte), Zeitstempel und Extranonce (2 bis 100 Byte) leicht ändern.

https://en.bitcoin.it/wiki/Transaktion

Mit anderen Worten, der erste Bitcoin-Client kopierte das „Bits“-Feld (Ziel im kompakten Format) aus dem Block-Header und verwendete es in einer Push-Datenoperation für das Coinbase-Eingabeskript. Aber ich bin mir immer noch nicht sicher, warum dies als eine gute Idee angesehen wurde.

Als nächstes schiebt eine zweite pushdata-Operation das "extranonce"-Feld. Dieses Feld wird immer dann inkrementiert, wenn das Nonce-Feld übergelaufen ist. Die Datenschutzauswirkungen dieses Systems werden hier diskutiert:

https://bitslog.wordpress.com/2013/04/17/the-well-deserved-fortune-of-satoshi-nakamoto/

Ich glaube, ich kann jetzt meine eigenen Fragen beantworten:

  1. NEIN.
  2. Bits ist da, weil Bitcoin genau das getan hat. 0x04ist das Extranonce-Feld.
  3. Ja.
  4. Ja, teilweise.
Dieses Verhalten ist Teil des ursprünglichen Clients, den Sie hier sehen können: github.com/bitcoin/bitcoin/blob/v0.1.5/main.cpp#L2242 . Es gibt keinen besonderen Grund, das nBits-Feld einzubeziehen, und es ist keine übereinstimmende Anforderung, dies zu tun.