🇪🇸 ¿Cómo funciona el protocolo Ouroboros?

:es: Traducción al español de How Ouroboros Proof of stake works?

Publicado por Carlos López de Lara en su blog de Medium, el 8 de Mayo de 2019.

Las cadenas de bloques requieren un mecanismo de acuerdo entre los participantes de la red sobre cómo añadir nuevas transacciones al ledger. Este mecanismo se conoce como protocolo de consenso.

El objetivo del protocolo de consenso es asegurar que sólo se adopte y se siga una cadena, de lo contrario, el sistema colapsaría inmediatamente.

El algoritmo de consenso de la prueba de trabajo

Bitcoin implementó un algoritmo de consenso llamado Prueba de Trabajo. En este protocolo, para añadir un nuevo bloque a la cadena de bloques, el nodo que lo intenta debe proporcionar una prueba de trabajo, que se expresa mediante la solución de un rompecabezas matemático. Este proceso se conoce como minería.

El nodo que resuelve el puzzle tiene derecho a crear un nuevo bloque, y es recompensado por ello.

Este esquema pone a todos los nodos en una carrera, y como sólo un nodo es recompensado, se desperdicia mucha potencia computacional y energía eléctrica.

Estos residuos han suscitado preocupación por el impacto medioambiental de Bitcoin. Actualmente, el proceso minero de Bitcoin consume tanta energía como países como Holanda o Islandia.

Además de las preocupaciones medioambientales, el sistema de recompensas del algoritmo de prueba de trabajo también ha llevado a la centralización de la red Bitcoin. Hasta el 75% de la potencia de cálculo de la red Bitcoin se encuentra en China. Y un solo operador, Bitmain, controla más del 40% de la tasa de hash de la red.

El problema subyacente es que Bitcoin hace una clara distinción entre los usuarios reales de la red y los mineros. La tenencia de Bitcoins no otorga ningún control sobre la red, ni ningún poder sobre las decisiones relativas a la evolución del sistema. El mismo es controlado por un pequeño grupo de desarrolladores y mineros.

Ouroboros, un algoritmo de consenso de prueba de participación

En Ouroboros, no hay una carrera entre las partes interesadas para producir un bloque. En su lugar, un líder del intervalo (slot) es seleccionado al azar, proporcionalmente a la cantidad de tokens que posea (stake), para tener la oportunidad de crear un nuevo bloque.

Así que no es el poder lo que te da la oportunidad de producir un nuevo bloque (y ser recompensado por ello), es el stake lo que aumenta las posibilidades de ser elegido.

Dado que no hay una carrera para minar un bloque, no hay desperdicio de energía ni de recursos computacionales. En ese sentido, Ouroboros es un protocolo más eficiente y económico que el protocolo de Bitcoin, manteniendo todas las garantías de seguridad.

¿Qué pasa si no estás en línea? (piscinas de estacas)

Para generar un bloque hay que estar en línea, pero pedir a todos que estén en línea en todo momento es poco práctico y poco realista. Es por ello que Ouroboros introduce la figura de Participación Delegada. Como parte interesada, puedes delegar tu participación a un tercero para que actúe en tu nombre siempre que sea elegido líder del intervalo.

A estos delegados se les conoce como stake pools. Son miembros de la comunidad que se comprometen a ejecutar el protocolo en tu nombre, y a estar en línea casi el 100% del tiempo.

Una cosa importante que hay que tener en cuenta es que sólo delegas tus derechos para participar en el protocolo, no sus tokens reales. Tus ADA aún está seguras y bajo tu control en tu billetera, y los fondos no serán bloqueados, por lo que incluso puedes realizar transacciones.

¿Qué hay de los incentivos?

Las partes interesadas que crean bloques son incentivadas a participar en el protocolo mediante el cobro de comisiones por transacción. Pero Ouroboros no incentiva a las partes interesadas a invertir recursos computacionales para crear los bloques. Más bien, prefiere la disponibilidad y la verificación de transacciones.

Las recompensas provienen de dos fuentes: las comisiones por transacción y los fondos extraídos de la reserva de ADA.

En Ouroboros, los incentivos no dependen de los bloques, sino que las recompensas de un ciclo (epoch) se recogen de un fondo de reserva y se distribuyen entre las partes delegantes y los stake pools que participaron durante los intervalos (slots) de forma proporcional a su participación.

En el caso de los stake pools, cada pool líder obtiene una fracción de las recompensas para cubrir sus costes operativos y un margen de beneficio. El resto se distribuye entre los miembros del pool líder, de forma proporcional a la participación que han deelgado al mismo.

Se puede elegir un stake pool diferente, o actuar por cuenta propia, en cualquier momento.

¿Y si por alguna razón se produce una bifurcación?

Dado que las partes interesadas no siempre están en línea, van y vienen (también conocida como disponibilidad dinámica), y a veces están fuera de línea durante largos períodos, es importante que puedan volver a sincronizarse con la cadena correcta cuando vuelvan a estar en línea.

La característica clave de Ouroboros Génesis es que, gracias a una única regla de selección de la cadena, permite a las partes nuevas, o las que se unen de nuevo, sincronizarse con la “cadena buena” con sólo una copia confiable del bloque genesis. Esto hace que el protocolo sea seguro contra el llamado “ataque de largo alcance” (long-range attack).

Aleatoriedad autogenerada

Hacer que la selección del líder del intervalo sea justa y segura procedimiento de staking requiere una fuerte dosis de aleatoriedad.

El protocolo Ouroboros (específicamente Ouroboros Praos y Ouroboros Genesis) incorpora una característica llamada Global Random Oracle que produce una aleatoriedad distinta en cada ciclo.

