---
# System prepended metadata

title: 08 - Transacción Coinbase

---

# 08 - <font color="#F7A004">Transacción Coinbase</font>
> Reclamando la recompensa del bloque

![image](https://hackmd.io/_uploads/S1E4nR2Dge.png)
:::info
_Una transacción de Coinbase es la primera transacción de un bloque._
:::

Un minero la ubica en ese sitio cuando construye su bloque candidato para que pueda reclamar la recompensa del bloque (subsidio del bloque + tarifas) si tiene éxito en la minería del bloque.

Es un tipo especial de transacción que tiene una sola entrada en blanco. En otras palabras:

> [!Important] 
...los resultados de las transacciones de Coinbase *son la fuente de nuevos bitcoins

![image](https://hackmd.io/_uploads/rk7FO-6wge.png)

## 1️⃣ Requisitos
> ¿Qué tiene de diferente una transacción de Coinbase?

Una transacción de Coinbase tiene la misma estructura básica que una transacción normal, pero tiene ciertis requisitos especiales:

1. Debe ser la primera transacción del bloque.
2. Solo debe contener una entrada 
- El TXID debe ser todo ceros.
- El VOUT debe establecerse en el valor máximo.
- BIP34: El inicio del ScriptSig debe contener la altura del bloque actual en el que está incluido.
- BIP141: Si el bloque contiene transacciones segwit, el campo de testigo debe contener un valor reservado de testigo de 32 bytes.
BIB34 ➡️ [GitHub](https://github.com/bitcoin/bips/blob/master/bip-0034.mediawiki)
BIP141 ➡️ [GitHub](https://github.com/bitcoin/bips/blob/master/bip-0141.mediawiki)

3. Puede contener múltiples salidas (como es habitual).
- El valor total de las salidas no debe ser mayor que la suma de la recompensa del bloque (subsidio del bloque + tarifas de transacción).
- BIP 141: Si el bloque contiene transacciones segwit, una de las salidas debe contener el compromiso wTXID.

Básicamente, una transacción de Coinbase solo tiene una entrada en blanco, para bloquear la recompensa del bloque en una nueva salida.

Con el tiempo, se han sumado más requisitos adicionales a la transacción de Coinbase debido a las mejoras, pero la estructura básica de la transacción continua siendo la misma.

> [!Tip] 
_Los mineros pueden introducir datos modelados a medida en el campo ScriptSig. Dado que no necesitan desbloquear nada, suelen usar este campo para su propia etiqueta de minero (para identificar quién minó el bloque) y/o, un mensaje particular._
>> La recompensa del bloque se puede enviar a múltiples ubicaciones. Por ejemplo, la transacción de Coinbase en el bloque 829.513 dividió la recompensa del bloque entre 17 salidas.

## 2️⃣ Ejemplos
> ¿Cómo se ve una transacción de Coinbase?
A continuación se muestran unos ejemplos de transacciones comunes de Coinbase que encontrará en la cadena de bloques.

### 1. Básico
Altura: 0 a 227.835
> Esta es la transacción de Coinbase para el bloque 150.007:

![image](https://hackmd.io/_uploads/BJo-jbawgx.png)

![image](https://hackmd.io/_uploads/BkAGj-pvee.png)
:::info
_Como puede ver, solo tiene una entrada en blanco. El TXID está configurado a ceros y el VOUT al valor máximo de 0xffffffff. Este es el requisito básico para todas las transacciones de Coinbase._
:::

El minero puede introducir cualquier dato que desee en el ScriptSig (ya que no hay nada que desbloquear). Estos bytes no se decodifican a ningún texto ASCII en particular, por lo que es probable que el minero simplemente usara este campo como ExtraNonce (y no lo usara para almacenar ninguna etiqueta o mensaje de minero).

Solo hay una salida y tiene una cantidad de 5000350000 sats:

> El subsidio del bloque fue de 5000000000 sats (50 BTC).
> Los otros 350.000 sats fueron las tarifas cobradas de las otras 10 transacciones incluidas en el bloque.

A posterior se bloquea esta salida con su propia clave pública usando un script de bloqueo P2PK (que es el script de bloqueo típico utilizado para las transacciones de Coinbase al principio de la cadena de bloques).

### 2. Altura en Coinbase
Altura: 227.836+ (BIP34)
> Esta es la transacción de Coinbase para el bloque 400,021:

![image](https://hackmd.io/_uploads/Skj4nWTDxe.png)

![image](https://hackmd.io/_uploads/HkrBnZpvxl.png)

Nuevamente, esta transacción de Coinbase tiene una entrada en blanco.

Además, debido a BIP34, a partir de la altura del bloque 227,836, los mineros deben indicar la altura del bloque actual al inicio del ScriptSig. Este es el ScriptSig decodificado:

![image](https://hackmd.io/_uploads/H1ZQAbTvee.png)

> Este ScriptSig contiene cuatro envíos de datos independientes:

1. **951a06Esta** es la altura actual del bloque en orden de bytes little-endian. Si la convertimos a big-endian, obtenemos 061a95, y si la convertimos de hexadecimal a decimal, obtenemos 400021.
2. **f15ccf56** Desconocido . Estos bytes no se decodifican a ningún texto ASCII específico, por lo que podría haber sido un ExtraNonce .
3. **013803062b9b5a0100** Desconocido . Estos bytes no se decodifican a ningún texto ASCII específico, por lo que podría haber sido un ExtraNonce.
4. **2f425443432f20** Estos son los bytes codificados en ASCII para la cadena de texto "/BTCC/", que es la etiqueta del minero.

Solo se requería la primera introducción de datos para la altura actual del bloque. Después, el minero podía incluir cualquier dato que quisiera en ScriptSig.

También hay una sola salida con un valor de **2501166059** sats:

El subsidio del bloque fue de **2500000000** sats (25 BTC).
Los otros **1166059** sats fueron las tarifas cobradas de las otras 45 transacciones incluidas en el bloque.
Posteriormente esta saida se bloquea en un script de bloqueo P2PKH.

Entonces, el único cambio real entre esta transacción de Coinbase y una básica es la altura al inicio de ScriptSig.

> [!Note]
El motivo para incluir la altura en la transacción de coinbase es evitar TXID duplicados.

### 2. Segwit
Altura: 481.824+ (BIP141)
> Esta es la transacción de Coinbase para el bloque 538,403 :

![image](https://hackmd.io/_uploads/ByX36bpPgl.png)

![image](https://hackmd.io/_uploads/r110p-Tvxl.png)

Nuevamente, esta transacción de Coinbase contiene una entrada en blanco.
Ete es el ScriptSig decodificado para esta entrada:

![image](https://hackmd.io/_uploads/H1tl0Wpwee.png)

> Este ScriptSig contiene tres envíos de datos independientes:

1. **233708** Contiene la altura del bloque 538403 en orden de bytes little-endian.
2. **4d696e656420627920416e74506f6f6c373946205b8160a4** Contiene la cadena codificada en ASCII "Extraída por AntPool79F [`".
3. **6c0000946e0100** Probablemente esto fue un ExtraNonce.

El testigo de esta entrada contiene el valor reservado de testigo de 32 bytes requerido. Este valor era solo ceros, ya que no se usó para confirmar datos adicionales en el bloque.
:::success
0000000000000000000000000000000000000000000000000000000000000000
:::
Esta transacción de Coinbase contiene entonces dos salidas:

La primera salida se utilizó para reclamar la recompensa en bloque de **1250006517** sats.

1. El subsidio del bloque fue **1250000000** sats (12,5 BTC).
2. Los otros **6517** sats fueron las tarifas cobradas de las otras 3 transacciones incluidas en el bloque.

La segunda salida se utilizó para el compromiso de wTXID requerido. Para calcularlo, primero debe recopilar todos los wTXID de las transacciones incluidas en el bloque:

![image](https://hackmd.io/_uploads/HJXekMTvgg.png)

Por lo tanto, el hash raíz del testigo (raíz merkle para todos los wTXID) para este bloque fue:

:::success
8a8cc0634b8847eb38e7e884970deda26c2dfeefd923c4eba08ca11d110bb6e3
:::

Ejemplo aleatorio:
![image](https://hackmd.io/_uploads/r1Fwkzawgl.png)
> Al calcular el hash de la raíz del testigo, el wTXID para la transacción de coinbase debe establecerse en todos ceros para evitar una referencia circular.

Se concatena + aplica HASH256 al hash raíz del testigo con el valor reservado del testigo, obtendrá el compromiso wTXID :

:::success
faa194df59043645ba0f58aad74bfd5693fa497093174d12a4bb3b0574a878db
:::

Ejemplo aleatorio:
![image](https://hackmd.io/_uploads/Hyv61faPeg.png)

Esto se colocó en ScriptPubKey para la segunda salida:
![image](https://hackmd.io/_uploads/HkvyezTvxx.png)

Si observa con atención, verá que la confirmación wTXID se encuentra al final del envío de datos. Se antepone al encabezado de confirmación **aa21a9ed** para que sepamos que esta ScriptPubKey contiene la confirmación wTXID.

> [!Tip] 
Esta ScriptPubKey también comienza con OP_RETURN, lo que infiere que esta salida no se puede gastar, pero eso está bien ya que no contiene ningún satoshi y solo se usa para el compromiso de wTXID.

Básicamente, todas las transacciones de Coinbase desde la actualización de segwit deben incluir un valor reservado de testigo en el campo de testigo para la entrada, y luego usarlo junto con un hash raíz de testigo para colocar un compromiso wTXID en la ScriptPubKey de una de las salidas de la transacción.

Todo esto es sólo una parte de la confirmación de los datos adicionales de las transacciones segwit en el bloque.

> [!Note] 
Si el bloque no contiene transacciones segwit, la transacción de Coinbase no necesita incluir el valor reservado del testigo ni incluir un compromiso wTXID en una de las salidas. El bloque 526,637 es un ejemplo.

## 3️⃣ Madurez de Coinbase
>¿Cuándo puedes hacer uso de la remompensa de una transacción de Coinbase?

> [!Important] 
Los resultados de una transacción de Coinbase solo se pueden ser usados después de que la transacción confirme 100 bloques de profundidad en la cadena de bloques.

¿Por qué? Porque si un minero intenta usar inmediatamente el resultado de su transacción de Coinbase y se produce en ese momento un reordenamiento de la cadena que implicara que el bloque que incluye esa transacción de Coinbase se eliminara de la blockchain, esa transacción y todas sus descendientes quedarían invalidadas.

![image](https://hackmd.io/_uploads/rkpW-zpwlx.png)

Esto es malo porque todas esas transacciones secundarias dependen de esa única transacción de coinbase.

Si esa transacción de Coinbase se pierde de la blockchain, no hay forma de que vuelva a entrar a la blockchain posteriormente (porque contiene la altura, y cambiarla cambiaría su TXID). Por lo tanto, todas esas transacciones secundarias se invalidarían permanentemente, lo cual es un problema.

> [!Important] 
Al esperar 100 bloques, se tiene el tiempo suficiente de que la transacción de Coinbase está escrita en piedra, y por eso es casi imposible que una transacción de Coinbase se elimine de la cadena de bloques después de que tenga 100 bloques de profundidad (el reordenamiento de la cadena normalmente llevea entre 1 a 2 bloques de profundidad).

![image](https://hackmd.io/_uploads/S1esZMTwex.png)

> [!Note]
La configuración de vencimiento de Coinbase se puede encontrar en consenso [GitHub](https://github.com/bitcoin/bitcoin/blob/master/src/consensus/consensus.h)

> [!Caution]
La transacción de Coinbase podría eliminarse después de 100 bloques debido a un ataque del 51%. No obstante, la regla de madurez de Coinbase de 100 bloques solo existe para dar protección contra problemas causados por reordenamientos de la cadena.

Ejemplo:
La transacción de Coinbase en el bloque 400.000 se uso en la primera oportunidad en el bloque 400.101:

**a8d0c0184dde994a09ec054286f1ce581bebf46446a512166eae7628734ea0a5** – Transacción de Coinbase en el bloque 400.000 .

**db3aa6d43629953a5af092a480259eab383b2f86c13fb559eb49ff92c3a43a6d** – Salida de transacción de Coinbase gastada en el bloque 400,101.

> [!Note] 
Las monedas pueden perderse para siempre si un minero no reclama la recompensa completa del bloque. Ejemplo: el subsidio del bloque 526,591 fue de 12.5 BTC, pero el minero solo se envió 6.25 BTC en la salida de la transacción de Coinbase, por lo que perdió 6.25 BTC. No es motivo que un minero quiera hacer esto.

> [!Caution]
Esto demuestra que las monedas pueden perderse para siempre si un minero no construye su transacción de Coinbase correctamente para cobrar el subsidio completo del bloque y las comisiones de las transacciones incluidas en el bloque.


## 4️⃣Recursos:

1. [Tiempo de enfriamiento de 100 bloques de las transacciones de Coinbase](https://bitcoin.stackexchange.com/questions/40655/coinbase-transactions-100-block-cooldown-period)
2. [¿Qué sucede cuando un minero no reclama todas las tarifas/monedas minadas?](https://bitcoin.stackexchange.com/questions/4573/what-happens-when-a-miner-does-not-claim-all-fees-generated-coins)

