Ouroboros

De ALDEA Wiki
Ir a la navegación Ir a la búsqueda
Ouroboros Protocol

Se denomina Ouroboros al protocolo de consenso basado en proof of stake presente en la red de Cardano (prueba de participación en español). Tiene sus inicios alrededor del año 2017 con la publicación del artículo académico Ouroboros: A Provably Secure Proof-of-Stake Blockchain Protocol por parte del equipo de investigación de IOHK, esta fue la primera demostración formal que probaba la posibilidad de establecer un consenso seguro en un protocolo proof of stake. Su implementación inicial parte con Ouroboros Classic y ha tenido sucesivas versiones tales como Ouroboros Praos, Génesis e Hydra.

Antecedentes

¿Qué son los protocolos de consenso ?

Para el funcionamiento mínimo de una red Blockchain se requiere un protocolo de consenso, es decir, un conjunto de reglas que norman la participación de cada uno de los nodos que son parte de la red, estas reglas establecen criterios para validar la creación, verificación y propagación de nuevos bloques en la cadena. Los protocolos de consenso son importantes, pues permiten a los participantes acordar sobre una historia única de eventos dentro de una red, o sea, mantener una sola fuente de verdad sobre la cual cada participante puede apelar. Puede ocurrir a veces que en las redes Blockchain surjan bifurcaciones, lo que significa que existen historias diferentes sobre el estado de la red, sin embargo, un buen protocolo asume esta divergencia como una posibilidad y tiene en su diseño una solución efectiva para guiar a los participantes a la cadena correcta. Un protocolo fracasa cuando no puede establecer consenso en al menos una mayoría del 51% de partes honestas.

Las pruebas en los protocolos de consenso

Un factor fundamental para los protocolos de consenso es la aleatoriedad, lo que supone escoger por azar y sin arbitrariedad el participante que deberá crear el siguiente bloque. Esta aleatoriedad evita que la cadena encuentre un control central en algún participante, o bien que exista un patrón que un usuario malicioso pueda explotar. Para ello, se utilizan pruebas o proofs que permiten una elección aleatoria del nodo creador del nuevo bloque, tal como es el caso de Bitcoin que utiliza proof of work como parte de su protocolo de consenso. En este tipo de prueba se utiliza la capacidad de cómputo para resolver un complicado acertijo criptográfico, dicho acertijo solo puede ser resuelto por fuerza bruta - probando al azar todas las combinaciones posibles -, el primero en adivinar el acertijo es quien crea el nuevo bloque. Entre más poder de cómputo y procesamiento se tenga, mayor probabilidad existe de resolver el acertijo y minar el nuevo bloque.

A diferencia de Bitcoin, Cardano utiliza otro tipo de prueba denominada proof of stake o prueba de participación, esta consiste en realizar una suerte de lotería entre todos las monedas emitidas dentro de la red. De este modo, entre más monedas o participación se posea mayor será la probabilidad de salir electo como creador del bloque. Ouroboros se propone como una innovación dentro de los protocolos de este género, incluyendo características adicionales que atenúan los problemas cuando hay participantes que poseen grandes concentraciones de monedas, evitando así un sistema plutocrático donde quien tiene más monedas gana.

El desafío de Ouroboros

El problema que tienen los protocolos basados en proof of work es la falta de eficiencia energética, lo que inmediatamente repercute de forma importante en la sustentabilidad y descentralización de una red. Si vemos el caso de Bitcoin, uno puede observar que su diseño se sustenta en una fuerte competencia a nivel de procesamiento, para resolver la prueba de trabajo de forma regular los mineros deben adquirir progresivamente más recursos computacionales, porque de lo contrario la minería se vuelve poco sustentable financieramente. Este aumento de recursos computacionales implica grandes costos operacionales que afectan a la sostenibilidad de la red, lo que finalmente termina centralizando la red pues no todos tienen el capital para invertir en grandes infraestructuras y la posibilidad de adquirir los especializados hardware de minería. Otro detalle relevante está en que Bitcoin, aparte de ser costoso de solventar, tiene una baja capacidad de procesar transacciones, lo que no lo hace propicio para un uso global donde el volumen de transacciones es alto. Por estas razones, si bien Bitcoin fue revolucionario al ser el primero en resolver el problema de mantener valor y consenso en un sistema descentralizado, esto se contrarresta con la centralización que tiene supuesta en su diseño cuando se despliega en un contexto de uso humano. Por ello, el desafío fundamental que motiva al proyecto Ouroboros fue crear un protocolo que sea eficiente energéticamente, veloz y que al mismo tiempo sea seguro permitiendo consenso en al menos un 51% de partes honestas, cuestión que en sus inicios era vista con gran controversia y escepticismo por parte de la comunidad blockchain. La creación de un protocolo más eficiente no solo lo hace sustentable, sino que también cataliza de mejor manera la descentralización del ecosistema al ser más accesible.

