¿Qué es la dificultad y el target en Bitcoin? (y de paso hablaremos de nonce y PoW).

El termino de dificultad dentro de Bitcoin es una representación que pretende facilitar el entendimiento al usuario común de un concepto denominado target (objetivo), el cual es un concepto un tanto más elaborado que solo el de establecer un tiempo de minado entre bloques, como a veces se suele decir y voy a intentar explicarlo sin entrar en el detalle técnico.

 

Partiré explicando que el target es un número muy grande (de 256 bits) que todos los clientes de Bitcoin comparten. Como comenté, no voy a entrar en el detalle técnico y por ende no voy a detallar como se calcula pero si deseas indagar más te dejo este link.

 

Para que un bloque sea aceptado por la red el resultado de la función SHA-256 sobre la cabecera de un bloque debe dar como resultado el ser igual o menor que el target con el que la red esta trabajando al momento de validar el bloque.

 
(Cabecera de un bloque)

Haremos un pequeño paréntesis para revisar el concepto de PoW.

El proceso de encontrar el hash valido de un bloque es como una lotería, los mineros están tratando de descubrir ese hash en base a prueba y error a través de la Proof of Work.

 

La PoW consiste en para la obtención de ese hash previamente mencionado el cual es obtenido a través de un proceso que consiste en ir aplicando una función hash sha256 a la cabecera del bloque a resolver, la magia ocurre porque dentro de la cabecera del bloque hay un campo denominado nonce, el cual como decía es parte de la cabecera del bloque a resolver y es el único campo de toda la cabecera cuyo valor puede ser modificado.

Si no existiera esta posibilidad de ir modificando ese campo, el valor de la funciona hash 256 sobre la cabecera del bloque, siempre sería el mismo valor!!!

 

Así que los mineros van ajustando este valor nonce hasta obtener el valor hash de la cabecera de un bloque que este por debajo del TARGET de la red, es decir van cambiando ese valor y aplicándole la función sha256, el resultado lo comparan con el target y así sucesivamente hasta que obtienen un valor que esta por debajo del valor del target, esto lo tiene que hacer contra reloj ya que el target esta ajustado de tal forma que pueda resolverse en un intervalo de hasta 10 minutos y además compite contra otros mineros.

 

Una vez que encuentra un valor por debajo del target, el minero que lo ha encontrado puede enviarlo los demás nodos de la red, los otros nodos lo revisaran y si es un valor valido (esta por debajo del target) entonces toda la red lo agregará a sus blockchains. Llegado a este punto el minero es el ganador de la “lotería” y podrá tomar la recompensa del bloque la cual esta en el campo llamado coinbase y además cobrará todas las comisiones de las transacciones incluidas en ese bloque.

Pasado nuestro pequeño paréntesis y continuando con el tema del target, diré que por temas de estabilidad en la red y de latencia (para efectos de la red de Bitcoin, diremos que latencia es el intervalo de tiempo que la red tarda en propagar los bloques entre los nodos) es necesario establecer un intervalo para que cada bloque sea generado, es decir es necesario asegurar un tiempo que permita asegurar la transferencia de bloques en la red de manera segura y en un tiempo que garantice que no hay perdidas de información o generación de demasiados bloques.

 

Por ello se ha establecido, como parte de las reglas de consenso de Bitcoin, que cada 2016 bloques, las marcas de tiempo que los bloques almacenan son comparados para determinar cuánto tiempo llevó encontrar esos 2016 bloques, el resultado es un número que mide los segundos transcurridos entre la generación del primer bloque y del último de esos 2016 bloques que se están comparando. El valor ideal esperado es 1.209.600 segundos transcurridos (que son el equivalente a dos semanas). Es decir queremos que los 2016 bloques demoren 2 semanas en ser generados (y eso nos daría que cada 10 minutos un bloque debería ser generado).

 

Entonces para poder ir ajustando el target, se estableció el concepto de la dificultad. La Dificultad representa, cuan difícil es que un minero resuelva el encontrar un bloque trabajando con el target actual, y me explicó:

  • La dificultad en Bitcoin comenzó con un valor de 1 (y nunca podrá ser menor que 1).
  • Al momento de escribir este artículo la dificultad es de 16,553×10¹², lo cual significa que en promedio tomaría ~16.5 millones de veces más tiempo el poder encontrar un bloque válido que si la dificultad fuera de 1 como cuando se minó el primer bloque.

 

