Bloque Candidato
El bloque que un minero intenta agregar a la blockchain
Un bloque candidato es un bloque de transacciones que un minero intenta agregar a la blockchain.
Durante la minería, cada minero recopila transacciones de su memory pool en un bloque candidato. Luego hace hash de ese bloque repetidamente para intentar obtener un hash de bloque por debajo del objetivo.
Si un minero consigue un hash de bloque por debajo del objetivo, su bloque candidato puede añadirse a la blockchain. Entonces transmite ese bloque candidato "minado" a los demás nodos, que lo verifican y lo añaden también a su blockchain.
En otras palabras, un bloque candidato representa el próximo bloque de transacciones que se añadirá a la blockchain.
Construcción
¿Cómo construyes un bloque candidato?
Hay tres pasos básicos para construir un bloque candidato:
1. Seleccionar transacciones
El primer paso es seleccionar transacciones del memory pool que quieres incluir. Un minero normalmente llena su bloque candidato con las transacciones de mayor tarifa para maximizar la recompensa.
2. Construir la transacción coinbase
La transacción coinbase es la primera transacción de un bloque y se usa para reclamar la recompensa.
La razón para construir la coinbase después de seleccionar las transacciones es que necesita contener un hash de raíz de la testigo, calculado con base en las transacciones incluidas en el bloque.
3. Construir el encabezado del bloque
El encabezado del bloque es una pequeña cantidad de metadatos que resume todos los datos del bloque. Es lo que un minero hace hash al intentar minar el bloque candidato. Contiene seis campos (versión, bloque anterior, raíz de Merkle, tiempo, bits, nonce), pero estos dos son los más relevantes:
- Bloque Anterior: Especifica el bloque existente sobre el que se construirá el candidato. Los mineros siempre quieren construir sobre la punta de la blockchain, porque solo pueden reclamar la recompensa si el bloque forma parte de la cadena más larga.
- Raíz de Merkle: Una huella digital de todas las transacciones del bloque. Esto significa que no puedes cambiar el contenido del bloque sin cambiar la huella digital, y por eso construimos el encabezado después de seleccionar las transacciones.
Y listo, la construcción del bloque candidato está completa. A partir de aquí, el minero puede empezar a trabajar en la minería del bloque candidato.
Requisitos
¿Cuáles son los requisitos de un bloque candidato?
- Transacción coinbase. La primera transacción del bloque debe ser la transacción coinbase (que reclama la recompensa).
- Transacciones válidas. Todas las transacciones del bloque deben ser válidas.
- Padres de las transacciones. Si una transacción gasta la salida de otra transacción en el mismo bloque, la transacción "padre" debe aparecer antes en el orden del bloque.
- Límite de tamaño. El bloque no puede exceder 4.000.000 unidades de peso.
- Operaciones de firma. Hay un límite en el número de operaciones de verificación de firma permitidas en un bloque.
Selección de Transacciones
¿Cómo seleccionan los mineros las transacciones del bloque candidato?
Un minero puede llenar su bloque candidato con cualquier transacción que quiera del memory pool.
Sin embargo, normalmente los mineros buscan llenar su bloque candidato con las transacciones de mayor tarifa disponibles, para maximizar lo que pueden reclamar de la recompensa del bloque.
Así que, si hay más transacciones en el memory pool de las que caben en un bloque candidato, el minero prioriza las transacciones de mayor tarifa para incluirlas en su bloque.
Feerate de Ancestros
Hay una regla importante que los mineros deben seguir al seleccionar transacciones:
Solo puedes incluir una transacción en un bloque si también incluyes antes todos sus padres.
Por lo tanto, si una transacción del memory pool tiene ancestros, el minero calcula el feerate de ancestros para averiguar si vale la pena incluirla, en comparación con otra transacción que no tiene ancestros.
Cuando hay ancestros en el memory pool, el proceso de seleccionar la combinación óptima de transacciones es complejo, y la única forma de obtener el bloque "perfecto" en términos de maximizar las tarifas es probar todas las combinaciones posibles. Por eso, la mayoría de los mineros hace un intento de mejor esfuerzo para armar un bloque con transacciones de tarifa alta, sin perder tiempo intentando calcular el bloque "perfecto" cada vez.
Calcular qué transacciones del memory pool incluir en un bloque candidato según los feerates y los ancestros es un desafío de programación divertido.
Bloques Vacíos
¿Por qué los mineros minan bloques vacíos?
A veces encuentras "bloques vacíos" apareciendo en la blockchain, con solo una transacción dentro.
Por ejemplo, el bloque 828.012 no contiene ninguna transacción (aparte de la transacción coinbase obligatoria), mientras que los bloques de arriba y de abajo están llenos de transacciones.
Esto ocurre porque los mineros normalmente empiezan a trabajar en un bloque candidato vacío mientras seleccionan las transacciones del memory pool.
Como se mencionó, le toma un tiempo a un minero calcular la combinación óptima de transacciones para maximizar el monto en tarifas que puede reclamar. Así que, en vez de quedarse sin hacer nada mientras calcula qué transacciones incluir, empieza de inmediato a minar un bloque vacío primero.
En consecuencia, a veces un minero tiene suerte y mina su bloque vacío antes de llegar a trabajar en un bloque candidato lleno de transacciones.
No ocurre muy a menudo, pero eso explica por qué a veces ves "bloques vacíos" en la blockchain.
Aunque el minero pierda la oportunidad de reclamar las tarifas de las transacciones al minar un bloque vacío, le resulta más rentable empezar a minar un bloque vacío por la posibilidad de reclamar el subsidio del bloque mientras tanto.
Comandos
Puedes obtener una plantilla de bloque candidato de tu nodo con bitcoin-cli getblocktemplate. Devuelve las transacciones a incluir, el objetivo actual, la altura y otra información necesaria para montar y minar un bloque candidato.
Notas
- No existe un único bloque candidato en el que trabajen todos los mineros. Cada minero selecciona transacciones de su propio mempool, así que, aunque normalmente hay una gran coincidencia, suele haber pequeñas diferencias entre los bloques candidatos. Por eso, si ves que tu transacción está actualmente en un bloque candidato, no hay garantía de que se incluya en el próximo bloque (aunque es probable que sí).