¿Cómo leer la transacción de un bloque?

Dado este bloque de ejemplo (por cierto, es el bloque de génesis):

0100000000000000000000000000000000000000000000000000000000000000000000003ba3edfd7a7b12b27ac72c3e67768f617fc81bc3888a51323a9fb8aa4b1e5e4a29ab5f49ffff001d1dac2b7c0101000000010000000000000000000000000000000000000000000000000000000000000000ffffffff4d04ffff001d0104455468652054696d65732030332f4a616e2f32303039204368616e63656c6c6f72206f6e206272696e6b206f66207365636f6e64206261696c6f757420666f722062616e6b73ffffffff0100f2052a01000000434104678afdb0fe5548271967f1a67130b7105cd6a828e03909a67962e0ea1f61deb649f6bc3f4cef38c4f35504e51ec112de5c384df7ba0b8d578a4c702b6bf11d5fac00000000

Lo dividí como se describe aquí :

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

Pero, ¿cómo es legible la transacción Tx1 (en este caso)? Obviamente, no es un texto claro predeterminado en inglés. ¿Cómo puedo decodificarlo para que reconozca que Satoshi Nakamoto envió 50 BTC como una transacción de base de monedas en esta transacción Tx1, por ejemplo?

Respuestas (3)

La transacción, como el bloque, está en formato serializado. Una descripción del formato está disponible en bitcoin.org

Si bien esto puede responder teóricamente a la pregunta, sería preferible incluir las partes esenciales de la respuesta aquí y proporcionar el enlace como referencia. Esto es para evitar que el enlace se caiga y la respuesta se vuelva inútil :)

Descompuse el tx para hacerlo más visible, el tx sin procesar es este:

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

El campo para el tx anterior (OutPoint Hash) se establece en ceros, y el siguiente campo en "FFFFFFFF" (donde normalmente tiene un valor para el punto de salida de tx anterior). Así que nada para gastar "desde". En tx_out el pago va a una clave pública, lo que se traduce en: 1A1zP1eP5QGefi2DMPTfTL5SLmv7DivfNa