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.

Bloque candidato en vivo — la visualización en tiempo real del bloque candidato actual (con transacciones del mempool) estará disponible en la Fase 3 (sobre API pública).

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.

Encabezado de Bloque

Decodifique y codifique un encabezado de bloque.

0 bytes
Encabezado de Bloque (Campos)

Versión

Versión: 0
0d
0d

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?

  1. Transacción coinbase. La primera transacción del bloque debe ser la transacción coinbase (que reclama la recompensa).
  2. Transacciones válidas. Todas las transacciones del bloque deben ser válidas.
  3. 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.
  4. Límite de tamaño. El bloque no puede exceder 4.000.000 unidades de peso.
  5. 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

Recursos