Objetivo (Target)

El número por debajo del cual debe quedar el hash de un bloque

El objetivo (target) es un número que el hash de un bloque candidato debe quedar igual o por debajo para que el bloque sea agregado a la blockchain. Se usa durante la minería.

El objetivo se ajusta cada 2016 bloques (aproximadamente cada dos semanas) para intentar garantizar que los bloques se minen cada 10 minutos en promedio. Esto crea un tiempo consistente entre bloques y una emisión consistente de nuevos bitcoins (vía la recompensa del bloque).

Para compensar el aumento de la velocidad del hardware y el interés variable en ejecutar nodos a lo largo del tiempo, la dificultad de la prueba de trabajo se determina por una media móvil que apunta a un número promedio de bloques por hora. Si se generan demasiado rápido, la dificultad aumenta.
Satoshi Nakamoto, Whitepaper de Bitcoin

Período

¿Cuándo se ajusta el objetivo?

El objetivo se ajusta cada 2016 bloques, que es aproximadamente cada dos semanas.

Los bloques se minan cada 10 minutos (aproximadamente), y hay 20.160 minutos en dos semanas (2016 × 10).

Historial

Aquí están la altura, el objetivo y el cambio de cada ajuste de dificultad en la historia de Bitcoin (del más reciente al génesis — desplázate para cargar más):

Altura Objetivo Variación de la dificultad Fecha
Cargando…

Ajuste

¿Cómo se calcula el objetivo?

Ajuste de dificultad

Calcule el nuevo objetivo a partir del objetivo actual y del tiempo real de minería de un período de 2016 bloques.

0x
0 bytes
Tiempo (segundos)
0d
0d

El período de ajuste de dificultad es de 2016 bloques. En promedio, un bloque se mina cada 600 segundos (10 minutos), así que el tiempo esperado es 2016 × 600 = 1.209.600 segundos.

Razón

El tiempo real dividido por el tiempo esperado. Multiplicamos el objetivo actual por esa razón para obtener el nuevo objetivo.

0x
0x
0 bytes

del encabezado del bloque, y es ese objetivo el que realmente se usa en la minería.>Nota: este valor objetivo se trunca levemente para almacenarse en el campo

El objetivo del primer bloque (génesis) se definió como:

00000000ffff0000000000000000000000000000000000000000000000000000

Ese valor inicial está fijo en el código fuente de cada nodo Bitcoin (chainparams.cpp). También es el valor máximo posible del objetivo. Probablemente fue una estimación de Satoshi sobre un buen punto de partida para un objetivo lo suficientemente difícil como para resultar en un intervalo de 10 minutos.

Cada 2016º bloque, cada nodo observa el tiempo entre los 2015 bloques anteriores y calcula si fueron minados más rápido o más lento que 10 minutos en promedio.

Si los bloques de ese período se minaron más rápido que 10 minutos, el objetivo se ajusta hacia abajo, haciendo más difícil quedar por debajo de él en el siguiente período. Inversamente, si se minaron más lentamente, el objetivo se ajusta hacia arriba, haciendo menos difícil.

Como resultado, cada nodo recalcula regularmente el objetivo para mantener un intervalo promedio de 10 minutos a medida que los mineros entran y salen de la red.

Sincronización

¿Cómo calculan los nodos el mismo objetivo?

Cada nodo opera de forma independiente, así que no existe una autoridad central para determinar el objetivo actual. Sin embargo, como los nodos siempre adoptan la cadena más larga de bloques, calculan el mismo objetivo. Aunque lo calculan de manera independiente, todos llegan al mismo valor porque comparten la misma visión de la blockchain.

Propósito

¿Por qué Bitcoin usa un objetivo?

El objetivo regula la velocidad con la que se agregan nuevos bloques a la blockchain. Eso tiene dos beneficios:

1. Da tiempo para que los bloques se propaguen por la red.

Es preferible que los mineros trabajen para extender la misma cadena el mayor tiempo posible. Para lograrlo, necesitamos dar tiempo a que los nuevos bloques se propaguen antes de que se mine el siguiente. Si los bloques se minaran más rápido de lo que pueden transmitirse, los mineros trabajarían con frecuencia sobre bloques "viejos", desperdiciando energía en cadenas competidoras que serían descartadas en reorganizaciones.

2. Una emisión consistente de nuevos bitcoins.

Bitcoin es una moneda, así que tener una tasa fija de nuevos bitcoins introducidos en el sistema ayuda a proporcionar estabilidad.

Ubicación

¿Dónde encuentras el objetivo?

El objetivo se almacena en el campo bits del encabezado de cada bloque. El campo bits es una representación compacta del objetivo (para ahorrar espacio). Puedes convertir fácilmente entre la representación bits y el objetivo completo:

Bits del objetivo

Convierta entre un objetivo (target) y su representación compacta bits.

0x
0 bytes 0 bytes

Comandos

bitcoin-cli getblocktemplate

La forma más simple de obtener el objetivo actual. Al solicitar una plantilla de bloque (para minería), también devuelve el objetivo actual.

$ bitcoin-cli getblocktemplate '{"rules": ["segwit"]}' | grep target
"target": "00000000000000000002068f0000000000000000000000000000000000000000",

bitcoin-cli getdifficulty

Alternativamente, puedes pedir la dificultad actual y convertirla al objetivo:

$ bitcoin-cli getdifficulty
138955357012247.30
Ícono de herramienta Dificultad

Dificultad

y la dificultad.>Convierta entre un

0x
0x
0 bytes
0d

Convertir de dificultad a objetivo no siempre es preciso. La dificultad es un número de coma flotante calculado a partir del cambio entre el objetivo inicial y el actual, así que puede perder precisión.

bitcoin-cli getblockheader [hash del bloque]

Este comando te permite encontrar un objetivo anterior de un bloque específico. El objetivo en el momento de la minería se almacena en cada encabezado de bloque en formato bits, que puedes convertir al objetivo completo.

Código

Error de "off-by-one". Los ajustes de dificultad en realidad se calculan usando el tiempo a lo largo de 2015 bloques (por ejemplo, 403199 − 401184 = 2015), y no 2016 como cabría esperar. Esto fue un error de implementación en el código, y todavía existe hoy.

Preguntas Frecuentes

¿Por qué 10 minutos entre bloques?

Creo que nadie, excepto Satoshi, sabe exactamente por qué se eligieron 10 minutos. Mi suposición es que parecía suficientemente largo para permitir que los bloques se propagaran por la red (minimizando reorganizaciones) y suficientemente corto para no hacer esperar demasiado por las nuevas transacciones. Y 10 es un número redondo agradable.

¿Qué hace que los bloques se minen más rápido o más lento que 10 minutos?

Primero, la minería es impredecible: nunca sabes cuándo un minero encontrará el siguiente bloque. Segundo (y más importante), los mineros pueden entrar y salir de la red en cualquier momento, lo que afecta la velocidad. Cuantos más mineros entren, más hashing ocurre, y más probable es que un nuevo bloque se mine en menos de 10 minutos.

Recursos

Gracias a David Harding por señalar que se puede obtener el objetivo directamente de bitcoind usando bitcoin-cli getblocktemplate.