¿Qué es el algoritmo de minería Ethash?
El algoritmo de minería Ethash, es el algoritmo que hace posible el funcionamiento de la minería en Ethereum. Un algoritmo de elevada calidad y que usa algunas técnicas informáticas muy elaboradas para garantizar la mayor seguridad posible.
Ethash es también conocido como Ethash-Dagger-Hashimoto, aunque ciertamente el algoritmo actual ha cambiado tanto, que bien podría dársele otro nombre. Pero ¿Qué significa todo esto? ¿Qué es Dagger-Hashimoto y cómo se relaciona con Ethash? ¿Cómo funciona Ethash? ¿Cuál es su futuro?
Pues bien, todas estas preguntas serán respondidas a continuación en este nuevo artículo de Bit2Me Academy.
¿Qué es Dagger-Hashimoto? El origen de Ethash
Para entender cómo funciona Ethash, primero hay que conocer qué es Dagger-Hashimoto. Es por ello que, explicaremos en primer lugar este punto para avanzar y entender este llamativo algoritmo.
Cuando hablamos de Dagger-Hashimoto, hacemos referencia a un algoritmo de minería que sirvió de base para la creación de Ethash. Este algoritmo buscaba crear un algoritmo seguro construido sobre dos pilares:
- Ser resistente a la minería ASIC.
- Altamente eficiente y que sea fácilmente verificable por clientes ligeros.
Estos dos pilares son fundamentales en el funcionamiento de Dagger-Hashimoto. Las mentes detrás del diseño de este algoritmo son Vitalik Buterin y Thaddeus Dryja, quienes idearon el mismo entre los años 2013 y 2014. Como ves, su nombre viene porque el algoritmo es en realidad la unión de dos algoritmos distintos.
En primer lugar, tenemos a Dagger, un algoritmo desarrollado por Vitalik Buterin que utiliza grafos acíclicos dirigidos (DAG) para construir una estructura masiva de datos. Inicialmente esta estructura ocupaba un poco más de 1 Gb de almacenamiento, pero en la actualidad ronda los 4-5 GB. Sobre esta estructura se ejecutan una serie de cálculos de memoria que agregan un alto nivel de trabajo. Esta estructura es la que permite el proceso de minería que realiza el algoritmo Hashimoto.
Hashimoto por su parte, es un un algoritmo desarrollado por Thaddeus Dryja, y tiene como objetivo agregar la resistencia ASIC, y realizar la minería de los hash. Esto lo logra haciendo que el mismo tenga un alto consumo de memoria RAM y esto sea un limitante a los ASIC. Básicamente lo que hace Hashimoto, es tomar el DAG generado, agregar la información de la red sobre la dificultad, las transacciones y generar un hash que identifique al bloque que está siendo minado.
Al unir ambos algoritmos obtenemos un único algoritmo que nos permite diseñar un sistema de minería lo suficientemente complejo para que los mineros ASIC tengan problemas para implementarlo con eficiencia. La estructura es tan avanzada y segura, que se buscaba implementar como una alternativa a Scrypt.
Sin embargo, Dragger-Hashimoto tenía algunos fallos que hicieron que su desarrollo y evolución terminará dando origen a Ethash.
¿Cómo funciona el algoritmo Ethash?
Partiendo de lo aprendido en Dagger-Hashimoto, el equipo de desarrollo de Ethereum presentó luego su algoritmo Ethash. El funcionamiento básico de este algoritmo es completamente distinto al original Dagger-Hashimoto, pero los principios fundamentales se mantienen. Así tenemos que Ethash funciona de la siguiente manera:
- Se crea una semilla calculada usando las cabeceras de los bloques hasta el punto en que inicia la minería.
- Esta semilla luego es usada para calcular y generar un caché pseudoaleatorio de 16 MB.
- Seguidamente se usa este caché, para generar un conjunto de datos de más de 4 GB (el DAG). Este conjunto de datos es semipermanente y se actualiza cada 30 mil bloques. De esta manera, el DAG varía para cada “época de minería”.
- Generado el DAG se inicia la minería. Este proceso toma valores aleatorios del DAG y los combina usando los datos suministrado por la red y las transacciones a verificar.
- Finalmente la verificación se realiza con un proceso que regenera partes específicas del conjunto de datos usando la memoria caché, acelerando este proceso.
Este funcionamiento es el que se ejecuta en la actualidad, y corresponde al versión número 23 del algoritmo. Durante todo el proceso se usan las funciones Keccak-256 y Keccak-512, un algoritmo del cual se derivó el estándar SHA-3.
Ahora bien seguramente te preguntarás ¿Por qué tantas revisiones y cambios? Y la respuesta a ello es que dichas actualizaciones responden a resoluciones de problemas, vulnerabilidades, optimizaciones y como no, modificaciones para hacer el trabajo más complejo para los ASIC y más amigable para las GPU, que es donde la comunidad Ethereum suele hacer su mayor vida minera.
Características de algoritmo Ethash
Todo lo anterior garantiza que Ethash tenga unas características de trabajo únicas, entre las que podemos mencionar:
- Es altamente dependiente de operaciones en memoria RAM, consumiendo grandes cantidades de ancho de banda. Esto es una medida de seguridad contra los ASIC y también elemental para el correcto funcionamiento de Ethash. Las operaciones necesarias para construir el DAG y la caché de funcionamiento de Ethash dependen en extremo de esta características.
- El algoritmo es amigable con las GPU. Seguramente sabrás que las tarjetas gráficas o GPU actuales tienen una inmensa capacidad. De hecho, mover gráficos como los de los juegos actuales requiere de enormes cantidades de memoria y procesamiento paralelo sin igual. Esto es una fortaleza si ejecutas minería usando Ethash, porque puedes usar la memoria de la GPU para tener todo el DAG en memoria, junto a la caché, y realizar todos los cálculos en un espacio de trabajo de gran velocidad. Como resultado, tienes la capacidad de minar mucho más rápido.
- Ofrece una excelente capacidad de verificación para cliente ligeros. Con unos 16 MB de memoria RAM, es posible crear un cliente ligero que sea capaz de verificar las transacciones de forma muy sencilla y rápida. Adicional a esto, un cliente ligero puede estar en funcionamiento y realizar el proceso de verificación en apenas unos 30 segundos.
Keccak y SHA-3, ¿En qué se diferencian?
Keccak y SHA-3 son dos funciones de hash muy parecidas, de hecho, el principio sobre el que funcionan es el mismo, pero aplicado de forma distinta, lo que da, resultados distintos. Sin embargo, ambas son prácticamente equivalentes en seguridad, velocidad y poder de cómputo necesario para su cálculo.
Así que aunque ambas funciones generan hashes distintos, la base de funcionamiento y la seguridad de las mismas son prácticamente equivalentes.