En el protocolo proof-of-stake (PoS) de Cardano -Ouroboros- los delegadores y los operadores de stake pools (SPO) reciben recompensas a medida que contribuyen a asegurar la red. Dentro de las especificaciones del ledger de Cardano se establecen fórmulas para calcular estas recompensas. Con esto en mente y como parte de los esfuerzos de la Fundación Cardano hacia la resiliencia operativa de la red, hemos puesto en marcha un cálculo de recompensas independiente del nodo. El proyecto pretende conseguir un medio para realizar y validar el cálculo de recompensas que sea independiente de una única implementación. Asimismo, pretende ofrecer una documentación exhaustiva relacionada con la tesorería, las reservas y las recompensas del pool de Cardano.
Al ser un repositorio de código abierto bajo licencia MIT, la iniciativa también profundiza en el compromiso de la Fundación con la madurez del código abierto y pretende recabar contribuciones del ecosistema en general. Por último, el cálculo puede servir igualmente como herramienta educativa, por ejemplo en relación con la forma en que los cambios en los parámetros del protocolo podrían repercutir en el flujo de fondos. En definitiva, refuerza la transparencia y mejora la resistencia operativa.
Reforzar la resistencia operativa con código abierto
La blockchain Cardano presenta varias características únicas y cuidadosamente estudiadas. Una de las principales es que la ada staked permanece en los wallets de los usuarios, lo que permite realizar transferencias a otros wallets en cualquier momento. Aunque esta funcionalidad tiene ventajas, también presenta retos a la hora de implementar los cálculos de recompensas. Esto hace necesario el uso de instantáneas para el cálculo de recompensas, tal y como se describe en la especificación del ledger.
Todo el proceso comienza con el cálculo de las nuevas reservas, las tarifas, el bote total de recompensas y la tesorería. Luego, se determinan las recompensas del pool basándose en este bote total de recompensas. Las recompensas del pool se utilizan para calcular las recompensas de los delegados del stake pool y de los operadores del stake pool. Dado que los cálculos se basan en instantáneas, puede ocurrir que una cuenta de estaca deje de estar registrada después de tomar una instantánea. Por lo tanto, la cuenta de staking no puede recibir recompensas una vez finalizado el cálculo y necesita reglas personalizadas para manejar esas situaciones especiales.
Dichas reglas se distribuyen de forma natural por toda la base de código, ya que el propio proceso de cálculo se distribuye en el tiempo. El repositorio cardano-ledger agrega la mayor parte de la lógica empresarial, junto con la documentación pertinente. Algunos componentes adicionales necesarios para este proceso pueden encontrarse en el propio nodo cardano o en el repositorio ouroboros-network.
La ejecución del código se realiza mediante un programador basado en ranuras, que puede resultar difícil de leer y seguir para quienes no estén familiarizados con el código base. Aunque se han introducido ciertas optimizaciones para mejorar el rendimiento del cálculo, estas optimizaciones pueden hacer que el código sea menos fácil de entender. El cálculo de recompensas de código abierto pretende abordar estos retos manteniendo las sólidas características nativas de la red Cardano.
El mecanismo de recompensas de Cardano
La especificación del ledger de Cardano incluye múltiples ecuaciones que definen colectivamente el flujo de ada al final de cada época. Los nodos calcularán de forma independiente las recompensas por época de forma distribuida, distribuyendo después las posibles recompensas en función del mecanismo de consenso. Cabe destacar que ninguna entidad completa este cálculo ni puede retener recompensas. Estas recompensas ada se calculan cada época y derivan de la interacción de dos fuentes: las tarifas de transacción y la expansión monetaria.
- Tarifas de transacción: Al final de cada época, el valor del bote de tarifas (la suma de todas las tarifas de transacción de esa época) pasa al bote total de recompensas.
- Expansión monetaria: Además de las tarifas de transacción, un porcentaje fijo de la reserva se destina al mismo bote de recompensas.
El fondo de recompensas total se divide entonces en dos segmentos. La primera parte va a la tesorería, mientras que la segunda forma el bote de recompensas de stake pools. Cabe destacar que las reservas mencionadas comenzaron originalmente con aproximadamente 14.000 millones de ada y han disminuido gradualmente.
Paralelamente, otro cálculo computa la recompensa del pool, utilizando los parámetros del stake pool que, junto con el rendimiento aparente del pool, determinan las recompensas individuales del stake pool. El valor resultante constituye la base para calcular las recompensas de los delegadores y de los operadores. Es importante señalar que todos estos cálculos dependen de los parámetros del protocolo. El cálculo de las recompensas forma parte integral del ecosistema blockchain Cardano, por lo que es crucial educar a las personas sobre su funcionamiento. Este conocimiento capacita a las personas para elegir un stake pool que encaje con su visión y sus valores.
Cómo el cálculo de recompensas mejora la transparencia
La tesorería, las reservas, las recompensas, los depósitos y las tarifas -a menudo denominados ada-pots- suman la oferta máxima de 45.000 millones de ada. Aunque cualquiera puede revisar las cifras de ada-pot en Cardano blockchain explorers y en Cardano DB Sync, estas plataformas solo pueden suministrar el resultado final de los cálculos, sin ningún dato subyacente disponible para confirmar cómo se calcularon. Aunque estos cálculos existen en el código Haskell del nodo y en los repositorios del ledger, emplean una implementación de fórmulas compleja y altamente distribuida.
Por ello, la Fundación comenzó a perseguir un cálculo de recompensas independiente del nodo que implementa las fórmulas esbozadas en las especificaciones del ledger de Cardano y sirve como recurso de documentación para manejar los casos límite en los que la fórmula especificada no se alinea con la implementación real. Por ejemplo, en un caso, un error en la implementación del nodo provocó que el propietario de un pool que gestionaba dos pools diferentes pero con la misma dirección de recompensa recibiera recompensas solo por un stake pool. En este caso, la corrección del fallo hizo que se entregaran recompensas adicionales de la tesorería a los propietarios de pools.
Aunque estas intervenciones manuales son totalmente conformes con la especificación del protocolo y se registran de forma transparente a través de las llamadas recompensas instantáneas de movimiento (MIR)) certificados, los ada-pots calculados para esta época serían incorrectos. Concretamente, si se calculara el valor de tesorería con la fórmula simple para esta época, resultaría evidente que no coincide con la cantidad real de ada que se posee. En resumen, sin el conocimiento de tales acontecimientos extraordinarios, la discrepancia entre la fórmula y el valor de tesorería resultaría difícil de rastrear y habría menos fondos en la tesorería de los que indica la fórmula.
Ventajas de la aplicación de la fórmula en código abierto
Originalmente, el cálculo de las recompensas se integró en LedgerSync, la canalización de datos basada en Java desarrollada para suministrar al [nuevo explorador de Cardano] de la Fundación Cardano (Cardano Blockchain Explorer) los datos de la blockchain Cardano. No obstante, el equipo de ingenieros de la Fundación pronto se dio cuenta de que desenredar los múltiples componentes implicados en los distintos aspectos del cálculo resultaría bastante complejo. La diversidad de los datos de entrada, que incluyen especificaciones, artículos de blogs, hilos de foros y documentación de la comunidad autoalojada, hace que reunir la información necesaria de varias fuentes para comprender exhaustivamente el flujo de ada resulte especialmente laborioso.
En cambio, hacer público el cálculo de las recompensas puede permitir la inspección, revisión y verificación públicas del algoritmo, así como del código utilizado para determinar cómo se distribuyen las recompensas. Este enfoque ayuda igualmente a fomentar la confianza en la infraestructura de Cardano al servir como un repositorio que incluye un gráfico interactivo que explica el flujo de ada al final de una época, además de informes que destacan las diferencias entre la fórmula y el valor real.
Asimismo, sirve para informar a las personas sobre el sistema de tesorería descentralizado de Cardano y contribuye a ofrecer información sobre el uso de las tarifas de transacción. Como repositorio de código abierto, el cálculo de recompensas involucra aún más a la comunidad, impulsando a todos a contribuir con tanta documentación como sea posible. Además, ofrece una herramienta de habilitación técnica, ya que expone una API que permite a los usuarios calcular valores que actualmente solo están disponibles con Cardano DB Sync, una herramienta Haskell de IOG para rastrear datos de nodos y hacerlos accesibles en una base de datos PostgreSQL.
Trabajar hacia la transparencia del cálculo de recompensas
Según se ha comentado en el ejemplo de caso límite anterior, utilizar la fórmula de la siguiente época para calcular, por ejemplo, el valor de la tesorería, a veces no arrojará resultados precisos. Esta dinámica puede surgir cuando se transfieren fondos para pagar una propuesta de Proyecto Catalyst o, por ejemplo, cuando se utiliza un certificado MIR para compensar las recompensas del pool perdidas debido a un fallo. Aunque se registran de forma transparente en la blockchain Cardano a través del mecanismo del certificado MIR, estos casos límite no siempre se documentan en detalle públicamente, lo que provoca una falta de antecedentes históricos y, por lo tanto, compromete significativamente la transparencia, lo que a su vez genera incertidumbre y disminuye la confianza. El establecimiento de una documentación adecuada puede evitar esto, permitiendo futuras revisiones y auditorías, así como mejoras en la documentación, reforzando así la credibilidad y la resistencia operativa de Cardano.
La labor de la Fundación comenzó con la implementación de la fórmula y la documentación de los casos límite, pero aún quedan algunas incógnitas por resolver. Por ejemplo, es necesario contabilizar los primeros fondos Catalyst o los certificados MIR anteriores a la época 271, ya que no tienen metadatos adjuntos. A través de la fuente abierta de esta fórmula, la Fundación espera colaborar con los miembros de la comunidad para establecer una solución independiente de la fuente de datos. Actualmente, disponemos de un proveedor de datos Koios y un proveedor de datos para archivos JSON estáticos, que ofrecen datos agregados. Además, un indexador de alcance -posiblemente basado en Yaci-Store, una implementación de almacén de datos de Cardano basada en Java- resultaría útil para garantizar la máxima transparencia en el cálculo de la recompensa.
Esta iniciativa también afecta en última instancia al valor de tesorería, que Cardano utiliza para financiar el desarrollo descentralizado del ecosistema, pool de recompensas y tarifas de transacción. En consecuencia, afecta directamente a aspectos que deberían preocupar a todos los usuarios de Cardano, incluido el despliegue de recompensas en el ecosistema del que forman parte. Al mismo tiempo, todos los contribuyentes, ya sea compartiendo código o información, desempeñan un papel importante a la hora de aportar más confianza y transparencia al ecosistema, mejorando así las condiciones para una mayor adopción de blockchain.
Descifrar el cálculo
La Fundación genera un informe junto a cada nueva versión del repositorio. Incluimos la métrica de la diferencia absoluta media entre el cálculo y el valor real de la tesorería como una herramienta adicional, y junto con nuestra comunidad, trabajamos para lograr una disminución progresiva de este valor a lo largo del tiempo.
Las contribuciones a este repositorio no se limitan únicamente al código; las personas pueden añadir datos, enlaces, documentación y opiniones sobre las diferencias sustanciales observadas en algunas épocas. El propio repositorio sigue un enfoque basado en pruebas, por lo que tiene sentido empezar creando pruebas, como las relacionadas con recompensas de pool específicas en épocas concretas. La Fundación ha creado el informe solo para la tesorería, pero vemos potencial para introducir este tipo de informe para los demás componentes del ada-pots, así como informes detallados sobre determinados stake pools y recompensas de los miembros en el futuro.
La mayoría de las veces, el valor de la tesorería es en promedio unos 3.500 ada más alto de lo que predice la fórmula. La regla de cosecha de pools dirige los depósitos de pools no reclamables -como cuando un pool se retira y la dirección de stake asociada ya se ha dado de baja- de nuevo a la tesorería. Además, cada pool puede ganar un valor ada máximo por cada época. La tesorería también dirige cualquier diferencia entre el valor calculado por la fórmula y el valor máximo. Estos ajustes en la aplicación actual deberían reducir la diferencia media absoluta.
La Fundación ha logrado avances significativos al abordar los conceptos fundamentales del cálculo y al identificar las posibles explicaciones de algunas de estas discrepancias. No obstante, sería valioso disponer de documentación exhaustiva para cada transacción de salida de la tesorería.
Los próximos pasos también implican la aplicación de la regla Pool Reap, así como la adición de recompensas limitadas a la tesorería, la incorporación de certificados MIR y el envío de las recompensas no reclamadas a las reservas. Además, aunque actualmente con cada nueva época volvemos a un valor conocido para evitar errores de reenvío de épocas anteriores, en el futuro sería beneficioso disponer de un consumidor con alcance para las tarifas, los pools retirados, las cuentas de stake dadas de baja, las actualizaciones de los pools, etc. Esta estructura permitiría realizar cálculos dinámicos basados en el cálculo anterior.
No obstante, si existiera alguna otra incógnita en el cálculo que diera lugar a una disparidad entre el cálculo y los valores reales, podría llevarse a cabo un examen en profundidad de la implementación Haskell en los repositorios cardano-node y cardano-ledger. Este escenario tendría como objetivo identificar los cambios que explican las discrepancias explorando el historial de commits y las discusiones de issues.
De cara al futuro, la Fundación pretende utilizar los informes y gráficos interactivos procedentes de este repositorio para explicar la tokenómica ada a reguladores, empresas e instituciones. En septiembre, también nos reunimos con los equipos de Koios CNTools para presentarles el repositorio y recabar sus comentarios iniciales. Acogieron con satisfacción la iniciativa, así como la idea de implementar y documentar el cálculo de recompensas, y señalaron que el hecho de que otros desarrolladores portaran esta implementación de referencia Java a otros lenguajes ofrecería un valor suplementario.
Un enfoque de código abierto siempre enriquece el ecosistema, ya que ofrece beneficios mutuos a todas las partes implicadas, al tiempo que fomenta la transparencia y mejora la probabilidad de una adopción generalizada de la tecnología blockchain. La Fundación Cardano, por lo tanto, tiene previsto seguir abriendo repositorios y soluciones de código abierto con vistas a promover la madurez del código abierto de Cardano.
Traducción al español de “ Releasing an open source rewards calculation”, escrito por Fabián Bormann, Líder del equipo de Arquitectura e Ingeniería de Ecosistemas (EAE), en octubre 30 de 2023.
Notas del traductor
- Corchetes del traductor.
- Asuma que todo enlace apunta a un contenido en idioma inglés.
- Indica que el enlace apunta a un contenido en idioma español.