Esto se logra mediante la implementación de una Función Aleatoria Verificable (Verifiable Random Function). Cuando se evalúa con la llave de un stake pool, devuelve un valor aleatorio que se almacena en cada bloque producido. El hashing de todos los valores del ciclo anterior se convierte en la semilla aleatoria para el procedimiento de staking. La propia cadena de bloques se convierte en su fuente de nueva aleatoriedad.

Por eso el protocolo se llama Ouroboros, la serpiente que se come su propia cola.

Promoviendo la descentralización

Finalmente, el mecanismo de incentivos de Ouroboros promueve la descentralización del sistema de una manera mejor que la Prueba de Trabajo (PoW), porque Ouroboros considera dos escenarios clave:

  • Por un lado, un stake pool sólo puede actuar como delegado si representa a un cierto número de partes interesadas cuya participación conjunta supera un determinado umbral, por ejemplo, el 0,1% de toda la participación en la cadena de bloques. Esto evita un ataque de fragmentación, donde alguien intenta afectar el funcionamiento del protocolo aumentando la población de delegados.
  • Al mismo tiempo, cuando la participación agregada de un stake pool crece más allá de un cierto umbral, las recompensas se vuelven constantes. Esto hace que dicho pool en particular sea menos atractivo, ya que las partes interesadas no estarían maximizando sus recompensas. Por ejemplo, si el umbral se fija en el 1%, una stake pool con una participación del 2% obtendría las mismas recompensas que otra con una participación de sólo el 1%.

Todas estas funcionalidades convierten a Ouroboros en la mejor tecnología PoS hasta la fecha. Y su implementación se encuentra exclusivamente en la cadena de bloques de Cardano.

¿Cómo funciona el protocolo Ouroboros?


Diagrama del protocolo Ouroboros Genesis

1 - El tiempo se divide en ciclos (epochs) e intervalos (slots), y comienza en el bloque Genesis. Sólo el líder de un intervalo puede firmar un bloque para dicho intervalo en particular.

2 - Registro: Lo primero que un usuario debe hacer para participar en el protocolo es registrarse a la red, para sincronizar con el ledger.

  • El reloj global indica el intervalo actual.
  • El Oráculo Aleatorio Global (Global Random Oracle) produce valores aleatorios (v) y los entrega al usuario.

3 - Procedimiento de staking:

3.1 - Al principio de cada ciclo, los participantes obtienen -de la cadena de bloques- la distribución del stake del último bloque de 2 ciclos anteriores. Por ejemplo, si el ciclo actual es el 100, la distribución del stake utilizada es la misma que en el último bloque del ciclo 98.

3.2 - Oráculo Aleatorio Global: Es una función de hashing que toma los valores aleatorios “v” (incluidos en cada bloque por el líder del intervalo para este propósito) de los primeros ⅔ de los intervalos del ciclo anterior y los hash juntos, y los usa como la semilla aleatoria para seleccionar los líderes del intervalo.

3.3 - En cada intervalo los participantes evalúan la Función Aleatoria Verificable (Verifiable Random Function - VRF) con su clave secreta. Si el valor de salida (v) está por debajo de un determinado umbral, el pool se convierte en el líder del intervalo.

4 - Certificado: La VRF produce dos salidas: un valor aleatorio (v) y una prueba (π) que el líder del intervalo incluirá en el bloque que produce para certificar que es el líder legítimo de ese intervalo en particular.

5 - El líder del intervalo realiza las siguientes tareas:

5.1 - Obtiene las transacciones a incluir en su bloque.
5.2 - Incluye en su bloque el valor aleatorio (v) y la prueba (π) obtenida a partir de la salida de la VRF.
5.3 - Antes de crear el bloque, genera una nueva llave secreta llamada Firma de la Llave-Evolutiva (Key-evolving Signature). La llave pública sigue siendo la misma, pero la llave secreta se actualiza en cada paso y se borra la llave antigua. Es imposible falsificar firmas antiguas con llaves nuevas. Y también es imposible derivar llaves anteriores a partir de otras nuevas.
5.4 - Finalmente, transmite el nuevo bloque a la red.

6 - Las recompensas obtenidas por los líderes de intervalos se calculan al final del ciclo. Las recompensas provienen de las comisiones por transacción y de los fondos de la reserva de ADA.

¿Qué sucede en el caso de que haya una bifurcación en la cadena?

Un aspecto clave del procedimiento descrito anteriormente es que, de vez en cuando, producirá intervalos sin un líder o intervalos con varios líderes. Esto significa que los nodos pueden recibir cadenas válidas de múltiples fuentes. Para determinar qué cadena adoptar, cada parte reúne todas las cadenas válidas y aplica la regla de selección de cadena. Lo mismo hacen los usuarios que han estado desconectados durante un tiempo y necesitan sincronizarse con la cadena.

En primer lugar, el usuario utiliza el reloj global para asegurarse de que todos los parámetros de tiempo relevantes, ciclo, intervalo, etc., están actualizados.

Luego filtra todas las cadenas válidas (cadenas cuyas firmas son consistentes con el bloque génesis y con las claves registradas por la Firma de la Llave-Evolutiva, la Función Aleatoria Verificable y el Oráculo Aleatorio Global.

Finalmente, aplica la regla de selección de cadena: se elije la cadena más larga, siempre y cuando crezca más rápidamente (sea más densa) en los intervalos que siguen al último bloque común de ambas cadenas competidoras.

Esta regla de selección de cadena permite que una parte que se une a la red en cualquier momento se sincronice con la cadena de bloques correcta basándose sólo en una copia confiable del bloque génesis, y observando cómo crece la cadena durante un tiempo suficiente.

Nota: Este procedimiento describe a Ouroboros Genesis tal como aparece en el documento original. Su implementación posterior puede cambiar o ser adaptada.

5 Likes