Introducción

Una de las variables vitales en el proceso de minería y la seguridad de Bitcoin es la dificultad de minería. Este es un valor que va cambiando a lo largo del tiempo ajustándose al crecimiento y potencia de la red. Por lo que esencialmente, este valor prácticamente se repite.

Pero, ¿Cuál es su importancia? ¿Qué papel juega en la minería y la seguridad de Bitcoin? ¿Qué papel juega en otras criptomonedas? Pues bien veremos esto y mucho más a continuación.

La dificultad de minería, una variable de vital importancia para Bitcoin

Cuando hablamos de "dificultad de minería", estamos hablando en realidad de un número de la red Bitcoin. Un número que se usa para coordinar el nivel de la complejidad de la tarea que los mineros deberán cumplir para poder generar o minar un bloque para la red. 

Este número se emplea en realidad como una unidad de medida en este proceso de minería en criptomonedas. Uno que hace mención clara y precisa a lo complejo que será encontrar el hash de bloque o Block ID de un bloque válido en Bitcoin.

Dichos hashes de bloque, son en realidad hashes SHA-256 que son calculados usando la Prueba de Trabajo (Proof of Work). Este es un algoritmo único creado por Satoshi Nakamoto, con el cual se busca garantizar varios aspectos:

  1. Asegurar un medio para la emisión de moneda de forma descentralizada. Es decir, nadie ni nada tiene control sobre la emisión de monedas y esta solo depende una programación que todos aceptan utilizar.
  2. Brindar la mayor seguridad posible a las operaciones y transacciones dentro de la red. Esto debido a que cada transacción para ser aceptada debe ser incluida en un bloque, y construirlos requiere de un enorme trabajo de computo.
  3. Crear un medio que garantice que la realización de operaciones sin sentido (spam), el doble gasto, los ataques de denegación de servicio, entre otros actos maliciosos sean costosos, difíciles de escalar y de llevar a cabo.
  4. Blindar las transacciones y el historial de las mismas en la llamada cadena de bloque. Esto gracias a que PoW hace muy difícil realizar alteraciones sobre los bloques ya confirmados. De hecho, mientras más confirmaciones recibe un bloque dentro de un algoritmo PoW, más difícil es alterarlo.

Suena increíble, pero en todos y cada uno de estos aspectos están relacionados directa o indirectamente con la dificultad de minería.  ¿Pero cómo es esto posible? ¿Cuáles son estos mecanismos de relación? Eso lo comprenderemos mejor si examinamos el cómo funciona la dificultad de minería en Bitcoin.

¿Cómo funciona la dificultad de minería en Bitcoin?

Antes de explicar cómo funciona la dificultad de minería en Bitcoin, debes primero ser consciente de algunos hechos muy básicos. En primer lugar, los objetivos fundamentales de la minería son:

  1. Generar un nuevo bloque donde incluir las transacciones que se originan en la red por parte de los usuarios de Bitcoin. Este proceso es el que nos permite enviar y recibir monedas de forma segura en Bitcoin.
  2. Habilitar la generación de nuevas monedas por medio de la recompensa de bloque.
  3. Crear un mecanismo que asegure que el historial de la blockchain o cadena de bloque no pueda ser fácilmente modificado.

Para lograr esto, la minería de bloques debe generar un hash de bloque o Block ID. Este debe identificar de forma única e irrepetible cada nuevo bloque a incluir en la blockchain. Pero, además, dicho hash debe cumplir con unos determinados criterios que son los que le habilitarían para ser un bloque válido. No basta con ser único e irrepetible, hay mucho más.

Y, además, esta generación de bloque por medio de la minería podemos verla como un proceso cronometrado. Es decir, es un proceso regular y con un ritmo determinado por los complejos algoritmos que forman el protocolo Bitcoin. 

De hecho, en Bitcoin la toma del tiempo es vital y se toma con gran nivel de detalle gracias a los timestamps o marcas de tiempo. Es decir, la minería de bloques en Bitcoin depende de variables como el nonce, el timestamp o marca de tiempo, el target u objetivo de la red y por supuesto la dificultad de minería.

Relacionado: ¿Qué es el nonce? Un número vital en Bitcoin

Papel de la dificultad de minería dentro del proceso de minería

