🇪🇸 Manejo del tiempo en Cardano, parte 1. Sobre Ouroboros y la importancia del determinismo

:es: Traducción al español de “Time handling on Cardano, part 1. About Ouroboros and the importance of determinism”

Publicado por Arnaud Bailly en el blog de IOHK el 6 de Diciembre de 2022


El mantenimiento del tiempo en la cadena es esencial para asegurar el consenso global en un entorno blockchain. Este artículo explica cómo se gestiona el tiempo en Cardano.

Este blog es un esfuerzo de colaboración llevado a cabo por Arnaud Bailly, Michael Peyton Jones, Sebastian Nagel, Polina Vinogradova y Brian Bush.

El tiempo es necesariamente relativo para cada participante en el sistema blockchain y es de vital importancia para apoyar y mantener las propiedades de seguridad del protocolo de consenso Ouroboros. Se espera que los bloques acuñados se propaguen a todos los nodos del sistema en el momento oportuno, por lo que el tiempo requiere la construcción de una representación globalmente aceptable para que se alcance el consenso.

Gestión del tiempo con Ouroboros

A nivel local, un nodo calcula el paso del tiempo mediante un sistema de “reloj de pared”. El código de este reloj es complicado porque la longitud del slot puede variar en el límite de una bifurcación dura, por lo que el tiempo debe calcularse cuidadosamente teniendo esto en cuenta.

El código realiza cuatro pasos para obtener el slot acutal:

  1. Espera un cierto retardo correspondiente al tiempo restante hasta el siguiente slot, o un retardo arbitrario de 60s si el slot actual es desconocido, lo que ocurre al sincronizar.
  2. Obtiene la hora actual del sistema y la convierte en un número de slot de acuerdo con la longitud del slot de la era actual.
  3. Si el nuevo intervalo es mayor que el anterior, “marca” un nuevo intervalo actual.
  4. Si lo anterior no es cierto, espera un poco más o informa de un error si la hora actual ha saltado demasiado hacia atrás.

El slot actual local se compara con el slot indicado por la punta del libro mayor del nodo. Si este último es más antiguo, se ignora porque esto significa que el nodo está sincronizando su estado con la cadena

Dado que la longitud de los slots puede cambiar en una bifurcación dura, el consenso sólo puede convertir los slots en tiempo hasta un punto fijo en el futuro -la “ventana de estabilidad”- en el que no pueden producirse bifurcaciones duras. En la práctica, la ventana de estabilidad es esencial, ya que proporciona una medida del tiempo necesario para garantizar la finalidad de las transacciones y la inmutabilidad del estado de la cadena. Durante la ventana de estabilidad, la red debe producir al menos k bloques, donde k es el número de bloques tras los cuales la cadena se vuelve inmutable. La ventana de estabilidad puede durar hasta 3k/f, lo que equivale a 36 horas con los parámetros actuales, o aproximadamente un día.

Retos actuales

Existe una limitación física fundamental a la velocidad a la que puede viajar la información: la velocidad de la luz. Esto implica que sincronizar la hora en una red de nodos lleva su tiempo.

El Protocolo de Tiempo de Red (NTP) existe para proporcionar un mecanismo de sincronización que resuelva las limitaciones de tiempo y las diferencias de medición. Por otro lado, NTP no garantiza un incremento monótono: el tiempo puede a veces saltar unos segundos o incluso horas. Los sistemas existentes que proporcionan relojes exactos, precisos y fiables a escala global están centralizados, como el reloj global proporcionado por Spanner, por ejemplo.

