Como se indicó en el artículo Antecedentes: Bitcoin, el protocolo Bitcoin se compone de 4 tecnologías:

Una red entre pares distribuida (el protocolo bitcoin)

Un libro contable público (la cadena de bloques, o “blockchain”)

Un sistema distribuido, matemático y determinístico de emisión de moneda (minería distribuida)

Un sistema descentralizado de verificación de transacciones (script de transacciones)

Minería

En la red de Bitcoin se conoce como minería al proceso por el cual se recompensa a aquellos usuarios que forman parte de la red corriendo el software necesario y que validan y determinan el orden de las transacciones ocurridas desde el último bloque minado.

Nodos en diferentes partes del mundo pueden recibir las transacciones en diferente orden debido a las latencias en la red. ¿Pero entonces cómo se define el orden “real” de llegada de las transacciones? La minería puede ser definida como el esfuerzo computacional de la red para determinar que versión de la historia es la correcta. Este proceso de minería determina quien define el orden de transacciones y de esta manera resuelve de forma elegante el problema del doble gasto por el cual una misma unidad de moneda puede gastarse dos veces. A este esfuerzo computacional se le denomina Prueba de Trabajo o Proof of Work (PoW).

Los algoritmos de consenso son una generalización de la Prueba de Trabajo y como su nombre indica permiten a una red descentralizada llegar a un consenso acerca del estado y orden de llegada de las transacciones.

La Prueba de Trabajo fue el primer algoritmo de consenso gracias a Bitcoin y que consigue resolver con éxito el problema del doble gasto, pero existen otros métodos. Por ejemplo, Ethereum está en el proceso de migrar del algoritmo de Prueba de Trabajo al algoritmo de Prueba de Participación o Proof of Stake (PoS). A continuación describimos estos dos algoritmos de consenso.

Algoritmo de Prueba de Trabajo (PoW)

De una manera resumida, la Prueba de Trabajo es el proceso de hacer hash de la cabecera del bloque de manera repetitiva, cambiando un parámetro conocido como nonce, hasta que el hash resultante coincida con un objetivo específico.

Como se explico en un artículo anterior, el resultado de la función hash no puede determinarse de antemano, ni se puede crear un patrón que vaya a producir un valor hash específico. Por este motivo, la única manera de producir un hash resultante que coincida con un objetivo específico es intentarlo una y otra vez, modificando aleatoriamente la entrada hasta que el hash resultante que se desea aparezca por casualidad. Es decir, es un algoritmo de fuerza bruta.

Este objetivo se determina de tal forma que el promedio de tiempo necesario para que el tiempo medio necesario para que los mineros encuentren una solución sea siempre el mismo independientemente de la capacidad computacional de la red- A este tiempo se le denomina tiempo de bloque y es de 10 minutos en el caso de Bitcoin y de 2 minutos y medio en el caso de Litecoin.

¿Cómo se ajusta la dificultad para mantener estable el tiempo de bloque? La función hash deberá encontrar un numero inferior al objetivo y la dificultad puede cambiarse aumentando o reduciendo el número de ceros delante del hash de la cabecera de bloque sobre el que luego se aplica la función hash. Usemos un ejemplo para entender ésto mejor:

Imaginemos que tenemos una función hash que dada una cadena de texto nos devuelve un número binario, es decir, de ceros y unos. Si ahora nos dan una cadena de texto y nos piden encontrar una cadena de texto de forma que añadida a la cadena anterior y aplicada la función hash nos de como resultado un número que empiece por 0, tendremos una probabilidad del 50% de que dada una cadena la solución sea la esperada. Si ahora nos pidieran encontrar una cadena que empiece por dos ceros, la probabilidad se reduce a un 25%. Si continuamos añadiendo ceros a la solución esperada, la dificultad de encontrar una solución crece de forma exponencial.

Cuando un minero encuentra un nonce que añadido al hash de cabecera cumpla el objetivo de dificultad, añade dicho nonce a la cabecera del bloque nuevo y lo envía a la red para que el resto de mineros puedan comprobar que la solución es válida. En el momento que los mineros comprueban la validez de la solución y comprueban que las transacciones son válidas, añaden dicho bloque a la cadena de bloques y comienza de nuevo la prueba de trabajo para el bloque siguiente. Además, el minero que encuentra la solución añade al bloque una transacción sin entradas y con una salida a su propia dirección como recompensa por el esfuerzo dedicado. A esta transacción se le llama coinbase y es la primera en cada bloque de la blockchain.

El algoritmo de Prueba de Trabajo tiene detractores por el consumo energético necesario durante el proceso y que no tiene mayor beneficio que el de competir por esta recompensa. Otro de los problemas que presenta este algoritmo es la posibilidad de centralización de mineros debido al diferente coste eléctrico dependiendo de la región donde esté corriendo el software.

Algoritmo de Prueba de Participación (PoS)

Contrario a la Prueba de Trabajo, donde el algoritmo recompensa a los mineros que consiguen resolver el problema matemático con el objetivo de validar transacciones y crear nuevos bloques, con la prueba, el creador del nuevo bloque es elegido de forma determinista, dependiendo de su riqueza, también definida como participación.

Gracias a la PoS los validadores no tienen que usar poder computacional porque el único factor que influye en su probabilidad de ganar es el numero total de monedas y la complejidad actual de la red.

En la Prueba de Trabajo, los mineros están incentivados a participar en beneficio de la red porque en caso contrario la energía aportada será desperdiciada ya que el resto de mineros descartará bloques inválidos. En el caso de la Prueba de Participación, los validadores tienen que bloquear sus fondos para poder participar y actuar en contra de la red puede significar perder dichos fondos.

Existe una variante conocido como Prueba de Participación Delegada o Delegated Proof of Stake (DPoS) en la que se eligen un número concreto de representantes. Es una posible solución a los problemas de escalabilidad producidos por tener un numero grande de nodos validadores.

Para finalizar

Este artículo ha quedado un poco mas largo de los anteriores pero así lo merecía. La Prueba de Trabajo fue la mayor innovación introducida por Bitcoin. Si bien la prueba de trabajo ya se había utilizado previamente, con Bitcoin fue la primera vez que se utilizaba como mecanismo de sincronización en entornos distribuidos y solventar el problema del doble gasto.

Con el próximo artículo empezamos con la parte práctica y el desarrollo en Ethereum.

Próximo artículo: Desarrollo en Ethereum