Transacción Coinbase

La primera transacción de un bloque, que crea nuevos bitcoins

Una transacción coinbase es la primera transacción de un bloque.

La coloca el minero cuando construye el bloque candidato, para poder reclamar la recompensa del bloque (subsidio + tarifas) si consigue minar el bloque.

Es un tipo especial de transacción que tiene una única entrada vacía. En otras palabras, las salidas de las transacciones coinbase son la fuente de nuevos bitcoins.

Requisitos

¿Qué tiene de diferente una transacción coinbase?

Una transacción coinbase tiene la misma estructura básica que una transacción normal, pero con algunos requisitos especiales:

Con el tiempo, algunos requisitos adicionales se añadieron a la transacción coinbase debido a actualizaciones, pero la estructura básica siguió siendo la misma.

Ejemplos

¿Cómo es una transacción coinbase?

1. Básica

Altura: 0 a 227.835

Esta es la transacción coinbase del bloque 150.007:

01000000 01
0000000000000000000000000000000000000000000000000000000000000000 ffffffff
08 04233fa04e028b12 ffffffff
01
30490b2a01000000 43 41047eda6bd04fb27cab6e7c28c99b94977f073e912f25d1ff7165d9c95cd9bbe6da7e7ad7f2acb09e0ced91705f7616af53bee51a238b7dc527f2be0aa60469d140ac
00000000

Como puedes ver, solo tiene una entrada vacía. El TXID es todo ceros y el VOUT es el valor máximo 0xffffffff. Ese es el requisito básico de toda transacción coinbase. Hay solo una salida, con valor de 5000350000 sats (subsidio de 5.000.000.000... en realidad 50 BTC menos halvings; aquí los 350000 sats extra fueron las tarifas de las otras 10 transacciones del bloque), bloqueada con un script P2PK.

2. Altura en la Coinbase

Altura: 227.836+ (BIP 34)

Debido al BIP 34, a partir de la altura 227.836 los mineros deben poner la altura del bloque actual al inicio del ScriptSig. Por ejemplo, el ScriptSig de la coinbase del bloque 400.021 es:

03951a0604f15ccf5609013803062b9b5a0100072f425443432f20

Ese ScriptSig contiene cuatro pushes de datos separados:

  1. 951a06 – La altura del bloque actual en little-endian. Convertida a big-endian obtenemos 061a95, que en decimal es 400021.
    Ícono de herramienta Little Endian

    Little Endian

    Convierte un número entre los órdenes de bytes big-endian y little-endian.

    0d
    0x
    0 bytes
    0x
    0 bytes
    Tamaño del campo
  2. f15ccf56 y 013803062b9b5a0100Desconocidos. No decodifican en texto ASCII específico, así que podrían haber sido ExtraNonces.
  3. 2f425443432f20 – Los bytes ASCII del texto "/BTCC/", que es la etiqueta del minero.
    Ícono de herramienta ASCII

    ASCII

    Convierte entre bytes (en hexadecimal) y caracteres ASCII.

    0 bytes
    Bytes
    0 caracteres
    • Los bytes hex entre 0x20 y 0x7f contienen los caracteres imprimibles.
    • Cualquier valor 0x1f o inferior es un carácter de control (no se mostrará, o mostrará un carácter extraño).
    • Cualquier valor 0x80 o superior no mostrará nada.

    Consulta el estándar de codificación ISO 646 para más detalles.

Solo el primer push (la altura del bloque) era obligatorio. Después de eso, el minero era libre de incluir cualquier dato.

La razón de incluir la altura en la transacción coinbase es evitar TXIDs duplicados.

3. SegWit

Altura: 481.824+ (BIP 141)

Desde la actualización SegWit, toda transacción coinbase debe incluir un valor reservado de testigo (witness reserved value) de 32 bytes en el campo de testigo de la entrada, y usar eso junto con una raíz de testigo (witness root hash) para colocar un compromiso de wTXID (wTXID commitment) en el ScriptPubKey de una de las salidas.

El compromiso de wTXID se calcula así: reúnes los wTXIDs de todas las transacciones del bloque (con el wTXID de la coinbase como todo ceros, para evitar una referencia circular), calculas la raíz de Merkle de ellos (la raíz de testigo), y luego haces HASH256 de la raíz de testigo concatenada con el valor reservado.

Ícono de herramienta Raíz de Merkle

Raíz de Merkle

Calcule la raíz de Merkle a partir de una lista de TXIDs.

Bloque

Una lista de TXIDs separados por espacios, comas o nuevas líneas. Las comillas y los corchetes se ignoran.

Los TXIDs deben insertarse en la orden de bytes invertida (como aparecen en los exploradores), pero se convierten a la orden de bytes natural antes de calcular la raíz de Merkle.

TXIDs (0)

El orden de los bytes como sale de la función hash

El orden de los bytes como se muestra en los exploradores

Ícono de herramienta HASH256

HASH256

SHA-256 doble. Se usa para hashear cabeceras de bloque, datos de transacción y prácticamente cualquier cosa que necesite hash en Bitcoin.

0 bytes
SHA-256
SHA-256

SHA-256(SHA-256(dados))

0 bytes

El compromiso de wTXID se coloca entonces en el ScriptPubKey de la segunda salida, prefijado con el encabezado de compromiso aa21a9ed (para saber que ese ScriptPubKey contiene el compromiso). Ese ScriptPubKey también empieza con OP_RETURN, haciendo que la salida no sea gastable — lo cual está bien, porque no contiene satoshis y solo sirve para el compromiso.

Si el bloque no contiene ninguna transacción segwit, la coinbase no necesita incluir el valor reservado ni el compromiso de wTXID.

Madurez de la Coinbase

¿Cuándo puedes gastar una transacción coinbase?

Las salidas de una transacción coinbase solo pueden gastarse después de que la transacción tenga 100 bloques de profundidad en la blockchain.

¿Por qué? Porque, si un minero gastara la salida de la coinbase inmediatamente y hubiera una reorganización de la cadena que eliminara el bloque de la coinbase, entonces esa transacción y todos sus descendientes se volverían inválidos. Como la coinbase contiene la altura (y cambiar la altura cambiaría el TXID), esa transacción exacta no podría volver a la blockchain después, y todas las transacciones hijas quedarían permanentemente inválidas.

Así que, esperando 100 bloques, puedes tener la confianza de que la coinbase está asentada (las reorganizaciones típicas solo tienen 1 o 2 bloques de profundidad).

La coinbase podría ser eliminada después de 100 bloques por un ataque de 51%. Pero la regla de los 100 bloques sirve para proteger contra los problemas causados por reorganizaciones típicas.

La configuración de madurez de la coinbase se encuentra en consensus.h.

Ejemplo

La transacción coinbase del bloque 400.000 se gastó en la primera oportunidad, en el bloque 400.101:

Notas

Recursos