Actualmente, en Cardano:

  1. Los parámetros de la red están configurados de tal manera que la granularidad de los intervalos de tiempo observables (por ejemplo, el tiempo de bloque) en la cadena es de 20s, que es igual a la longitud de la slot (1s) dividido por el coeficiente de bloque f (la frecuencia de bloque esperada, 0,05). Es poco probable que estos parámetros cambien en un futuro a corto plazo.

  2. Estos 20 segundos se han determinado como el presupuesto óptimo para garantizar la seguridad del protocolo, dadas las limitaciones para replicar nuevas transacciones y bloques en toda la red (retardo TCP de 300 ms en todo el mundo, con miles de nodos). Aunque el rendimiento de los bloques podría aumentar en el futuro, es poco probable que reduzca la granularidad del tiempo observable en la cadena.

  3. La finalidad de las transacciones puede alcanzarse en aproximadamente un día, y no puede ocurrir en menos de un día, según el diseño de consenso de Ouroboros. Nótese que, aunque ya se alcanza un alto nivel de confianza en cuestión de minutos u horas, la probabilidad de que un bloque sea finalmente descartado disminuye exponencialmente con su profundidad y el número de nodos que tienen que adoptar este bloque.

Por último, a más largo plazo, está previsto sustituir el actual protocolo Ouroboros por Ouroboros Chronos. Ouroboros Chronos aborda los retos del mantenimiento del tiempo proporcionando la primera fuente de tiempo criptográfica de alta resistencia basada en tecnología blockchain.

La importancia del determinismo en un entorno blockchain

En el contexto actual, determinismo significa que una transacción determinada tiene un “efecto fijo” sobre el estado del libro mayor. Pero es importante distinguir entre los conceptos de determinismo histórico y prospectivo.

Las blockchains se basan en el principio de replicar una secuencia fija de transacciones (agrupadas en bloques) para alcanzar un consenso sobre el estado del mundo. Todas las blockchains tienen determinismo histórico, lo que significa que las transacciones de la cadena tienen un efecto fijo, pues de lo contrario los resultados de la validación de la cadena serían no deterministas, lo que rompería el consenso.

Pero pocas blockchains tienen determinismo prospectivo, lo que significa que una transacción que aún no se ha añadido a la cadena tiene un efecto fijo (o no se aplicará). Cardano sí cuenta con determinismo prospectivo (con la actual excepción de las direcciones de puntero, que se propone eliminar en este CIP). También puede encontrar más información sobre el determinismo del coste de transacción de Cardano aquí.

En las blockchains que no tienen determinismo prospectivo, los usuarios no pueden saber cuánto deben pagar por las transacciones, lo que provoca que dichos usuarios paguen de más por las transacciones. La falta de determinismo prospectivo es también la razón por la que existe el riesgo de que una transacción en tales blockchains pueda fallar y al mismo tiempo consumir mucho gas.

El poder del determinismo prospectivo

El determinismo prospectivo es una característica muy potente de Cardano, por múltiples razones:

  • Los usuarios saben, de antemano, lo que hará una transacción, por lo que no hay sorpresas. Esto es particularmente relevante para los scripts porque los usuarios saben exactamente

    • cómo se comportarán los scripts, y
    • cuánto presupuesto de ejecución se necesita.
  • Las transacciones propuestas pueden procesarse en paralelo con total seguridad. Este paralelismo es una de las razones de la velocidad de Hydra.

  • Como los usuarios saben de antemano si una transacción fallará o no, los fallos de los scripts pueden castigarse con dureza (porque nunca ocurrirán a usuarios no malintencionados)

  • En términos generales, hace que la interacción con la blockchain y su evolución sean más fáciles y predecibles.

El determinismo prospectivo de las transacciones requiere que cada parte de la validación de la transacción, incluyendo la ejecución del script, sea completamente determinista. Esta es la razón por la que Cardano no puede tener operaciones no deterministas en los scripts.

Una de las formas de conseguir el determinismo prospectivo es haciendo que el efecto de una transacción esté totalmente determinado por la propia transacción y las salidas a las que hace referencia. En el contexto de Cardano, esto se llama localidad. La localidad es también de gran beneficio para los usuarios, ya que significa que cualquiera puede saber lo que hace una transacción con sólo mirar la transacción.

La segunda parte de esta entrada de blog tratará casos de uso de gestión del tiempo en Cardano con Plutus, Marlowe y Hydra.