¿Sabías que minar un bitcoin no es siempre y en todo momento igualmente complicado? Un móvil (de los más asequibles) podía minar bitcoins rapidamente en dos mil nueve, mas actualmente se precisan de enorme naves industriales llenas de miles y miles de aparatos expertos en esta labor, produciendo millones de millones de operaciones por segundo para minar exactamente la misma cantidad de bitcoins. Descubre a qué se debe esto conociendo uno de los aspectos más esenciales de la minería, la “dificultad”.

Bitcoin tiene una dificultad / complejidad de minería activa. ¿Qué es lo que desea decir esto precisamente? En esencia quiere decir que la complejidad de minería de un bloque en Bitcoin, no es siempre y en toda circunstancia igual. En ocasiones sube, en ocasiones baja (si bien al largo plazo en la actualidad tiende en alza).

En el próximo capítulo de Bit2Me Academy te adentrarás en uno de los aspectos más esenciales de criptomonedas como Bitcoin. Entrar en las tripas no siempre y en toda circunstancia es simple mas, como siempre y en toda circunstancia, te vamos a explicar de manera sencilla este término.

El término “dificultad” se emplea como una unidad de medida en el proceso de minería en criptomonedas, haciendo referencia a cómo de difícil es hallar el hash del bloque.

Como ya hemos explicado en el artículo dedicado a de qué forma se minan las criptomonedas, el hash debe cumplir con las peculiaridades buscadas en esa  blockchain. Cada bloque en la red se produce a un ritmo determinado por el protocolo de la blockchain. Y este ritmo debe continuar, en la medida, de manera constante.

Aquí viene una de las preguntas más importantes: ¿Por qué razón la dificultad de minado es variable?

Pues bien, tomemos como un ejemplo a Bitcoin. En Bitcoin se ha estipulado en su código que debe minarse un bloque cada diez minutos de media. Para minar un bloque debe encontrarse el nonce que en la operación de minado de con un hash que cumpla con el patrón buscado. Una persona que tenga mucha potencia de cálculo (por poner un ejemplo miles y miles de ASIC, o bien descubriendo un nuevo mecanismo para hacer la operación más de forma rápida) va a poder localizar el nonce rapidísimo, rompiendo la media de los diez minutos que se busca. Ahí es donde Bitcoin agregó uno de sus componentes más importantes: el reajuste de la complejidad de minería.

Sin este reajuste, ese minero minaría todos y cada uno de los bloques en escaso tiempo, rompiendo la curva de emisión de bitcoins preestablecida en el modelo económico que subyace al protocolo de Bitcoin. O sea, en escaso tiempo todos y cada uno de los bitcoins estarían minados. Para eludir esto el reajuste de minado entra en acción, haciendo subir la dificultad del problema buscado, y estabilizando nuevamente el tiempo de cada bloque a diez minutos (de media).

¿Cada cuanto tiempo se readapta la complejidad de la minería en Bitcoin?

El ajuste de la complejidad de minería depende de la programación y los protocolos de funcionamiento de cada blockchain y criptomonedas. Como ya hemos explicado, la complejidad de minería en Bitcoin debe permitir a los mineros solucionar y producir un nuevo bloque más o menos cada diez minutos. Y cuando esta condición no se cumple, el grado de complejidad se ajusta.

Este reajuste ocurre de forma automática cada dos.016 bloques (más o menos cada un par de semanas). Esto es, en todos y cada uno de ellos de los nodos de la red bitcoin ya hay un pedazo de código en su código fuente que ha sido listo para esto. Por consiguiente, toda vez que se alcancen los dos.016 bloques minados, todos y cada uno de los nodos recalcularán dando como resultado un nuevo nivel complejidad para la prueba de trabajo (PoW).

¿De qué manera se determina la complejidad de minería en Bitcoin?

Primero que nada, es esencial indicar que la complejidad de minado es plenamente independiente del número de transacciones o bien del valor de las transacciones. Sin embargo sí que se relaciona con el poder de hash de la red, y por consiguiente, con el propósito y el tiempo de minado.

La fórmula para el cálculo de la complejidad es la siguiente:

dificultad = dificultad_1_target / current_target

