Wie liest man die Transaktion eines Blocks?

Angesichts dieses Beispielblocks (es ist übrigens der Genesis-Block):

0100000000000000000000000000000000000000000000000000000000000000000000003ba3edfd7a7b12b27ac72c3e67768f617fc81bc3888a51323a9fb8aa4b1e5e4a29ab5f49ffff001d1dac2b7c0101000000010000000000000000000000000000000000000000000000000000000000000000ffffffff4d04ffff001d0104455468652054696d65732030332f4a616e2f32303039204368616e63656c6c6f72206f6e206272696e6b206f66207365636f6e64206261696c6f757420666f722062616e6b73ffffffff0100f2052a01000000434104678afdb0fe5548271967f1a67130b7105cd6a828e03909a67962e0ea1f61deb649f6bc3f4cef38c4f35504e51ec112de5c384df7ba0b8d578a4c702b6bf11d5fac00000000

Ich habe es wie hier beschrieben aufgeteilt :

01000000                                                          // Version
0000000000000000000000000000000000000000000000000000000000000000  // Hash Previous Block
3ba3edfd7a7b12b27ac72c3e67768f617fc81bc3888a51323a9fb8aa4b1e5e4a  // Merkle Root
29ab5f49                                                          // Time
ffff001d                                                          // Difficulty
1dac2b7c                                                          // Nonce
01                                                                // Number of Transactions
 Tx1:
 01000000010000000000000000000000000000000000000000000000000000000000000000ffffffff4d04ffff001d0104455468652054696d65732030332f4a616e2f32303039204368616e63656c6c6f72206f6e206272696e6b206f66207365636f6e64206261696c6f757420666f722062616e6b73ffffffff0100f2052a01000000434104678afdb0fe5548271967f1a67130b7105cd6a828e03909a67962e0ea1f61deb649f6bc3f4cef38c4f35504e51ec112de5c384df7ba0b8d578a4c702b6bf11d5fac00000000

Aber wie ist die Transaktion Tx1 (in diesem Fall) lesbar? Offensichtlich ist es kein standardmäßiger englischer Klartext. Wie kann ich es entschlüsseln, damit ich erkenne, dass Satoshi Nakamoto beispielsweise in dieser Transaktion Tx1 50 BTC als Coin-Base-Transaktion gesendet hat?

Antworten (3)

Die Transaktion liegt wie der Block in einem serialisierten Format vor. Eine Beschreibung des Formats ist auf bitcoin.org verfügbar

Ich habe diese Ressource für Sie, vielleicht könnte dies nützlich sein: https://bitfalls.com/2017/10/03/read-bitcoin-blockchain-data-blockexplorer/

Während dies die Frage theoretisch beantworten kann, wäre es vorzuziehen , die wesentlichen Teile der Antwort hier aufzunehmen und den Link als Referenz bereitzustellen. Dies soll verhindern, dass der Link herunterfährt und die Antwort nutzlos wird :)

Ich habe den TX zerlegt, um ihn besser sichtbar zu machen, der Roh-TX ist dieser:

01000000010000000000000000000000000000000000000000000000000000000000000000FFFFFFFF4D04FFFF001D0104455468652054696D65732030332F4A616E2F32303039204368616E63656C6C6F72206F6E206272696E6B206F66207365636F6E64206261696C6F757420666F722062616E6B73FFFFFFFF0100F2052A01000000434104678AFDB0FE5548271967F1A67130B7105CD6A828E03909A67962E0EA1F61DEB649F6BC3F4CEF38C4F35504E51EC112DE5C384DF7BA0B8D578A4C702B6BF11D5FAC00000000

VERSION
 01000000

TX_IN COUNT [var_int]: hex=01, decimal=1
 TX_IN[0]
  TX_IN[0] OutPoint hash (char[32])
  0000000000000000000000000000000000000000000000000000000000000000
  TX_IN[0] OutPoint index (uint32_t)
  hex=FFFFFFFF, reversed=FFFFFFFF, decimal=4294967295
  TX_IN[0] Script Length (var_int)
  hex=4D, decimal=77
  TX_IN[0] Coinbase and Sequence
  04FFFF001D0104455468652054696D...
  TX_IN[0] Sequence (uint32_t)
  FFFFFFFF

TX_OUT COUNT, hex=01, decimal=1
 TX_OUT[0]
  TX_OUT[0] Value (uint64_t)
  hex=00F2052A01000000, reversed_hex=000000012A05F200, dec=5000000000, bitcoin=50.00000000
  TX_OUT[0] PK_Script Length (var_int)
  hex=43, dec=67
  TX_OUT[0] pk_script (uchar[])
  4104678AFDB0FE5548271967F1A67130B7105CD6A828E03909A67962E0EA1F61DEB649F6BC3F4CEF38C4F35504E51EC112DE5C384DF7BA0B8D578A4C702B6BF11D5FAC

 LOCK_TIME
00000000

Das Feld für den vorherigen tx (OutPoint Hash) wird auf Nullen gesetzt und das nächste Feld auf „FFFFFFFF“ (wobei Sie normalerweise einen Wert für den vorherigen tx-Outpoint haben). Also nichts zu "ausgeben". In tx_out geht die Zahlung an einen öffentlichen Schlüssel, was übersetzt bedeutet: 1A1zP1eP5QGefi2DMPTfTL5SLmv7DivfNa