En este punto, el objetivo de la dificultad de minería en la minería es sencillo: controlar los valores de nonce y el target que están habilitados para la red y los mineros que forman parte de ella. Es decir, del valor de la dificultad de minería dependen los valores del nonce y el objetivo o target del hash de bloque que debe ser minado. Esta estrecha relación está marcada en Bitcoin por este proceso:

  1. En primer lugar, el protocolo de minería de Bitcoin estipula que cada 10 minutos en promedio debe generarse un nuevo bloque. Esto es importante porque si la producción de bloques es muy rápida, la emisión de nuevas monedas comenzará a crecer y con ello Bitcoin tenderá a la inflación, un suceso que puede llevar a problemas tanto a nivel de red (rompiendo el equilibrio de la Prueba de Trabajo) o económicos (con una mayor inflación y oferta de bitcoins, el precio del mismo tenderá a caer, o si hay muy poca emisión, el precio se dispara y es inviable).
     
  2. Cuando el proceso de minería empieza, la red genera un valor de dificultad de minería. Para generar este valor la red debe primero conocer la altura o la cantidad de bloques que ya existen. En segundo lugar, debe establecerse cada cuantos bloques o tiempo se deberá ajustar y revisar dicho valor. Esto tiene un fin muy claro: ajustar el valor de la dificultad de la minería a la realidad de la red en un determinado momento. Por ejemplo, en Bitcoin la dificultad de minería se ajusta cada 2016 bloques, lo que es un promedio de cada 2 semanas.
     
  3. La red tomará el valor de la dificultad de minería y lo ajustará si es necesario. Así aumentará la dificultad de minería si el tiempo promedio de producción de bloques ha bajado de los 10 minutos. Esto tiene como objetivo, volver a regular la dificultad de la minería a un punto donde la emisión de bloques sea constante cada 10 minutos o aproximado. Por el contrario, disminuirá el valor si dicho tiempo de producción de bloques se vuelve muy largo. Para lograr esto, el algoritmo de dificultad de minería tomarás las marcas de los últimos 2016 bloques y resolverá una media, este es el valor que le dirá cuál será el curso de acción a tomar.
     
  4. Cuando la red ha verificado que el valor de la dificultad de minería es válido, tomará dicho valor para generar un target para los mineros. El trabajo de los mineros es reunir las transacciones de la red, incluirlas en un bloque, realizar un árbol merkle de dichas transacciones, tomar los valores timestamp, dificultad de minería, target, el hash del bloque anterior, generar un nonce, calcular un hash SHA-256 que es el hash de bloque que está minando y revisar si este es válido. Si el hash generado por el minero no es válido, reinicia el ciclo de generación con otro nonce.

Ejemplo de la dificultad de minería

Lo anterior es a grandes rasgos el proceso algorítmico que se da dentro de Bitcoin. Pero ¿Cómo podemos ver de forma sencilla el concepto de dificultad de minería? La respuesta está en la lotería. Imaginemos por un momento lo siguiente:

Estamos participando en una lotería en donde hay 100 mil millones de participantes. La gran cesta de bolitas numeradas tiene la misma cantidad de bolitas con un hash anotado en cada una de ellas. Los boletos de lotería tienen estos hash y la única forma de ganar es tener un boleto con un número inmediatamente menor al objetivo de búsqueda de la lotería.

Si la suerte no está de nuestro lado, tendremos que sacar muchas de estas bolitas numeradas para poder ganar. Es decir, mientras menor sea el target, mayor será la dificultad y más tiempo tendremos que pasar sacando bolitas numeradas hasta dar con la ganadora. 

Como ven un proceso bastante sencillo de entender, y que soluciona de forma muy elegante varios problemas para la generación de un sistema económico descentralizado y seguro. Ahora bien, seguramente estarás preguntando: ¿Cómo se calcula la dificultad de minería? Pues bien, eso lo veremos a continuación

Relacionado: Minería en Bitcoin

¿Cómo se calcula?

Lo anterior seguramente nos ha maravillado y nos ha llevado a preguntarnos ¿Cómo se calcula la dificultad de minería? Pues bien, este valor puede obtenerse con la siguiente formulación:

dificultad = dificultad_1_target / current_target