Funcionamiento de Ouroboros

En términos generales, Ouroboros como protocolo basado en proof of stake, presenta como solución para generar consenso dentro de un sistema descentralizado la elección aleatoria o lotería de uno de sus participantes. Cuanto mayor sea la participación dentro del sistema, más probable es ser electo como creador del nuevo bloque y así recibir la recompensa del algoritmo. En síntesis, el protocolo posee tres responsabilidades principales: determinar el líder creador de bloque, establecer la cadena correcta a seguir y verificar los bloques que ya han sido producidos.

Características generales

Dentro de las características globales de Ouroboros podemos encontrar:

  1. Organización cronológica en epochs, bloques y slots: El protocolo posee una organización temporal de la agenda contable de transacciones en épocas (epochs), bloques y ranuras (slots). Una época dura aproximadamente 5 días, un bloque dura 20 segundos y un slot 1 segundo. En promedio se espera la nominación de un nodo creador de bloque por cada 20 segundos resultando en 21.600 nominaciones o bloques por época. En suma, una época en total de ella existen 432.000 ranuras o slots que duran cerca de 1 segundo, por otro lado un bloque consiste en 20 de estos slots.
  2. Sistema de delegación: La participación dentro del protocolo se hace a través de un sistema de delegación, en el cual los participantes delegan los derechos de participación propia de cada moneda a los stake pools (piscinas de participación), nodos que son operados por personas y que cumplen con el compromiso de mantenerlos seguros y en línea permanentemente. Es importante recalcar que lo que es delegado no son las monedas propiamente sino los derechos a participar dentro del protocolo, por tanto aunque uno delegue sus fondos esto no quiere decir que se pierda el control sobre ellos. Como parte de los incentivos del sistema, cuando un stake pool es nominado como líder creador (slot leader) de bloque recibe una recompensa que es repartida junto con quienes delegan en el mismo de manera proporcional al tamaño de su delegación.
  3. Oráculo global de aleatoriedad: Para hacer una nominación del slot leader se requiere una fuente de aleatoriedad sin sesgos e impredecible. Cardano ha intentado abordar este problema de varias formas: Primero, con la incorporación de una función de computación multi-partita segura (MPC), sin embargo, este tipo de prueba implicaba alta complejidad de comunicación entre nodos y por lo tanto era difícil de escalar. Luego, se estableció un Oráculo Global de Aleatoriedad que incorpora una Verifable Random Function (Función Aleatoria Verificable). Ésta permite encontrar un valor aleatorio y una prueba que permite verificar públicamente ante los demás que se ejecutó correctamente la función (impidiendo la invención arbitraria de este valor). Así cada nodo ejecuta la función y si el valor de alguno resulta menor a un rango determinado (en relación a la cantidad delegada) puede reclamar su derecho como slot leader. La ventaja de este tipo de función es que permite acordar aleatoriedad con una baja complejidad de comunicación lo que posibilita escalar mejor manera la red en comparación a MPC.

¿Cómo funciona?

  1. Tiempo: Está dividido en epochs y slots que empiezan en el bloque Génesis. A lo más, un bloque es producido para cada 20 slots y solo un slot-leader puede firmar cada bloque.
  2. Registro: A la hora de registrarse para participar en el protocolo un usuario necesita:
    • Una conectividad a la red para sincronizarse con la agenda contable o ledger.
    • Un reloj global que indica el slot actual.
    • Un Oráculo Global de Aleatoriedad que produce valores aleatorios (v) y son entregados al usuario.
  3. Procedimiento de participación
    • a) Al principio de cada epoch los participantes toman una muestra de la distribución de Adas delegadas sin contar los dos últimos bloques.
    • b) El Oráculo aleatorio toma los valores aleatorios "v" de los primeros 2/3 de los slots en épocas pasadas y los convierte en un hash para usarlo como la semilla aleatoria y que junto a las llaves de algún nodo resulta en la nominación del siguiente slot-leader.
    • c) Los participantes evalúan con su llave secreta la VRF (Verifable Random Function) para cada slot, si el valor resultante se encuentra dentro del rango correcto para ser nominado el participante se vuelve el slot-leader y tiene derecho a producir un bloque. La función principal de la función VRF aquí es asegurar que un solo participante pueda retornar el valor dentro del rango correcto.
    • d) En este punto el slot leader colecta las transacciones que corresponde al bloque actual, incluye ciertos valores resultantes de la función VRF en el bloque, mantiene la llave pública y cambia la privada a una nueva (Key-evolving Signature) para evitar ataques. Finalmente transmite el bloque a la red. Las recompensas son calculadas al final del epoch. Éstas surgen a partir de las comisiones de las transacciones y de la reserva general de Ada de Cardano.

¿Qué pasa en caso de una bifurcación en la red?

Eventualmente puede suceder que se produzcan slots con cero o más de un líder, lo que implica que los nodos pueden recibir a veces varias cadenas válidas. Para determinar la cadena a seguir las partes recolectan todas las cadenas válidas y aplican ciertas reglas: escoger la cadena que crezca mas larga y densa en los slots siguientes comparando las cadenas que compiten. Esta regla permite a cualquier parte siempre sincronizarse a la red con la cadena correcta basado solamente en una copia confiable del bloque génesis y observando cómo la cadena crece por un tiempo suficiente.

¿Por qué es más eficiente energéticamente?

En primer lugar, a diferencia de Bitcoin, el protocolo no supone la competición entre nodos para generar la prueba de consenso, es decir, se ahorra la electricidad que todos los mineros gastan para resolver el acertijo criptográfico (la prueba de trabajo). En este sentido, los protocolos proof of stake minimizan el uso de recursos físicos como la capacidad de procesamiento, apelando a recursos virtuales que se encuentran en la red y que cuando son procesados por medio de funciones criptográficas establecen consenso con costos marginales. Estos recursos virtuales pueden ser, por ejemplo, la distribución de tokens dentro de la red o los estados previos de la cadena expresados en hashes.

Desarrollo

Ouroboros Classic

En un comienzo existía una gran controversia en las comunidades blockchain sobre la posibilidad de un protocolo proof of stake. Se creía que no era factible una implementación que tuviera el mismo grado de seguridad que un protocolo proof of work. Con la publicación del artículo académico Ouroboros: A Provably Secure Proof-of-Stake Blockchain Protocol y su implementación en el año 2017 se sentó una fundamentación formal del protocolo. Fue un avance pionero ya que se introdujeron pruebas matemáticas que demostraban que era posible la implementación de un protocolo basado en proof of stake de forma segura y eficiente. Cabe señalar que esta implementación solo fue probada en entornos cerrados y que no era público en internet, ya que dentro de su implementación asumía la existencia de una sincronización temporal perfecta. Hasta la llegada de la versión Praos del protocolo no fue posible su apertura pública.

Ouroboros BFT (Byzantine Fault Tolerance)

Esta fue la siguiente etapa del protocolo, la cual fue usada durante el reinicio en la era Byron y que sería un punto de transición hacia la descentralización que suponía la era Shelley. Más que requerir que los nodos de la red estén en línea todo el tiempo, Ouroboros BFT permite que un conjunto federado de nodos pueda volver sincronizarse a pesar de eventos o situaciones de ausencia de conectividad, lo cual se asemeja mejor a las condiciones reales de una red Blockchain. Además, incluyó nuevas optimizaciones de comunicación y velocidad en la red.

Ouroboros Praos

El lanzamiento de Ouroboros Praos condujo a mejoras sustanciales en escalibilidad y seguridad con respecto a Ouroboros Classic, en particular, la capacidad de permitir entornos semi-síncronos y seguridad ante atacantes adaptativos. Marca un hito, pues significó la apertura de la red públicamente, ya preparada para sobrellevar las condiciones efectivas del mundo real. Está prevista para circunstancias donde los adversarios pueden retrasar los mensajes de participantes honestos por un período de tiempo mas largo que un slot, y que estos siempre pueden enviar mensajes arbitrarios a cualquier participante. A través de la selección privada de lideres y las llaves de tipo KES (Key Evolving Signature), Praos asegura que un adversario no pueda predecir el siguiente slot y lanzar un ataque DDoS para subvertir el protocolo. También, puede tolerar atrasos en los mensajes y la corrupción de participantes minoritarios en una población en crecimiento, lo cual es crítico para mantener una red segura a nivel global.

