¿Sabías que minar un bitcoin no es siempre igual de complicado? ¿Sabes lo que es la dificultad de minería? Por ejemplo: un teléfono móvil (de los más baratos) podía minar bitcoin rápidamente en 2009, pero hoy en día se requieren de enorme naves industriales repletas de miles de aparatos especializados en esta tarea, generando millones de millones de operaciones por segundo para minar la misma cantidad de bitcoin.
Bitcoin tiene una complejidad / dificultad de minería dinámica. ¿Qué quiere decir esto exactamente? En esencia significa que la dificultad de minería de un bloque en Bitcoin, no es siempre igual. A veces sube, a veces baja (aunque al largo plazo actualmente tiende al alza).
En este artículo de Bit2Me Academy te adentrarás en uno de los aspectos más importantes de criptomonedas como Bitcoin. Adentrarse en estos aspectos técnicos no siempre es fácil pero, como siempre, te explicaremos de forma sencilla este concepto.
El término «dificultad» se emplea como una unidad de medida en el proceso de minería en criptomonedas, haciendo referencia a cuán difícil es encontrar el hash del bloque.
Como ya hemos explicado en el artículo dedicado a cómo se minan las criptomonedas, el hash debe cumplir con las características buscadas en esa blockchain. Cada bloque dentro de la red se genera a un ritmo determinado por el protocolo de la blockchain. Y este ritmo debe permanecer, en la medida de lo posible, de forma constante.
Descarga gratis la guía básica sobre Minería
Recibe en tu correo el PDF con la información básica.
¿Cuánto se tarda en minar un bitcoin?
En Bitcoin se ha estipulado en su código que debe minarse un bloque cada 10 minutos de media. Para minar un bloque ha de encontrarse el nonce que dentro de la operación de minado dé con un hash que cumpla con el patrón buscado. Una persona que tenga mucha potencia de cálculo (por ejemplo miles de ASIC, o aplique un nuevo mecanismo para hacer la operación más rápidamente) podrá encontrar el nonce muy rápido, y rompería la media de 10 minutos fijado por el protocolo. Ahí es donde Bitcoin añadió uno de sus componentes más importantes: el reajuste de la dificultad de minería.
Sin este reajuste, ese minero minaría todos los bloques en poco tiempo, rompiendo la curva de emisión de bitcoin preestablecida en el modelo económico que subyace al protocolo de Bitcoin. Es decir, en poco tiempo todos los bitcoin estarían minados.
Para evitar esto el reajuste de minado entra en acción, y aumenta la complejidad del problema matemático buscado. De esta forma, se estabiliza de nuevo el tiempo de cada bloque a 10 minutos (de media).
¿Cada cuánto tiempo se reajusta la dificultad de la minería en Bitcoin?
El ajuste de la dificultad de minería depende de la programación y los protocolos de funcionamiento de cada blockchain y criptomonedas. Como ya hemos explicado, la dificultad de minería en Bitcoin debe permitir a los mineros resolver y generar un nuevo bloque aproximadamente cada 10 minutos. Y cuando esta condición no se cumple, el grado de dificultad se ajusta.
Este reajuste ocurre de forma automática cada 2.016 bloques (aproximadamente cada dos semanas). Es decir, en cada uno de los nodos de la red bitcoin ya existe un trozo de código en su código fuente que ha sido preparado para esto. Por lo tanto, cada vez que se alcancen los 2.016 bloques minados, todos los nodos recalcularán dando como resultado un nuevo nivel dificultad para la prueba de trabajo (PoW).
¿Cómo se determina la dificultad de minería en Bitcoin?
Primero que nada, es importante señalar que la dificultad de minado es totalmente independiente del número de transacciones o del valor de las transacciones. No obstante sí que se correlaciona con el poder de hash de la red, y por ende, con el objetivo y el tiempo de minado.
La fórmula para el cálculo de la dificultad es la siguiente:
dificultad = dificultad_1_target / current_target
Donde el objetivo (target) es un número de 256 bits. dificultad_1_target puede ser diferente para varias formas de medir la dificultad. Tradicionalmente, representa un hash donde los 32 bits iniciales son cero y el resto es uno (esto se conoce como «dificultad de grupo» o «pdiff«). El protocolo Bitcoin representa objetivos como un tipo de punto flotante personalizado con precisión limitada. Como resultado, los clientes de Bitcoin a menudo se aproximan a la dificultad en función de esto, que se conoce como «bdiff«.
A su vez, la red Bitcoin verifica el tiempo real que se tardó en minar los últimos 2.016 bloques de la cadena y lo compara con 20.160 minutos. Este valor se debe a que como cada bloque debió ser minado en un tiempo de 10 minutos, el tiempo estimado para minar los 2.016 bloques es de 20.160 minutos. Entonces, por medio de estos datos, se calcula la relación entre el intervalo de tiempo real y el intervalo de tiempo estimado. Realizando los ajustes correspondientes a la dificultad según los resultados obtenidos, sea que se requiera aumentarla o disminuirla.
¿En qué se traduce la dificultad?
La dificultad en la blockchain juega un papel muy importante. En primer lugar, regula la fabricación y activación de la criptomoneda a un ritmo constante y predeterminado. En segundo lugar, permite mantener el tiempo de producción de bloques de la criptomoneda de forma uniforme evitando problemas de seguridad y evitando posibles fraudes. De esa forma, cuando el valor de una criptomoneda se incrementa, los mineros son atraídos a unirse a la red, con lo que aumenta el poder de hash de la misma y la dificultad se ajusta e incrementa. Por tanto, el ritmo de emisión de monedas permanece constante.
Adicional a esto, al haber un tiempo grande entre cada bloque, los mineros aportan una mayor seguridad a la red, pudiendo verificar que todos los bloques cumplen con los requisitos.
Por lo tanto, está función es importante ya que garantiza que los bloques sean generados a la velocidad predeterminada por el protocolo y la seguridad de la red, permaneciendo resistente incluso a medida que más mineros se incorporen a la red e incrementen el poder de hash de la misma.
¿Cómo se representa visualmente la dificultad de la minería en Bitcoin?
Aunque parezca extraño, la dificultad de la minería se puede representar visualmente. Además, dependiendo de la blockchain puede verse de diferente forma. No obstante, tomemos a Bitcoin para mostrar cómo se representa. En primer lugar veamos la imagen que dejamos a continuación (o abra el enlace), en donde se muestran los datos del bloque #607557.
Fíjese en los datos bits y dificultad. El primero de ellos, es una representación acortada en hexadecimal del número máximo que puede alcanzarse en el hash del bloque. El segundo valor, es una representación decimal de la dificultad para llegar a ese objetivo.
Ahora bien, si tomamos el valor bits (1715dbd2) y lo transformamos en un número hexadecimal completo obtenemos lo siguiente:
bits = 0x00000000000000000015dbd20000000000000000000000000000000000000000
Ahora transformemos este valor en decimal:
bits = 2093644940525638357414324633411056914147713045789409280
Como puedes ver bits, representa un número decimal muy grande y este es el número objetivo máximo que debe alcanzarse para el hash del bloque. Ahora bien, ¿Cómo verificamos que el hash del bloque respete eso?. Muy sencillo, tomemos el hash del bloque y transformemos el mismo de hexadecimal a decimal.
Block hash = 000000000000000000144758ca662636f4aa4089caaa776ea18cf53cbc8f5781
Al transformar este resultado a base decimal nos da el siguiente número:
Block hash = 1942313447480713367840564387969267204147459722176321409
Como puedes ver, el número del hash del bloque es menor al target que bits nos dice. Esto significa que el bloque es válido para la dificultad programada por el protocolo de Bitcoin en ese momento específico.
Como dato curioso podemos mencionar que el valor del hash y el objetivo son expresados en números hexadecimales. Es decir, en un conjunto de números y letras, pero que al final es un número. Mientras que la dificultad se expresa en números enteros, con los que estamos más familiarizados.
¿Qué es una dificultad alta?
La dificultad máxima de la red Bitcoin se puede expresar como: maximum_target/1. Y se emplea el número 1 ya que cuando Bitcoin fue lanzado al mercado la dificultad de la red estaba en ese nivel. Este valor no puede ser 0, ya que daría un resultado infinito. Así, el cálculo de maximum_target/1 dará como resultado un número enormemente grande, aproximadamente 2^224.
La dificultad ¿es solo para el protocolo de consenso PoW?
La dificultad de minería en una criptomoneda es aplicable a distintos protocolos de consenso como PoW, PoS, DPoS, o PoA. Pero, son las blockchain que utilizan el sistema de Prueba de Trabajo (PoW), las que usan este dato como un punto importante para su seguridad y funcionamiento. En una red blockchain PoW, se le solicita a los mineros realizar una prueba criptográfica cuya dificultad se incrementa a medida que el poder de la red aumenta.
Esto hace que encontrar la solución correcta requiere que se realicen millones de operaciones de hashes por segundo a través de toda la red. El algoritmo de la prueba de trabajo implica hacer hash en el encabezado de los bloques y generar un número aleatorio. Para ello generalmente se usa el algoritmo criptográfico SHA-256, hasta encontrar una solución que encaje con un determinado patrón.
Todo este proceso provoca que se creen equipos de computación más potentes, como los FPGA, CPU, GPU o ASIC para generar suficientes soluciones y poder verificar transacciones. Así, la dificultad de la red se ajusta para garantizar que la velocidad de generación de bloques.
Todo este proceso no se repite en otros protocolos porque su funcionamiento es distinto y centran su capacidad de brindar seguridad en otros mecanismos menos demandantes en recursos energéticos y computacionales.
¿La dificultad de la minería es variable y se adapta a la competencia en Bitcoin?
Si, la dificultad de la minería en Bitcoin es variable y se adapta a la competencia que participa en la red. Esta dificultad de minería es proporcionada por un algoritmo. Este algoritmo se asegura que la dificultad tenga el valor ideal, para que los mineros puedan producir un nuevo bloque aproximadamente cada 10 minutos.
Si observamos esto en un escenario extremo, donde el precio de Bitcoin cae a valores extremadamente bajos, la minería no sería nada rentable. Por lo que muchos mineros abandonarían la red. Pero como la dificultad es ajustable de acuerdo al poder de hash que posea la red en un determinado momento, ésta disminuiría y se ajustaría automáticamente. Abriendo así las puertas a mineros más pequeños, quienes podrían, al menos por un tiempo, volver a extraer bitcoin como al inicio: desde un ordenador de mesa o portátil.
¿Por qué a veces aumenta la dificultad de la minería y otras disminuye?
La dificultad de minería funciona como un parámetro dinámico que se ajusta constantemente según las condiciones de la red. Recordemos que el objetivo de minado es descubrir y generar un nuevo bloque según la programación de la red. Entonces, la dificultad es ajustada por el mismo sistema. Todo ello teniendo el cuenta el poder de hash que posee la red en un momento determinado.
Pongamos el siguiente ejemplo, si la red Bitcoin está generando nuevos bloques en un tiempo menor a los 10 minutos establecidos, la misma red ajustará la dificultad a un grado mayor. Es decir, como los bloques se generan más rápido de lo deseado, la dificultad de minado aumentará. Por el contrario, si la red está generando nuevos bloques en un tiempo mayor a los 10 minutos, la dificultad de minado se reducirá, ya que los bloques de estarían generando de forma más lenta.
Otro aspecto muy influyente en el grado de dificultad de la red Bitcoin es el costo de la electricidad y el valor de Bitcoin en el mercado. Esto en relación a la moneda fiduciaria que se emplea para cubrir los gastos de operación en la red. Así, el precio de un kilovatio por hora en bitcoin es un aspecto muy importante en la dificultad.
Pero cuando el precio de un bitcoin es alto, la minería se vuelve rentable; por el contrario, si el precio de Bitcoin es bajo, algunos mineros abandonarán la red porque sus ganancias no cubren sus gastos operativos. Por lo tanto, cuando la minería es rentable, mayor será el número de mineros conectados a la red y por ende, mayor potencia de hash y mayor grado de dificultad. En cambio, cuando la minería no es rentable, la potencia de hash disminuye y con ello, la dificultad.
¿Cómo conocer la dificultad actual de una blockchain?
Esto es otro punto que está relacionado con la parte técnica y los protocolos de la blockchain. Por ejemplo, para conocer la dificultad actual de la red Bitcoin, puedes visitar un explorador de bloques, por ejemplo Bit2Me Explorer, que te muestra la dificultad de Bitcoin y de su red de pruebas Bitcoin Testnet, con solo explorar el último bloque generado, puedes ver los últimos bloques aquí, y ver los detalles del bloque que desees.
Igualmente, si se cuenta con un cliente Bitcoin, se puede conocer la dificultad ingresando el comando OP_GETDIFFICULTY en el cliente de Bitcoin Core.