¿Cuál es el formato de la transacción coinbase?

Estoy tratando de entender el formato de la transacción de coinbase. He leído que es arbitrario y no especificado. Me pregunto porque necesito generar trabajo de minería y crear un grupo interno. Como descubrí, puede cambiar los ntimecampos y nonce. extranonceEl último debería ser adecuado en el parámetro coinbase, ¿verdad? Entonces, ¿alguien puede ayudarme a analizar el contenido de la transacción de coinbase y cómo se supone que debo construir una, para que todos los mineros en mi grupo puedan tener diferentes encabezados para el hash? Una guía paso a paso sobre un bloque existente sería muy apreciada, enlaces y otras cosas también.

Respuestas (2)

Una transacción de coinbase sigue el mismo formato que una transacción normal, excepto:

  • Tiene exactamente una txin
  • El hash previo a la salida de esta txin es 0000...0000.
  • El índice de salida previa de este txin es 0xFFFFFFFF
  • La secuencia de comandos previa a la salida de txin es una matriz de bytes arbitraria (no tiene que ser una secuencia de comandos válida, aunque esto se hace comúnmente de todos modos) de 2 a 100 bytes. Tiene que empezar con un empuje correcto de la altura del bloque (ver BIP34).
  • La suma de los valores de txout no puede exceder el subsidio (25 BTC por ahora, mitades cada 210000 bloques) más las tarifas de las transacciones sin base de monedas en el mismo bloque.

Acerca de que scriptSig es una matriz de bytes arbitraria, hay una advertencia: las operaciones checksig en él se cuentan para el límite de sigop de bloque (20000), por lo que probablemente no desee activar esto accidentalmente. Hacer que sea una lista de solo operaciones push (incluida la extranonce) evita eso.

Mire el bloque #280963 . Mira la transacción de coinbase d1c6b8...fd08 . Puede ver los datos de CoinBase:

038349040d00456c69676975730052d8f72ffabe6d6dd991088decd13e658bbecc0b2b4c87306f637828917838c02a5d95d0e1bdff9b0400000000000000002f73733331312f00906b570400000000e4050000

Este es un guión. Mire wiki para más detalles. En la transacción coinbase, este script puede contener cualquier dato. Si cambia estos datos, la raíz de merkle también cambiará, y diferentes mineros pueden comenzar a cambiar el nonce/marca de tiempo para la raíz de merlke, que usted les proporciona. Mire wiki para obtener más información sobre el árbol merkle.

La transacción de Coinbase contiene una sola entrada. Esta entrada no se usa y contiene 32 bytes ceros como tx anterior. Mire wiki para obtener más información sobre qué datos contiene la transacción. Proporciono como ejemplo de decodificación de transacciones de base de monedas sin procesar.

> 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