Donde la meta (objetivo) es un número de doscientos cincuenta y seis bits. dificultad_1_target puede ser diferente para múltiples formas de medir la complejidad. De forma tradicional, representa un hash donde los treinta y dos bits iniciales son cero y el resto es uno (esto se conoce como “dificultad de grupo” o bien “pdiff“). El protocolo Bitcoin representa objetivos como un género de punto flotante adaptado con precisión limitada. Como resultado, los clientes del servicio de Bitcoin con frecuencia se acercan a la complejidad en función de esto, que se conoce como “bdiff“.

A su vez, la red Bitcoin comprueba el tiempo real que se tardó en minar los últimos dos.016 bloques de la cadena y lo equipara con veinte y ciento sesenta minutos. Este valor se debe a que como cada bloque hubo de ser minado en un tiempo de diez minutos, el tiempo estimado para minar los dos.016 bloques es de veinte y ciento sesenta minutos. Entonces, a través de estos datos, se calcula la relación entre el intervalo de tiempo real y el intervalo de tiempo estimado. Efectuando los ajustes pertinentes a la complejidad conforme los resultados conseguidos, sea que se requiera acrecentarla o bien reducirla.

¿Exactamente en qué se traduce la complejidad?

La complejidad en la blockchain juega un papel fundamental. Primeramente, regula la fabricación y activación de la criptomoneda a un ritmo incesante y predeterminado. Seguidamente, deja sostener el tiempo de producción de bloques de la criptomoneda de forma uniforme eludiendo inconvenientes de seguridad y eludiendo posibles fraudes. De esa forma, cuando el valor de una criptomoneda se acrecienta, los mineros son atraídos a unirse a la red, con lo que aumenta el poder de hash de exactamente la misma y la complejidad se ajusta y también acrecienta. Por ende, el ritmo de emisión de monedas continúa incesante.

Adicional a esto, al haber un tiempo grande entre cada bloque, los mineros aportan una mayor seguridad a la red, pudiendo contrastar que todos y cada uno de los bloques cumplen con los requisitos.

Por lo tanto, está función es esencial puesto que garantiza que los bloques sean generados a la velocidad predeterminada por el protocolo y la seguridad de la red, continuando resistente aun conforme más mineros se incorporen a la red y también acrecienten el poder de hash de exactamente la misma.

¿De qué forma se representa visualmente la complejidad de la minería en Bitcoin?

Aunque parezca extraño, la complejidad de la minería se puede representar visualmente. Además de esto, en dependencia de la blockchain puede verse de diferente forma. Sin embargo, tomemos a Bitcoin para enseñar de qué forma se representa. Primeramente veamos la imagen que dejamos ahora (o bien abra el link), 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 complejidad para llegar a ese objetivo.

Ahora bien, si tomamos el valor bits (1715dbd2) y lo convertimos en un número hexadecimal completo conseguimos lo siguiente:

bits = 0x00000000000000000015dbd20000000000000000000000000000000000000000

Ahora convirtamos 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, ¿De qué forma comprobamos que el hash del bloque respete eso?. Sencillísimo, tomemos el hash del bloque y convirtamos exactamente el mismo de hexadecimal a decimal.

Block hash = 000000000000000000144758ca662636f4aa4089caaa776ea18cf53cbc8f5781

Al convertir este resultado a base decimal nos da el próximo número:

Block hash = 1942313447480713367840564387969267204147459722176321409

Como puedes ver, el número del hash del bloque es menor al objetivo que bits nos afirma. Esto quiere decir que el bloque es válido para la complejidad programada por el protocolo de Bitcoin en ese instante concreto.

Como dato curioso podemos mentar que el valor del hash y el propósito son expresados en números hexadecimales. Esto es, en un conjunto de números y letras, mas que al final es un número. Al tiempo que la complejidad se expresa en números enteros, con los que estamos más familiarizados.

¿Qué es una complejidad alta?

La complejidad máxima de la red Bitcoin se puede expresar como: maximum_target/1. Y se emplea el número 1 puesto que cuando Bitcoin fue lanzado al mercado la complejidad de la red estaba en ese nivel. Este valor no puede ser 0, puesto que daría un resultado infinito. De esta forma, el cálculo de maximum_target/1 va a dar como resultado un número enormemente grande, más o menos 2^224.

La complejidad ¿es solo para el protocolo de acuerdo PoW?

