Ouroboros

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

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 un consenso seguro en un protocolo proof of stake. Su implementación inicial parte con Ouroboros Classic y ha tenido sucesivas versiones tal 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 forman parte de una red, las cuales establecen criterios para validar la creación, verificación y propagación de nuevos bloques en la cadena. Los protocolos de consensos 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 surgen 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 emitidos dentro de la red, de este modo, entre más monedas o participación se posea mayor probabilidad de salir electo como creador del bloque. Como un desarrollo de este género de prueba es que se introduce Ouroboros, incluyendo características adicionales que atenúan los problemas que supone participantes que posean grandes concentraciones de monedas, o sea, evitar 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 mas recursos computacionales, de otro modo, la minera se vuelve poco sustentable financieramente. Este aumento de recursos computacionales implica grandes costos de operaciones que afectan 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, su solución para generar consenso dentro de un sistema descentralizado consiste en la elección aleatoria o lotería de uno de sus participantes. Entre mayor sea la participación dentro del sistema mas 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 lider 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 y slots: El protocolo posee una organización temporal de la agenda contable de transacciones en épocas (epochs) y ranuras (slots). Una época dura aproximadamente 5 días y dentro de ella existen 432.000 ranuras o slots que duran cerca de 1 segundo. En promedio se espera la nominación de un nodo creador de bloque por cada 20 segundos resultando en 21.600 nominaciones por época. .
  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 sus monedas 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 es el dinero propiamente tal 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 lider creador de bloque recibe una recompensa que es repartida junto con quienes delegan en el mismo.
  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 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), esta me 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 comunicación lo que posibilita escalar mejor manera la red en comparación a MPC.

¿Como funciona?

  1. Tiempo: Está dividido en epochs y slots que empiezan en el bloque Génesis. Al menos un bloque es producido en cada slot y solo un slot-leader puede firmar un bloque para cada slot.
  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 retorna 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, estas surgen producto 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 mas de un lider, 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 como la cadena crece por un tiempo suficiente.

¿Por qué es mas 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 lo 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 para establecer consenso tal como es la capacidad de procesamiento, sino que, apelan a recursos virtuales que se encuentran en la red 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 token 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 creia 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, solo hasta la llegada de la version Praos del protocolo es que 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 descentralización que suponía la era Shelley. Mas que requerir que los nodos la red estén en línea todo el tiempo, Ouroboros BFT permite que un conjunto federado de nodos pueda volver sincronizarse a pesar eventos de ausencia, lo cual se asemeja mejor a las condiciones reales de una red de 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 punto 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 numero 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 mejorar 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, 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 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

¿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, es decir, 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. [1]
  3. Ouroboros: A Provably Secure Proof-of-Stake Blockchain Protocol [2]
  4. Blog IOHK: From Classic to Hydra: the implementations of Ouroboros explained [3]
  5. Blog IOHK: The Ouroboros path to decentralization [4]
  6. IOHK | Presentación de Bernardo David - Ouroboros & Ouroboros Praos [5]
  7. IOHK | Pizarra Cardano; Ouroboros, con el profesor Aggelos Kiayias, científico jefe [6]
  8. IOHK | Ouroboros Genesis: un protocolo blockchain de prueba de participación comprobable [7]
  9. Polkadot Wiki - Randomness: VRF [8]
  10. Cardano Forum: Ouroboros MPC [9]
  11. Typed Chronicles Blog: VRF [10]