Hablando de como se ajusta la dificultad para obtener el target deseado, diríamos que el tiempo aproximado que se produce en obtener 2016 bloques, se revisaría y si se encuentra que tomó menos de las 2 semanas, entonces el valor de dificultad se aumentaría proporcionalmente de forma que los siguientes 2016 bloques se demoren exactamente dos semanas.

 

Por el contrario, si se revisa que esa medición tomó más de dos semanas para generar los 2016 bloques, el valor de dificultad se reduce proporcionalmente para poder ajustar y llegar al número de 2016 bloques en 2 semanas (recordar que en realidad la medición es de 1.209.600 segundos, pero para efectos prácticos hablamos de semanas).

 

La formula para el cálculo de la dificultad es: difficulty = difficulty_1_target / current_target

Nota curiosa: Debido a un bug en la implementación de Bitcoin Core, en realidad el cálculo se hace usando las marcas de tiempo de solo 2015 bloques, en lugar de los 2016 bloques, pero se la comunidad ha determinado que el riesgo que este bug del código supone un riesgo ínfimo comparado con el riesgo del hard-fork que requiere la implementación de la corrección.

 

En resumen podemos decir que lo importante es el target, el cual define la cadencia en que los bloques deben ser minados y para mantener esa cadencia, se realiza el proceso de cálculo de tiempo entre bloques, el concepto que engloba una explicación más sencilla de como esto se consigue es el de la dificultad.

 

Después de ver estos conceptos y esta explicación, me viene a la mente una de las preguntas que veo de forma más recurrente y que es, ¿qué pasaría si en los próximos años la dificultad aumentará tanto que la minería dejará de ser rentable que pasaría?.

 

Pues con esta explicación creo que se puede responder ya que el target es el que estable el poder de computo que un minero debe usar para poder resolver y encontrar un bloque en un periodo de 10 minutos aproximadamente. Si un porcentaje X de los mineros desapareciera (porque ya no les es rentable), el target se ajustaría y la dificultad disminuiría para que sea rentable nuevamente.

Ahora voy a hablar brevemente sobre el Coinbase.

 

¿Sabías qué?, un bloque de Bitcoin, a pesar de que se diga que puede ir vacío en realidad siempre tendrá por lo menos una transacción y esa transacción es la Transacción de Coinbase, esta transacción siempre es la primera de todo bloque y es usada para que el minero pueda reclamar la recompensa en bitcoins que obtiene al minar un bloque y si ese bloque tuviera más transacciones las incluiría dentro de esta transacción en una campo denominado también coinbase.
Un par de datos curiosos:

  • De nada le sirve a un minero tratar de minar bloques sin transacciones, ya que el tiempo que le lleva obtener el hash que esta por debajo del target de la red, es el mismo que le llevará hacerlo con un bloque que tuviera o no transacciones, por lo que su incentivo se incrementa si trata de incluir transacciones, ya que podrá además de la recompensa, cobrar las comisiones.
  • El otro dato es que el minero solo podrá gastar los bitcoins que ha obtenido de la Coinbase una vez que haya 100 confirmaciones sobre el bloque minado, a este concepto se le denomina Coinbase_Maturity

 

Bueno, espero que el contenido te haya aclarado y como digo en todos mis artículos, si ves algún error o tienes algún comentario o duda, por favor no dudes en dejarme tus comentarios, yo aprendo de lo que me van comentando a demás de lo que voy investigando.

 

Te agradezco mucho el tiempo que te has tomado en leerme.

¿Te resultó útil este contenido? Déjanos un comentario por favor.
5/5


Puedes dejarme una propina vía Lightning network

 

o vía Paynyms de Samourai Wallet:

PM8TJR2yPtx5JS8e8CuwXBZMay67mg1RKrtVptBRZQD5qCyZc1rosVCbScFmzgYYrQtVmc6cJZ2hCK2nBra3KAXxXCKPU4K4vRPjnBqGCYKYRUwimKnA +crimsontruth10e

Deja un comentario

A %d blogueros les gusta esto: