Desde la logística a la salud, desde las redes sociales a los bienes raíces, desde el sector energético a la economía global, se prevé que Blockchain transformará a casi todas las industrias en los próximos diez años. A menudo descrita como una tecnología más revolucionaria que la Inteligencia Artificial, está entrando en nuestras vidas a un ritmo alucinante.
Aunque es inspiradora en general, este ritmo extremo también tiene un lado negativo: significa que la educación simplemente no puede mantenerse al día. La ausencia de programas de capacitación de calidad en torno a blockchain implica que muchas personas perderán oportunidades en este nuevo y emocionante campo, o incluso peor, tomarán decisiones prematuras basadas en una comprensión errónea de lo que es posible y lo que no.
Hay muchos conceptos que permiten que existan ideas y proyectos impulsados por Blockchain. Se necesitaría un curso completo para cubrir todos estos temas. Es por eso que hoy vamos a poner el foco en un solo concepto. Para este artículo, he elegido tal vez el tema más utilizado y, al mismo tiempo, más incomprendido: la minería.
Las recompensas por minería se componen de emisión de nuevas monedas más las comisiones por transacciones incluidas en el bloque y varían de acuerdo al sistema monetario de la red en que se trabaje. Por ejemplo, Bitcoin inició con una recompensa de 50 BTC nuevos por bloque cada 10 minutos, aproximadamente. Actualmente la recompensa de esa red se encuentra en 12,5 BTC y se reducirá a la mitad en los años venideros. Lo mismo sucede en Ethereum, donde la red recompensaba a los mineros con 5 ETH inicialmente y actualmente lo hace con 3 ETH.
En la actividad minera se utilizan chips de procesadores de computadora (CPU), tarjetas de video (GPU), chips programables (FPGA) y, en algunas blockchains, chips especializados ASIC (del inglés, Circuitos Integrados de Aplicación Específica). El chip a utilizar depende tanto del algoritmo de la criptomoneda como del poder de procesamiento actual de toda la red blockchain, que se traduce en la dificultad de minería, una variable que determina la complejidad del acertijo hash a resolver. Blockchains como Bitcoin, Litecoin o Dash se minan con equipos ASIC, en otras como Ethereum o Zcash se usan computadoras con varias tarjetas de video y algunas como Monero o Bytecoin se minan con CPU.
Configuración de tarjetas de video (GPU) para minería de criptomonedas
Granja de mineros de Scrypt en Islandia
Todos hemos oído hablar de minería y mineros de Bitcoin. Probablemente incluso hemos usado estos términos. Pero, ¿qué hacen exactamente estos mineros? ¿De qué se trata la minería? Esa es la pregunta que responderemos hoy y lo haremos en tres partes:
Parte 1: ¿Qué es un hash criptográfico?
Parte 2: El rompecabezas criptográfico.
Parte 3: Configuración de bloques
Nota: vamos a ver el ejemplo de Bitcoin. Otras criptomonedas como Ethereum pueden usar ideas diferentes (por ejemplo, un tipo diferente de función hash) y, por lo tanto, las características específicas variarán, sin embargo, los conceptos subyacentes siguen siendo los mismos.
Parte 1: ¿Qué es un hash criptográfico?
Es posible que ya hayas escuchado que una cadena de bloques es una serie de bloques sucesivos enlazados criptográficamente:
Pero, ¿qué significa esto y cómo se relaciona esto con la minería? Vamos a echar un vistazo más de cerca.
Un bloque individual en una cadena de bloques contiene los siguientes elementos: número de bloque, datos almacenados en el bloque, hash del bloque anterior y hash del bloque actual.
Un hash (o hash criptográfico) es un número largo que actúa como una huella digital de cualquier colección de datos. En Bitcoin se usa la función de hashing SHA256 que genera un número hexadecimal de 64 dígitos.
Por ejemplo, el hash criptográfico de las palabras en este párrafo es:
C019286295F2CDEC9958BEE25B9603B5F94C76B2CCC69A59CE54872ED26DC479
Los algoritmos de hash tienen muchas propiedades interesantes, sin embargo, nosquedaremos con tres:
1) La función SHA256 es determinista: siempre obtendrá la misma salida de hash si recalcula la función con la misma entrada
2) La función SHA256 es imposible aplicarle ingeniería inversa. Lo que significa que nunca podrá saber de antemano qué valor de hash obtendrá hasta que realmente lo calcule
3) Si alimentas la función SHA256 con dos entradas que varían ligeramente (por ejemplo, si cambia un punto por una coma), obtendrás salidas totalmente diferentes.
De nuestro ejemplo anterior, ingresaríamos el número del bloque actual, los datos almacenados en el bloque y el hash del bloque anterior en la función SHA256 para obtener el valor del hash del bloque actual:
SHA256(Block Number, Data, Previous Block’s Hash) -> Hash
Ahora podemos ver cómo están vinculados los bloques, no solo hace referencia cada bloque al hash criptográfico del bloque anterior, sino que, de hecho, el hash afecta directamente el valor del hash del bloque actual. Por lo tanto, si alguien manipulara los datos de cualquier bloque dado, tal acción haría que no solo el hash de ese bloque específico sea inválido, sino también todos los hashes de los siguientes bloques inválidos.
Dicha conexión entre bloques significa que la cadena de bloques en su conjunto está mucho más a prueba de manipulaciones que las estructuras de bases de datos estándar y otros métodos de mantenimiento de registros. Y dado que un Blockchain es en esencia un registro de registros, esta propiedad a prueba de manipulaciones se conoce como la propiedad del “Libro mayor inmutable“.
Ok genial. Así es como funcionan las cadenas de bloques. ¿Pero qué tiene esto que ver con la minería? La respuesta directa es que la minería consiste en calcular el valor de hash para el bloque más nuevo que se agrega a la cadena. Sin embargo, no es tan simple.
La cosa es que la función SHA256 solo toma una fracción de segundo para calcular. Y, sin embargo, es posible que haya oído hablar de los numerosos grupos mineros como BTC.com y AntPool, e incluso de minas a escala industrial, todos compitiendo para generar el próximo bloque de Bitcoin. Entonces la pregunta es: ¿por qué necesitamos toda esa potencia de cálculo?
Parte 2: El rompecabezas criptográfico
Aquí es donde se comienza a agregar capas de complejidad. ¡A ponerse el cinturón! Los bloques tienen otro campo del que aún no hemos hablado.
Este campo se llama “The Nonce“, que significa número usado solo una vez:
El Nonce es un número entero y, junto con el Número de bloque, los Datos y el hash anterior, sirve como entrada para que la función SHA256 calcule el hash del bloque actual:
SHA256 (Número de bloque, Nonce, Datos, Hash del bloque anterior) -> Hash
A diferencia de otros componentes de un bloque, el Nonce está diseñado para estar totalmente bajo nuestro control. Esto significa que ahora tenemos un mecanismo para variar el hash del bloque actual mientras mantenemos intactos los datos en su interior. De hecho, gracias a la naturaleza de la función hash (propiedad # 3 en nuestra discusión anterior), cada vez que seleccionamos un nuevo Nonce para el mismo bloque, el hash resultante tendrá un valor diferente.
Bien, eso es genial. Pero, ¿qué tiene esto que ver con la minería? Aquí es donde llegamos a lo divertido.
Hay un total de 16⁶⁴ valores de hash criptográficos SHA256 posibles (cada dígito hexadecimal tiene 16 valores posibles y hay 64 de ellos en un hash). Sin embargo, no todos ellos son hashes válidos. ¿Porqué es eso? Bueno, cada dos semanas la red de Bitcoin definirá un objetivo mínimo para el hash. Cualquier cosa por encima de este objetivo será rechazada, cualquier cosa por debajo – aceptada.
El diagrama de arriba ilustra el conjunto (que no debe confundirse con el “conjunto de minería”) de todos los hashes SHA256 posibles, comenzando en la parte inferior con el menor y aumentando hacia el mayor en la parte superior. En algún lugar a lo largo de la vertical tenemos el objetivo. Tenga en cuenta que este diagrama es solo para fines ilustrativos ya que no es proporcional; veremos por qué en un momento.
En el momento de escribir esto el objetivo es:
0000000000000000005d97dc000000000000000000000000000000000000
Lo que es realmente importante en el objetivo es el número de ceros iniciales. Al igual que en el sistema decimal, los ceros iniciales en un número de tamaño fijo determinarán su magnitud. Cada cero inicial reduce la magnitud del número en un factor de 16 (diez en el sistema decimal, pero aquí estamos trabajando con hexadecimales).
Hay 18 ceros iniciales en el objetivo actual, lo que significa que el número total de hash válidos es 16⁴⁶ (solo quedan 64-18 = 46 dígitos distintos de cero). Por lo tanto, la probabilidad de que un hash seleccionado aleatoriamente sea válido puede calcularse como:
16⁴⁶ / 16⁶⁴ = 16 ^ (- 18) = 0.00000000000000000002%
En términos de minería de Bitcoin, esta es la probabilidad de que cualquier valor de Nonce dado genere un hash válido para el bloque actual. Ahora podemos ver por qué el diagrama está fuera de proporción: el conjunto de hashes válidos en realidad es extremadamente pequeño en comparación con el conjunto SHA256 completo.
Y de eso se trata el rompecabezas criptográfico: los mineros compiten para encontrar un Nonce (también llamado Golden Nonce) que generará un hash válido para el próximo bloque. Quien lo encuentre primero puede agregar el bloque a la cadena y obtener su recompensa de 12.5 Bitcoins. Al momento de escribir un Bitcoin, vale alrededor de $ 10,000 USD, lo que hace que la minería sea una actividad que vale la pena.
Cómo leer este diagrama: las marcas ‘X’ rojas se relacionan con los hash SHA256, mientras que las etiquetas junto a ellas ilustran qué Nonce generó qué valor de hash.
El objetivo se define en función del hashrate de la red (potencia computacional agregada de todos los mineros de Bitcoin). Cuantos más mineros se unan a la red, menor será el objetivo y, por lo tanto, más difícil será encontrar un hash adecuado. El objetivo de este algoritmo de dificultad es asegurar que solo se agregue un nuevo bloque cada 10 minutos. Esto es parte de la política monetaria de Bitcoin para controlar el número total de monedas en circulación.
En pocas palabras, eso es lo que millones y millones de máquinas mineras están haciendo día y noche: simplemente están iterando diferentes valores de Nonce con la esperanza de ser los primeros en encontrar un hash válido para el siguiente bloque. Una vez que se encuentra un hash válido, el bloque se agrega a la cadena y la carrera comienza de nuevo, esta vez para el siguiente bloque.
Parte 3: Configuración de bloques
Justo cuando pensabas que habíamos terminado … Hay más.
El Nonce es un valor entero con 32 bits de memoria asignados. Lo que significa que tiene un rango limitado de alrededor de 4 mil millones de valores. Esto plantea dos problemas:
En primer lugar, incluso un dispositivo de minería promedio puede calcular hasta 100 millones de hashes por segundo y, por lo tanto, recorrerá el rango de Nonce en 40 segundos. Y eso es un minero promedio. Las piscinas mineras y las minas a escala industrial pueden atravesar el rango de Nonce en fracciones de segundo.
En segundo lugar, la probabilidad de encontrar un hash válido es tan pequeña que, incluso con 4 mil millones de intentos, la probabilidad de éxito sigue siendo extremadamente baja:
4 * 10⁹ * 0.0000000002% = 0.0000000001%
Entonces, ¿cuál es la solución?
Para empezar, el bloque contiene … lo has adivinado, otro campo del que aún no hemos hablado. Este campo es una marca de tiempo que representa la hora actual de Unix (número de segundos transcurridos desde el 1 de enero de 1970):
La marca de tiempo también se incluye en el cálculo SHA256 para el hash del bloque actual que se está extrayendo:
SHA256 (Número de bloque, Marca de tiempo, Nonce, Datos, Hash del bloque anterior) -> Hash
Y como la marca de tiempo se actualiza constantemente (hasta que el bloque se extrae con éxito), esto restablece efectivamente el rango de Nonce cada segundo. ¿Por qué? Bueno, como comentamos al principio, incluso si las entradas de la función SHA256 varían ligeramente, esto hace que el hash cambie.
Por lo tanto, si probamos los 4 mil millones de valores de Nonce para una combinación fija de otras entradas (número de bloque, marca de tiempo, datos, hash del bloque anterior) pero no tenemos suerte en encontrar un hash válido, todo lo que tenemos que hacer es esperar hasta que aumente la marca de tiempo . Un cambio en la marca de tiempo significará que la combinación ahora es diferente y si volvemos a probar los 4 mil millones de valores de Nonce, cada vez que obtengamos un valor hash completamente nuevo.
La marca de tiempo resuelve el problema para el minero promedio, ya que se reiniciará antes de que lleguen al final del rango de Nonce (recordatorio: el minero promedio tarda 40 segundos en hacer 4 mil millones de pases). Sin embargo, para un grupo minero o minero a escala industrial, incluso un segundo es demasiado largo; como hemos discutido, obtendrían el rango de Nonce en fracciones de segundo. Entonces, ¿cómo resuelven el problema? Aquí es donde entra en juego la configuración de transacción.
Los participantes de la red Bitcoin realizan transacciones entre sí todo el tiempo. Sin embargo, un nuevo bloque solo se agrega una vez cada diez minutos. Entonces, ¿a dónde van las transacciones antes de que se agreguen a un bloque? Las nuevas entradas se agregan a un área de preparación llamada mempool. Entonces el trabajo de los mineros es recoger un lote de estas transacciones de mempool y agregarlas al nuevo bloque que están extrayendo.
El tamaño del bloque es limitado y no todas las transacciones de mempool encajarán en el nuevo bloque. Esto significa que los mineros pueden elegir qué transacciones irán al siguiente bloque. Lo que esto también significa es que los mineros pueden cambiar la configuración de las transacciones a voluntad (antes de que el bloque se haya explotado con éxito).
Y así es como los mineros obtienen control adicional sobre el hash. Bueno … Control no es la palabra correcta ya que el hash no se puede revertir ni predecir. Variabilidad es un término mejor aquí: cambiar la configuración de las transacciones crea una variabilidad adicional en las entradas de la función hash.
De manera similar a la situación de la marca de tiempo, cada vez que probamos los 4 mil millones de valores posibles en el rango de Nonce y no tenemos suerte, todo lo que tenemos que hacer es alterar ligeramente la combinación de transacciones que hemos seleccionado de mempool.
La principal diferencia aquí es que no tenemos que esperar. Al alterar las transacciones seleccionadas, podemos restablecer nuestro rango de Nonce a voluntad, por lo tanto, podemos hacerlo tantas veces por segundo como queramos. Por supuesto, todo esto se hace algorítmicamente. De esta manera, incluso los grupos mineros y los mineros a escala industrial pueden probar nuevos valores de hash continuamente sin ningún tiempo de inactividad.
Participación de mercado de grupos de minería de Bitcoin. Imagen tomada de Blockchain.info el 11/01/18.
Resumamos
Hemos cubierto mucho terreno. Recapitulemos el proceso de minería de Bitcoin / Blockchain para asegurarnos de que no nos hemos perdido nada:
1. Un hash es una huella digital de cualquier colección de datos. Los bloques en una cadena de bloques están vinculados criptográficamente porque cada uno incluye el hash del bloque anterior en el cálculo de su propio hash. La manipulación de los datos en cualquier bloque hará que su y todos los hashes siguientes no sean válidos.
2. El rompecabezas criptográfico requiere que los mineros encuentren un hash más pequeño que el objetivo establecido para que sea válido. Los mineros buscan un hash válido mediante la iteración a través de un parámetro designado dentro del bloque llamado Nonce. Quien sea primero en encontrar un hash válido puede agregar el bloque y recoger la recompensa.
3. El rango de Nonce contiene 4 mil millones de valores posibles que son insuficientes para encontrar un hash válido con un alto grado de certeza. El restablecimiento del rango de Nonce se logra al incluir la marca de tiempo actual y al variar la configuración de las transacciones incluidas en el bloque.
Fuente: medium.com
BLOCKCHAIN ¿EN QUÉ CONSISTE LA MINERÍA?