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:
- Tiene una única entrada vacía: el TXID es todo ceros y el VOUT es el valor máximo
0xffffffff. - El minero puede poner cualquier dato que quiera en el ScriptSig (no hay nada que desbloquear).
- La salida bloquea la recompensa del bloque a una dirección del minero.
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:
951a06– La altura del bloque actual en little-endian. Convertida a big-endian obtenemos061a95, que en decimal es 400021.Little Endian
f15ccf56y013803062b9b5a0100– Desconocidos. No decodifican en texto ASCII específico, así que podrían haber sido ExtraNonces.2f425443432f20– Los bytes ASCII del texto "/BTCC/", que es la etiqueta del minero.ASCII
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.
Raíz de Merkle
HASH256
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:
- a8d0c0184dde994a09ec054286f1ce581bebf46446a512166eae7628734ea0a5 – Transacción coinbase en el bloque 400.000.
- db3aa6d43629953a5af092a480259eab383b2f86c13fb559eb49ff92c3a43a6d – Salida de la coinbase gastada en el bloque 400.101.
Notas
- Las monedas pueden perderse para siempre si un minero no reclama la recompensa completa. Por ejemplo, el subsidio del bloque 526.591 era 12,5 BTC, pero el minero solo se envió 6,25 BTC en la salida de la coinbase, perdiendo 6,25 BTC. No hay razón para que un minero haga eso, pero muestra que las monedas pueden perderse si la coinbase no se construye correctamente.