Criptomanía | Proof of Work. Prueba de trabajo. Algoritmo de consenso PoW. ¿Qué es? ¿Para que sirve? ¿Cuáles son las características básicas?

Este artículo consta de cierta complejidad. En Criptomanía tenemos preparado un artículo mucho menos complejo y mucho más corto para explicar el concepto Proof of Work con una sencilla analogía. Si no tienes muy claro si deberías leerlo antes, hazlo, el saber no ocupa lugar 😉

Proof of Work para principiantes – Analogía de los cofres y los caza-tesoros

Conocer los entresijos de los algoritmos Proof of Work no es estrictamente necesario, pero cuanto más conozcamos de algo, mejor podemos juzgarlo

Proof of Work – Conocimientos Previos

Antes de entrar a definir las características comunes a todos los algoritmos de consenso basados en sistemas Proof of Work, vamos a repasar unos conceptos mínimos y básicos de las criptodivisas.

Una criptodivisa es funcional gracias a la blockchain.

proof of work blockchain

¿Y que es la blockchain?

La blockchain de una criptodivisa es un registro público y descentralizado de “transacciones”. Cada bloque de la cadena de bloques es una colección de transacciones que han ocurrido en un intervalo de tiempo determinado.

Ejemplo: en bitcoin, el tiempo entre bloques es de 10 minutos, luego, cada bloque incluye las transacciones ocurridas en los últimos 10 minutos.

Si conoces todas las transacciones de tokens que han ocurrido, conoces el paradero de todos los tokens. En otras palabras: una blockchain es una “prueba” dinámica de cuántas “criptomonedas” tiene cada usuario.

Y, ¿dónde está la blockchain?

En todos lados. Todos los elementos de la red tienen su propia copia de la blockchain. Por eso es un registro descentralizado: no hay una autoridad central que guarde y conserve el registro de transacciones, con todos los peligros que eso conllevaría.

¿Y cómo garantizamos que ningún usuario intenta modificar su registro de transacciones?

Gracias a los algoritmos de consenso. Un algoritmo de consenso es, básicamente, una serie de reglas para determinar que copia de la blockchain es válida y cuál no.

Proof of Work – Generalidades

Proof of Work (PoW) o prueba de trabajo.

En lo que a Criptomanía atañe, es una clase de algoritmo de consenso utilizado en las criptodivisas más exitosas. Pero los”sistemas” Proof of Work no los inventó Satoshi ni el Bitcoin…

De hecho, los algoritmos de consenso no son ni la única ni la primera aplicación de “Proof of Work”.

Orígenes

El concepto de Proof of Work es sencillo: requerir trabajo, que tiene un coste asociado, para “hacer algo”. Este trabajo, generalmente, son cálculos que realiza un procesador.

Las primeras aplicaciones de estos sistemas eran para evitar comportamientos indeseables, cómo ataques DDoS o envío de spam. Si consigues que estas acciones malintencionadas cuesten un trabajo al atacante, desincentivas el ataque. Al menos parcialmente.

Pero este trabajo tiene que tener una característica clave: asimetría. Debe ser difícil llevarlo a cabo (aunque factible), mientras que verificar que es real tiene que tener un coste casi nulo.

Variantes de sistemas PoW

Existen dos tipos de “protocolos” Proof of Work.

  • Protocolos desafío-respuesta: El servidor elige el desafío, y el cliente calcula la respuesta que el servidor debe verificar.
  • Protocolos solución-verificación: El desafío es auto-impuesto y el servidor debe verificar tanto el desafío como la solución.

Las funciones utilizadas por los distintos protocolos pueden ser de 2 tipos:

  • Memory-bound donde la velocidad de cómputo depende de la velocidad de acceso a la memoria principal (o memoria RAM) que debería evolucionar a menor ritmo. Esto debería complicar la producción de circuitería específica (ASIC’s).
  • CPU-bound, donde la limitación se encuentra en la velocidad del procesador, que aumenta rápidamente (ver ley de Moore). Mucho más posible y probable optimizar el proceso a nivel de hardware.

Precursor al bitcoin-PoW