En este caso, los datos significan los siguientes:

  1. current_target hace mención a número de 256 bits que viene a ser el target actual de la red.
  2. dificultad_1_target, es un valor que viene dado por un un hash donde los 32 bits iniciales son cero y el resto es uno.

Curiosidades de la dificultad de minería

¿Por qué la dificultad de minería cambia?

En Bitcoin, su protocolo de minería estipula muy claramente que la minería de cada bloque debe hacerse cada 10 minutos. Esto nos dice que los mineros deben presentarse ante un acertijo que les lleve 10 minutos en resolver. Sin embargo, la potencia de cálculo de las computadoras evoluciona.

De hecho, la minería de bitcoins evolucionó más allá de la minería en computadoras para pasar a las GPU (tarjetas gráficas), llegando a los FPGA y ahora a los ASIC. Estos últimos son hardware muy potente que pueden hacer cálculos de minería muy rápida y eficientemente. Este aumento de poder en manos de los mineros, significa que ahora pueden resolver los acertijos de forma más rápida.

Así que para evitar esto, el valor de la dificultad de minería se ajusta cada cierto tiempo con el fin de mantener el equilibrio de la minería y que cada bloque sea producido cada 10 minutos.

¿Cuál es la dificultad actual?

La dificultad de la minería actual se puede obtener de varios sitios, pero en este enlace podrás verla de forma muy rápida y sencilla. Recuerda es solo un número, pero su valor para Bitcoin es vital.

¿Cuál es la máxima y mínima dificultad posible?

La dificultad máxima es prácticamente infinita. Esto gracias debido a que no hay un objetivo o target mínimo. Así este valor se da por la ecuación:

dificultad = dificultad_1_target / current_target

Donde current_target = 1. Sin embargo, la dificultad máxima real es cuando current_target = 0, pero esto jamás ocurrirá.

Por otro lado, la dificultad mínima, es cuando el objetivo o target está en el valor máximo permitido, es 1. Esto es así porque en Bitcoin, un target bajo aumenta la dificultad de generar Bitcoin, mientras que un target al máximo hacer que la dificultad sea la más baja posible.

¿Dónde podemos ver este valor?

Existen varias formas en la que podemos revisar el valor de la dificultad de minería. Pero la más fácil de todas es en los exploradores de bloques. Así por ejemplo, podemos ver esta información en este explorador de bloques

https://lh3.googleusercontent.com/HZbz9SWYcDK5NLuNPrYncZb3_PfWyQmqADGP2YsNgV8o72IB1fFy-JnvRT-Th8gGmMC3UvEi3s26xhNclAEElQWNw7MtDn7ZVhIrOeqE3Gou1Yc1huR6Ny2UL7QZBXlovPsv4v-r

Esto es posible porque el valor de la dificultad de minería activa para la red en ese momento, es almacenada en cada bloque. Así desde cualquier explorador podemos revisar y constatar que la dificultad es la misma. 

Pero si deseas ver más información y de varías criptomonedas, puedes revisar esta web

¿Dificultad de minería en otras criptomonedas?

Ahora bien, todo lo anterior aplica al mundo del Bitcoin, pero ¿Qué hay del resto de criptomonedas? Pues bien, existen otras criptomonedas que usan la Prueba de Trabajo, y en todas ellas existe la dificultad de minería. Por supuesto, este valor y la forma en cómo se calcula puede variar en otras criptomonedas. Pero su existencia y finalidad es la misma: controlar la dificultad de la minería y la emisión de monedas.

Así por ejemplo tenemos a Litecoin. Esta criptomonedas usa el algoritmo de Prueba de Trabajo. Pero a diferencia de Bitcoin, los bloques se generan cada 2,5 minutos. Más sorprendente aún es que la dificultad de minería de Litecoin se ajusta de forma dinámica entre bloques. Esto permite que la minería de bloques en Litecoin se ajuste rápidamente a los cambios de potencia que pueda tener la red, pero al mismo tiempo garantiza su seguridad y estabilidad.

Lo mismo pasa por ejemplo con Ethereum, Monero, Zcash, Bitcoin Cash y las muchas otras criptomonedas que usan el algoritmo de Prueba de Trabajo. Todas ellas hacen uso de la dificultad de minería. Esto como un medio para controlar el cómo este proceso se lleva a cabo de principio a fin.