Ouroboros Génesis

Luego tenemos Ouroboros Génesis, esta es una adelanto a Praos en cuanto añade una nueva regla de selección de la cadena, la que permite a los participantes reconstruir la agenda contable desde un bloque génesis sin recaer fuertemente en puntos intermedios o suposiciones de la disponibilidad pasada. Genesis también provee una demostración del protocolo de la composición universal (protocol’s Universal Composability), el cual demuestra que el protocolo puede ser compuesto con otros protocolos en combinaciones arbitrarias, sin perder sus propiedades de seguridad fundamentales. Esto último contribuye significativamente a la seguridad y sustentabilidad de las redes.

Ouroboros Hydra

Finalmente está Ouroboros Hydra. Esta una arquitectura de escalabilidad off-chain que resuelve tres dificultades: alto número de transacciones, baja latencia y almacenamiento mínimo por nodo. El reciente whitepaper de Hydra menciona la añadidura de canales multi-participativos, los cuales ofrecen transacciones paralelas que mejoran drásticamente la velocidad de la red y una confirmación instantánea de transacciones. Este avance del protocolo pretende escalar Cardano de forma horizontal mediante la paralelización de las transacciones. Tal como su nombre lo sugiere, se refiere a la creación de diversos canales de estado (cabezas) en la red, obteniendo así una cadena maestra de blockchain con múltiples cadenas mas pequeñas operando simultáneamente. Simulaciones tempranas estiman que la velocidad de la red podría alcanzar 1.000 transacciones por segundo (TPS) por cada cabeza, volviéndose así una infraestructura capaz de soportar las grandes cargas de transacciones, tal como lo hacen los sistemas financieros actuales entre otros.

Curiosidades

Uroboro

¿Porqué un Ouroboros?

La figura del Ouroboro viene a representar una rasgo fundamental de la blockchain de Cardano, la cual tiene la propiedad de retroalimentar su propia aleatoriedad. Así como un Ouroboro come de su propia cola eternamente del mismo modo la red de Cardano ocupa los estado previos para alimentar nuevos estados de aleatoriedad.

Referencias

  1. Reintroduction to Cardano | Cardano developer portal: Ouroboros Protocol https://developers.cardano.org/docs/stake-pool-course/introduction-to-cardano/
  2. IOHK | Dr. Peter Gaži, presentando Ouroboros en MIT. Mar 2018. https://www.youtube.com/watch?v=PoNaw-Mtxgo
  3. Ouroboros: A Provably Secure Proof-of-Stake Blockchain Protocol. Aug 2018. https://iohk.io/en/research/library/papers/ouroborosa-provably-secure-proof-of-stake-blockchain-protocol/
  4. Blog IOHK: From Classic to Hydra: the implementations of Ouroboros explained. Kieran Costello. Mar 2020. https://iohk.io/en/blog/posts/2020/03/23/from-classic-to-hydra-the-implementations-of-ouroboros-explained/
  5. Blog IOHK: The Ouroboros path to decentralization. Aggelos Kiayias. Jun 2020. https://iohk.io/en/blog/posts/2020/06/23/the-ouroboros-path-to-decentralization/
  6. Ouroboros & Ouroboros Praos. Bernardo David. IOHK. Aug 2019. https://www.youtube.com/watch?v=CfzCQcQBkk4
  7. Pizarra Cardano; Ouroboros. Aggelos Kiayias. Dec 2017. https://www.youtube.com/watch?v=nB6eDbnkAk8
  8. Ouroboros Genesis: un protocolo blockchain de prueba de participación comprobable. Aggelos Kiayias.  Apr. 2018. https://www.youtube.com/watch?v=LCeK_4o-NCc
  9. Polkadot Wiki - Randomness: VRF. https://wiki.polkadot.network/docs/learn-randomness
  10. Cardano Forum: Ouroboros MPC. https://forum.cardano.org/t/ouroboros-mpc/62489
  11. Typed Chronicles Blog: VRF. Vincent Hanquez. Jan 2020. https://vincenthz.github.io/ouroboros-vrf-explanation/

v1.0 - Escrito por ASH, revisado por C₳rlos9- 01-05-2022