El principal “precursor” del protocolo Proof of Work de Bitcoin es Hashcash, propuesto por Adam Back en 1997.

Adam Back, cripto-activista

Este sistema pretendía establecer un mecanismo para demostrar y comprobar que un e-mail NO es spam.

Adam estableció un mecanismo rápido de verificación de que el emisor de un e-mail tiene el suficiente interés para mandarlo que está dispuesto a “pagar” con tiempo y energía. Para demostrar que “ha pagado” el emisor debe “marcar” la cabecera del e-mail. Esta es la marca que el receptor debe verificar.

Con este sistema, quienes quieran mandar grandes volúmenes de spam tendrán que pagar altos costes.

Proof of Work – Criptodivisas

Las criptodivisas que implementan algoritmos Proof of Work (PoW) han demostrado ser las más exitosas.

Bitcoin es la más famosa, pero otras criptodivisas como Monero y Litecoin, también son Proof of Work. Los algoritmos PoW de estas criptodivisas son respectivamente Hashcash-SHA-256, CryptoNight y Hashcash-Scrypt.

Generalmente se obvia “hashcash” y nos referimos a ellos como SHA-256 y Scrypt.

Proof of Work – Trabajo incentivado

Las criptodivisas, generalmente, dilatan la creación o repartición de sus token a lo largo del tiempo. De hecho, la curva de emisión (ritmo de creación) es uno de los factores más determinantes de una criptodivisa.

Esta emisión de tokens, o inflación de tokens, se invierte en asegurar la red. Dicho de otra forma, para incentivar que la red sea lo más grande posible (o equivalentemente, lo más segura posible), los nuevos tokens se reparten entre los usuarios que mantienen una copia de la blockchain. Cada bloque (block) que se añade a la cadena (chain) con éxito tiene una recompensa, que se entregará al participante que “creó” ese bloque en primer lugar.

proof of work trabajo incentivadoLos usuarios que mantienen este registro de transacciones o cadena de bloques, son los mineros. Los mineros compiten entre sí para “confirmar” un bloque (registrar transacciones) y obtener la “recompensa por bloque”.

El proceso para “registrar” bloques con éxito (y las “condiciones” para hacerlo) dependerá del algoritmo que utiliza la blockchain “para la que trabajan”.

En un algoritmo Proof of Work se recompensa a los usuarios en función de la potencia de cálculo (hashrate) suministrada a la red. Aquel que mayor potencia de cálculo aporte, mayor porcentaje de las recompensas recibirá. Aunque a corto plazo influye el azar, a largo plazo un minero que tiene el 1% del hashrate de la red recibirá el 1% de las recompensas de los mineros.

Este azar o varianza perjudica especialmente a los mineros más pequeños, que tienen que unirse en pools para anular el devastador efecto de la varianza. Por ejemplo en la red bitcoin, un minero “amateur” estaría decenas de años sin resolver ningún bloque (es decir, sin cubrir gastos nunca). Por eso, para los mineros más pequeños, es imprescindible agruparse y repartirse proporcionalmente los beneficios.

Proof of Work – Objetivo

Esta potencia de cálculo o hashrate se utiliza para garantizar la integridad del registro de transacciones (blockchain). Son las “soluciones” por unidad de tiempo que puede “probar” una unidad de procesamiento.

Los mineros buscan encontrar un hash con unas características determinadas (una serie de 0’s iniciales en el caso de bitcoin), y la única forma de hacerlo es probar y probar hasta dar con uno. Puedes hacer algunas pruebas manuales con esta calculadora de hashes SHA-256, los que usa el algoritmo Proof of Work de bitcoin.

Igual que tú en la calculadora necesitas introducir datos para obtener un hash, igualmente deben hacerlo los mineros.
Para ir variando el resultado (output) obtenido, los mineros deben de variar los datos introducidos (input).
Este input que introducen los mineros combina: información de las transacciones, una marca horaria, el hash del bloque anterior, la versión del software utilizada, la dificultad objetivo y por último lo que se conoce como “nonce“.
Este nonce es el “dato” que manualmente varían los mineros en busca del hash adecuado. Se hace público, junto con el resto de datos que dependen del minero (hora y versión) con el bloque para que la red pueda comprobarlo.

Pero, no es que técnicamente un bloque tenga el requisito de estar marcado con un hash con unas condiciones determinadas, sino que esto es una condición “auto-impuesta” por el sistema para requerir trabajo para añadir bloques a la blockchain. De eso se tratan los sistemas proof-of-work: requerir trabajo para demostrar “interés”.

Dificultad

Además, este proceso se complica para ajustarse a la potencia de cálculo de la red.

Si este proceso no se complicara adecuadamente, podría darse el caso de que múltiples mineros crearan bloques idénticos. Estos bloques se llaman “bloques huérfanos” [1] y son relativamente indeseables: sólo queremos una versión de la blockchain.

Pero los bloques huérfanos no serían la única consecuencia indeseable, además, con una dificultad demasiado baja y un hashrate demasiado alto, la “resolución” de bloques se aceleraría cada vez más.

Este factor que complica las operaciones se llama “dificultad” [2]. La dificultad se ajusta automáticamente cada cierto intervalo de bloques (por ejemplo, 2016 bloques en Bitcoin o 1 bloque en Monero).

La blockchain bitcoin tiene X hashrate. Luego la red bitcoin es capaz de probar X soluciones por segundo.
Paralelamente a esto, las probabilidades de encontrar un hash con cierta cantidad de ceros es Y% (e.g. la probabilidad de encontrar un hash con 4 ceros iniciales es 1 entre ~65000)
Si el objetivo es que haya un bloque cada tiempo T (block target o tiempo entre bloques), la red bitcoin exigirá suficientes ceros iniciales como para que T se mantenga lo más cerca posible de 10 minutos.

Seguridad

Y, ¿entonces? ¿Esta potencia de cálculo se tira a la basura?

No. Esta potencia de cálculo garantiza que nadie puede cambiar la blockchain.

¿Cómo lo hace?

Espera… Primero vamos a aclarar las dos posibilidades “principales” de ataque:

  1. Cambiar una transacción antigua. Ejemplo: Quiero asignar unos bitcoin a una dirección bajo mi poder para poder gastarlos
  2. Gastar dos veces los mismos bitcoin (conocido como double-spend). Ejemplo: Envío un pago a un comerciante e instantáneamente envío esos mismos bitcoin a una dirección bajo mi poder

El primero de todos es el más complicado de llevar a cabo. Si cambias una sola transacción de un bloque, cambias los inputs con los que se obtiene el hash del bloque. Y un input ligeramente distinto, desemboca en un hash completamente distinto. Y además, el hash de cada bloque, es parte de los inputs del hash del siguiente bloque. Luego para cambiar una transacción deberías re-calcular todos los bloques siguientes. Y, a menos que tengas mayor (+50%) potencia de cálculo que el resto de la red, nunca serías capaz de alcanzar y sustituir a la blockchain “legal”. Es más, cada vez estarías más retrasado (la diferencia de bloques con la blockchain legal sería cada vez más grande). Y en el proceso habrás gastado tiempo y energía a cambio de nada.

En el segundo modelo de ataque, pasa más de lo mismo. La primera de las transacciones siempre acabará siendo considerada la válida, porque aunque tu segunda transacción pueda ir a parar a nodos que aún no hayan visto tu primera transacción, la primera de ellas EN CUALQUIER INSTANTE habrá pasado por más nodos que la segunda. Y a medida que pase el tiempo, mayor será la diferencia. Una vez más, la única esperanza del atacante es tener más del 50% de los nodos bajo su control para decidir elegir como válida su segunda transacción. Y esto es inviable por el gasto económico que representaría.

**Satoshi consideraba que en ~10s un nodo podría saber si una transacción es legítima o ha habido intento de double-spend

Esto crea, de facto, una conexión entre la adopción de una criptodivisa y su seguridad.

¿Por qué? Porque los mineros son recompensados con tokens de la criptodivisa. Es decir, cuanto mayor sea el valor de la criptodivisa, mayor valor tendrá la recompensa que recibe el minero.

