El padrino del consenso: Guía sobre proof-of-work
Este artículo está disponible en los siguientes idiomas:
Ideas clave
El artículo recorre los orígenes y la evolución de proof-of-work (PoW), explicando cómo surgió para combatir el abuso de recursos antes de convertirse en la base de la blockchain descentralizada de Bitcoin. Detalla cómo PoW asegura las transacciones y previene el doble gasto mediante acertijos computacionales resueltos por mineros, pero también señala los desafíos de escalabilidad y consumo energético. Para abordar estas limitaciones, el artículo menciona el desarrollo de capas blockchain y nuevos mecanismos de consenso que buscan mejorar la eficiencia manteniendo la seguridad y descentralización.
Hoy en día, las redes descentralizadas emplean diferentes mecanismos de consenso, pero todo comenzó con proof-of-work (PoW). Te contamos la historia de cómo surgió, cómo opera y por qué sigue siendo uno de los algoritmos fundamentales en Web3.
En un principio, proof-of-work no fue concebido como base para redes descentralizadas. No tenía relación alguna con las criptomonedas y, de hecho, fue diseñado para proteger a los usuarios de “recursos compartidos” frente a distintos tipos de abuso. Los creadores del concepto, presentado en 1993, propusieron una solución que limitaba el acceso a un recurso exigiendo a los participantes realizar cálculos complejos. Además, se estableció que los resultados de estos cálculos debían ser fáciles y rápidos de verificar.
La primera versión apta para implementación práctica se propuso cinco años después, cuando Adam Back creó el proyecto Hashcash, cuyo objetivo principal era combatir el spam. La idea consistía en usar criptografía para dificultar el envío masivo de correos electrónicos. Antes de enviar cada email, el remitente debía realizar cálculos complejos —encontrar un valor x tal que el hash SHA(x) tuviera N ceros iniciales— e incluir el resultado (proof-of-work) en el encabezado del mensaje.
Para que el mensaje llegue al destinatario, es necesario verificar que el remitente resolvió el problema criptográfico. Esto se puede hacer rápidamente con un cálculo SHA-1 usando una etiqueta preparada de antemano. Esta etiqueta la genera el remitente antes de resolver el problema y se vuelve pública para todos los participantes del sistema. Así, enviar un par de correos no representa un problema, pero para hacer campañas masivas se necesita una gran capacidad de cómputo.
¿Te suena familiar? Este concepto fue utilizado en 2008 por Satoshi Nakamoto para crear Bitcoin y su blockchain basada en proof-of-work.
Cómo funcionan las blockchains PoW
En el centro de la idea de Nakamoto (aún se desconoce si es una persona real o un grupo de desarrolladores) estaba el objetivo de crear un sistema de dinero electrónico descentralizado, independiente de terceros. Esto permitiría enviar dinero directamente, sin intermediarios como bancos.
La información sobre las transacciones se almacena en un registro distribuido entre los participantes del sistema. El proceso de secuenciación consiste en agrupar las transacciones en bloques de tamaño limitado. Cada bloque debe contener información sobre el bloque anterior. Para ello, todos los datos relevantes (transacciones, hash del bloque previo, marca de tiempo, etc.) se convierten en un código único llamado hash. Esto se logra mediante una función hash, que en el caso de Bitcoin es SHA-256. Los “nodos completos” se encargan de gestionar las cadenas, mientras que los nodos mineros participan en la creación de nuevos bloques.
Es importante destacar que la función hash opera de modo que siempre se obtiene el mismo hash a partir de un conjunto de datos dado. Incluso el cambio más mínimo genera un hash diferente.
Como mencionamos antes, los mineros deben calcular el hash de un bloque para añadirlo a la cadena. Esto en sí mismo no consume mucho tiempo, así que para evitar que el problema computacional se resuelva demasiado rápido, la red ajusta la dificultad cada 2,016 bloques, lo que equivale a aproximadamente dos semanas. Esto garantiza que el tiempo de minado de bloques ronde los diez minutos, permitiendo el funcionamiento estable de la blockchain.
¿Cómo funciona esto en la práctica? Los mineros reciben los bloques como insumo y calculan el hash. Sin embargo, la red exige que el hash sea menor a cierto valor. Pero, ¿no dijimos que el hash no se puede modificar? Aquí entra el nonce (“number only used once”). Se añade a los bloques y los mineros lo cambian durante los cálculos, obteniendo así un hash diferente. Luego, comparan el hash resultante con el objetivo de dificultad y, si el valor es mayor, cambian nuevamente el nonce y recalculan el hash. Este proceso se repite hasta lograr una coincidencia (el resultado debe ser igual o menor que el hash objetivo), y puede ocurrir millones de veces.
Para que tengas una idea de la magnitud de la tarea, observa este número:
115792089237316195423570985008687907853269984665640564039457584007913129639936
Esta es la cantidad de combinaciones posibles en el hash SHA-256. Es equivalente al número de estrellas en el universo, ¡115 mil millones de veces!
La cadena de transacciones
Veamos ahora una transacción estándar para entender cómo funciona todo esto. Supongamos que enviamos fondos en BTC a alguien. Una vez generada y firmada la transacción con nuestra clave privada, se envía a la red. El nodo completo verifica que sea correcta y, si no hay problemas, permite que continúe por la red. Otros nodos también realizan verificaciones y la colocan en la cola de transacciones no confirmadas (mempool).
Los mineros recogen transacciones del mempool (eligiendo primero las que ofrecen mayor comisión), las agrupan en un bloque y comienzan a realizar los cálculos. Cuando uno de los mineros resuelve el problema, los nodos completos verifican la solución y, si es correcta, el minero recibe una recompensa. En ese momento, el bloque se considera “minado” y se añade a la blockchain, mientras que la información se distribuye a todos los participantes de la red. Después, los mineros empiezan a trabajar en el siguiente bloque. Al mismo tiempo, mientras más bloques se añadan a la blockchain después del que contiene nuestra transacción, mayor será el nivel de confirmación.
En resumen, para que una transacción se considere legítima, la mayoría de los nodos de la red debe estar de acuerdo en que el bloque que la contiene fue calculado correctamente.
¿Todo esto es inevitable?
Nakamoto no fue el primero en intentar crear un sistema descentralizado, pero sí el primero en emplear el mecanismo de consenso proof-of-work. Sin él, sería imposible resolver el problema del doble gasto, que ocurre cuando un remitente gasta los mismos fondos dos veces antes de que el sistema confirme la transacción. Los mineros revisan las transacciones para evitar el doble gasto cada vez que las reciben del mempool.
Es cierto que, en una blockchain PoW, dos mineros pueden minar el mismo bloque. Esto no necesariamente es un acto malicioso y puede suceder si ambos terminan el cálculo casi al mismo tiempo y uno de ellos no recibe a tiempo la información de que el bloque ya fue minado. En ese caso, aparece una cadena paralela que se origina en el bloque erróneo. Para eliminar la “rama” incorrecta, el mecanismo de consenso compara ambas blockchains y da preferencia a la versión más larga.
Problemas y limitaciones
El mayor problema de PoW —al menos en su forma pura— es la escalabilidad. Por ejemplo, la blockchain de Bitcoin procesa cerca de 7 transacciones por segundo, lo cual es bajo. Por esto, el mempool se llena en momentos de alta demanda y las transacciones con comisiones bajas pueden quedar atascadas durante horas o incluso días. A simple vista, podría parecer que la forma más fácil de aumentar la velocidad sería hacer los bloques más grandes para incluir más transacciones, o simplemente minarlos más rápido.
Pero no se puede aumentar el tamaño de los bloques sin consecuencias: se requeriría mucha más potencia de cómputo para crearlos y, como resultado, solo quedarían los mineros grandes o los pools de minería, reduciendo la descentralización.
Si se acorta el tiempo de procesamiento, existe el riesgo de que los nodos de la red no logren alcanzar consenso antes de que aparezca el siguiente bloque. Esto aumentaría la cantidad de “ramas” en la blockchain y haría posible el doble gasto.
Todo esto se resume en el concepto de la trilema blockchain, que sostiene que las redes descentralizadas solo pueden ofrecer dos de sus tres beneficios principales a la vez: descentralización, seguridad y escalabilidad. Para resolver esto en el contexto de PoW, se emplean capas blockchain. Estas operan “por encima” del sistema principal y aumentan la velocidad de procesamiento de transacciones.
Además, se están desarrollando nuevos protocolos de consenso que funcionan junto a PoW. Por ejemplo, Kaspa utiliza PoW como mecanismo de seguridad de la red, pero los bloques se agrupan en un grafo acíclico dirigido en lugar de una blockchain, lo que permite a los mineros trabajar en diferentes bloques en paralelo.
Existe también un problema más cotidiano: mientras más poder de cómputo acumula una blockchain, mayor es la complejidad de los cálculos y mayor el consumo energético al minar.