La complejidad de minería en una criptomoneda se puede aplicar a diferentes protocolos de consenso como PoW, PoS, DPoS, o bien PoA. Mas, son las blockchain que emplean el sistema de Prueba de Trabajo (PoW), las que utilizan este dato como un punto esencial para su seguridad y funcionamiento. En una red blockchain PoW, se le pide a los mineros efectuar una prueba criptográfica cuya complejidad se acrecienta conforme el poder de la red aumenta.

Esto hace que hallar la solución adecuada requiere que se efectúen millones de operaciones de hashes por segundo por medio de toda la red. El algoritmo de la prueba de trabajo implica hacer hash en el encabezado de los bloques y producir un número azaroso. Para esto en general se emplea el algoritmo criptográfico SHA-256, hasta localizar una solución que  encaje con un determinado patrón.

Todo este proceso hace que se creen equipos de computación más potentes, como los FPGA, CPU, GPU o bien ASIC para producir suficientes soluciones y poder contrastar transacciones. De este modo, la complejidad de la red se ajusta para asegurar que la velocidad de generación de bloques.

Todo este proceso no se repite en otros protocolos por el hecho de que su funcionamiento es diferente y centran su capacidad de brindar seguridad en otros mecanismos menos demandantes en recursos energéticos y computacionales.

¿La complejidad de la minería es variable y se amolda a la competencia en Bitcoin?

Si, la complejidad de la minería en Bitcoin es variable y se amolda a la competencia que participa en internet. Esta complejidad de minería es proporcionada por un algoritmo. Este algoritmo se asegura que la complejidad tenga el valor ideal, a fin de que los mineros puedan generar un nuevo bloque más o menos cada diez minutos.

Si observamos esto en un escenario extremo, donde el coste de Bitcoin cae a valores exageradamente bajos, la minería no sería nada rentable. Con lo que muchos mineros abandonarían la red. Mas como la complejidad es graduable conforme al poder de hash que tenga la red en un determinado instante, esta reduciría y se ajustaría de manera automática. Abriendo de esta forma las puertas a mineros más pequeños, quienes podrían, cuando menos por un tiempo, regresar a extraer bitcoins como al inicio: desde un computador de mesa o bien portátil.

¿Cuánto sabes, criptonauta?

¿La complejidad puede ser sencillamente manipulada por los mineros?

¿Por qué razón en ocasiones aumenta la complejidad de la minería y otras reduce?

La complejidad de minería marcha como un factor activo que se ajusta continuamente conforme las condiciones de la red. Recordemos que el propósito de minado es descubrir y producir un nuevo bloque conforme la programación de la red. Entonces, la complejidad es ajustada por exactamente el mismo sistema. Todo ello teniendo el cuenta el poder de hash que tiene la red en un instante determinado.

Pongamos el próximo ejemplo, si la red Bitcoin está produciendo nuevos bloques en un tiempo menor a los diez minutos establecidos, exactamente la misma red ajustará la complejidad a un grado mayor. Esto es, como los bloques se producen más veloz de lo deseado, la complejidad de minado va a aumentar. Al contrario, si la red está produciendo nuevos bloques en un tiempo mayor a los diez minutos, la complejidad de minado se reducirá, puesto que los bloques de estarían produciendo de forma más lenta.

Otro aspecto muy influyente en el grado de complejidad de la red Bitcoin es el costo de la electricidad y el valor de Bitcoin en el mercado. Esto con relación a la moneda fiduciaria que se emplea para cubrir los gastos de operación en internet. De esta manera, el coste de un kilovatio por hora en bitcoins es un aspecto fundamental en la complejidad.

Pero cuando el coste de un bitcoin es alto, la minería se vuelve rentable; por contra, si el coste de Bitcoin es bajo, ciertos mineros abandonarán la red pues sus ganancias no cubren sus gastos operativos. Por tanto, cuando la minería es rentable, mayor va a ser el número de mineros conectados a la red y por consiguiente, mayor potencia de hash y mayor grado de complejidad. En cambio, cuando la minería no es rentable, la potencia de hash reduce y con esto, la complejidad.

¿De qué forma saber la complejidad actual de una blockchain?

Esto es otro punto que está relacionado con la parte técnica y los protocolos de la blockchain. Por poner un ejemplo, para conocer la complejidad actual de la red Bitcoin, puedes visitar un explorador de bloques, por poner un ejemplo Bit2Me Explorer, que te enseña la complejidad 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 usuario Bitcoin, se puede conocer la complejidad ingresando el comando OP_GETDIFFICULTY en el usuario de Bitcoin Core.