¿Y cómo sube el valor de una criptodivisa? Cuándo aumenta el interés en ella. A mayor uso de una divisa (aumento de la demanda), mayor es su precio.

Un precio más alto, aumenta los ingresos producidos por la minería, que gracias al libre mercado, atrae a más mineros. Más mineros, implican mayor potencia de cálculo. Y, cuánto más grande es la potencia de cálculo, más caro es hacer un ataque. Si “hacer trampas” es más caro, equivalentemente, el sistema es más seguro.

Visto desde el punto de vista de un atacante.

Si una criptodivisa tiene un bajo precio, nadie invertiría hashrate (dinero, a fin de cuentas) en intentar registrar transacciones falsas: no hay incentivo económico. Una vez la criptodivisa crece y aparece un incentivo económico para atacar a la blockchain, aparece también un incentivo económico que siempre será más grande: minar.

Proof of Work – Resumen

Las características comunes de los algoritmos de consenso Proof of Work se pueden resumir en las siguientes ventajas y desventajas

Ventajas PoW

  • Compromiso.
    Al ser necesario una inversión en hardware y una optimización de software, el minero está atado, por un tiempo, al éxito a la criptodivisa para rentabilizar la inversión de tiempo y capital. Lo lógico es que este minero participara en el progreso, promoción y mejora de la criptodivisa a largo plazo.
  • Seguridad enlazada a la adopción.
  • El incentivo económico anima a los mineros a cumplir las normas.
    Si un minero desperdicia su hashrate en intentar hacer trampas, no obtendrán ninguna recompensa.
  • “Difuminación de la oferta”.
    Un minero necesita transformar sus ganancias en electricidad, luego necesariamente necesita compradores para sus token. Efectivamente está diluyendo la distribución de la oferta.

Desventajas PoW:

  • Poco ecológico.
    Miles de kw/h se “queman” para asegurar la red en un proceso poco eficiente.
  • Centralización
    Los mineros más grandes cuentan con un margen de beneficios mucho mayor, ahogando a los mineros más pequeños.
  • Cashflow negativo
    Los mineros extraen dinero del ecosistema de una criptodivisa para invertir en hardware y electricidad
  • Incentivo económico necesario
    Minar tiene un alto coste económico, luego requiere de comisiones en las transacciones suficientes para rentabilizar gastos o de una “recompensa por bloque” (inflación).

Proof of Work – Conclusión

Proof of Work es anti-ecológico.

La huella de carbono de bitcoin es mucho más grande de lo que la mayoría imaginan. Aunque, a cambio, su seguridad es innegable. Intentar atacar a la red bitcoin costaría alrededor de 320 millones de dólares en hardware y unos $600,000 diarios en electricidad.

¿Entonces? ¿Vale la pena? ¿Realmente la seguridad tiene ese precio? Eso es relativamente subjetivo…

Quizá el futuro de Proof of Work pase por darle un uso a todo ese trabajo ADEMÁS de asegurar la red.

Primecoin, por ejemplo, ha dado los primeros pasos hacia esto. La función Proof of Work de Primecoin obliga a los mineros a buscar números primos con un interés para investigaciones matemática. Primecoin ha dado un doble uso a la energía invertida en su función Proof of Work: asegurar la red y encontrar números primos de interés para investigaciones matemáticas.

El futuro de la minería es incierta, pero la minería no es “la revolución” de las criptodivisas. Cuando se desarrollen alternativas se podrían adoptar sin problema. La revolución de las criptodivisas cómo sustitutivo de las monedas convencionales radica en muchas otras cosas. Proof of Work solo fue el primer medio para hacerlas posible.

Y esto es basicamente todo sobre Proof of Work. Si te ha gustado este resumen, compártelo. Y si tienes algo que añadir o te queda alguna pregunta, deja un comentario.

The following two tabs change content below.
Libertario, tecnófilo e ingeniero mecánico. Apasionado de la tecnología blockchain en general y de Monero en particular.

Latest posts by Fernando Gomez (see all)