Publicación del cálculo de recompensas de código abierto
Autor: Fabian Bormann | Jefe de equipo de Arquitectura e Ingeniería de Ecosistemas (EAE)
En el protocolo de prueba de participación (PoS) de Cardano – Ouroboros – los delegadores y los operadores de grupos de participación (SPO) reciben recompensas a medida que contribuyen a asegurar la red. Las especificaciones del libro mayor de Cardano describen fórmulas para calcular estas recompensas. Teniendo esto en cuenta y como parte de los esfuerzos de la Fundación Cardano hacia la resiliencia operativa de la red, hemos desarrollado 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 proporcionar una documentación completa relacionada con la tesorería, las reservas y las recompensas del fondo común de Cardano.
Como 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 afectar al flujo de fondos. En última instancia, aumenta la transparencia y mejora la resistencia operativa.
Reforzando la resistencia operativa con código abierto
La cadena de bloques Cardano ofrece varias características únicas y cuidadosamente estudiadas. Una de las principales es que la ada apostada permanece en los monederos de los usuarios, lo que permite realizar transferencias a otros monederos 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, como se indica en la especificación del libro mayor.
El proceso comienza con el cálculo de las nuevas reservas, las tasas, el bote total de recompensas y la tesorería. Posteriormente, se determinan las recompensas del grupo en función de este bote total de recompensas. Las recompensas del fondo se utilizan para calcular las recompensas de los delegados y operadores del fondo. Debido al requisito de cálculos basados en instantáneas, puede ocurrir que una cuenta de participación deje de estar registrada después de tomar una instantánea. Por lo tanto, la cuenta de apuestas no puede recibir recompensas una vez finalizado el cálculo y necesita reglas personalizadas para gestionar estas situaciones especiales.
Estas 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 de negocio, 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.
El código se ejecuta mediante un planificador 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. Cada nodo calculará de forma independiente las recompensas por época de manera distribuida, y las posibles recompensas se distribuirán en función del mecanismo de consenso. En particular, 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 comisiones por transacción y la expansión monetaria.
- Tasas de transacción: Al final de cada época, el valor del pozo de comisiones (la suma de todas las comisiones de transacción de esa época) pasa al pozo total de recompensas.
- Expansión monetaria: Además de las comisiones por transacción, un porcentaje fijo de la reserva se destina al mismo pozo de recompensas.
El pozo total de recompensas se divide entonces en dos segmentos. La primera parte va a la tesorería, mientras que la segunda forma el bote de recompensas de la reserva. Cabe destacar que las reservas mencionadas comenzaron originalmente con aproximadamente 14.000 millones de ada y han ido disminuyendo gradualmente.
Simultáneamente, otro cálculo computa la recompensa del fondo, utilizando los parámetros del fondo de apuestas que, junto con el rendimiento aparente del fondo, determinan las recompensas individuales del fondo de apuestas. El valor resultante constituye la base para calcular las recompensas del delegado y del operador. Es importante destacar que todos estos cálculos dependen de los parámetros del protocolo. El cálculo de las recompensas forma una parte integral del ecosistema de la cadena de bloques de Cardano, por lo que es crucial educar a la gente sobre cómo funciona. Este conocimiento permite a las personas elegir un fondo de participaciones que encaje con su visión y sus valores.
Cómo el cálculo de las recompensas mejora la transparencia
La tesorería, las reservas, las recompensas, los depósitos y las comisiones -a menudo denominados ada-pots- suman el suministro máximo de 45.000 millones de ada. Aunque cualquiera puede revisar los números de ada-pot en los exploradores de la cadena de bloques de Cardano y en Cardano DB Sync, estas plataformas sólo pueden proporcionar 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 libro mayor, emplean una implementación de fórmulas compleja y altamente distribuida.
Por esta razón, la Fundación comenzó a buscar un cálculo de recompensas independiente del nodo que implementa las fórmulas descritas en las especificaciones del ledger de Cardano y sirve como recurso de documentación para manejar casos extremos 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 fondo que ejecutaba dos fondos diferentes pero con la misma dirección de recompensa recibiera recompensas sólo por un fondo de apuestas. En este caso, la corrección del error hizo que se entregaran recompensas adicionales de la tesorería a los propietarios de grupos.
Aunque estas intervenciones manuales son totalmente conformes con la especificación del protocolo y se registran de forma transparente mediante los denominados certificados de movimiento instantáneo de recompensas (MIR), los ada-pots calculados para esta época serían incorrectos. Concretamente, si se calculara el valor de la 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 implementación de la fórmula en código abierto
El cálculo de las recompensas se integró originalmente en LedgerSync, el canal de datos basado en Java desarrollado para suministrar datos de la cadena de bloques de Cardano al nuevo explorador de Cardano de la Fundación Cardano. Sin embargo, el equipo de ingeniería de la Fundación pronto se dio cuenta de que desentrañar los múltiples componentes implicados en los diferentes aspectos del cálculo resultaría bastante complejo. La diversidad de datos de entrada, que incluye especificaciones, entradas de blog, hilos de foros y documentación de la comunidad autoalojada, significa que recopilar la información necesaria de varias fuentes para comprender exhaustivamente el flujo de ada resulta especialmente laborioso.
Por otro lado, la publicación abierta del cálculo de las recompensas puede facilitar la inspección, revisión y verificación públicas del algoritmo y del código utilizado para determinar cómo se distribuyen las recompensas. Este enfoque también ayuda a generar 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.
También actúa como una forma útil de educar a la gente sobre el sistema de tesorería descentralizado de Cardano y contribuye a proporcionar información sobre el uso de las comisiones por 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, proporciona una herramienta para la habilitación técnica, ya que expone una API que permite a los usuarios calcular valores que actualmente sólo 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.
Hacia la transparencia en el cálculo de las recompensas
Como ya se ha comentado en el ejemplo anterior, utilizar la fórmula de la siguiente época para calcular, por ejemplo, el valor de la tesorería, a veces no dará resultados precisos. Esta dinámica puede surgir cuando se transfieren fondos para pagar una propuesta de Project Catalyst o, por ejemplo, cuando se utiliza un certificado MIR para compensar recompensas de pool perdidas debido a un error. Aunque se registran de forma transparente en la cadena de bloques de Cardano a través del mecanismo de certificados MIR, estos casos extremos no siempre se documentan públicamente en detalle, 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.
El trabajo 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 asociados. La Fundación espera colaborar con los miembros de la comunidad para establecer una solución independiente de la fuente de datos. Actualmente, contamos con un proveedor de datos Koios y un proveedor de datos para archivos JSON estáticos, que sirven 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, las recompensas del fondo común y las comisiones por 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.
Descifrando el cálculo
La Fundación genera un informe con cada nueva versión del repositorio. Añadimos como métrica la diferencia absoluta media entre el cálculo y el valor real de la tesorería, y junto con la comunidad esperamos lograr una reducción de este valor a lo largo del tiempo.
Las contribuciones a este repositorio no se limitan únicamente al código; la gente puede 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 las recompensas específicas de las piscinas en épocas concretas. La Fundación ha creado el informe sólo para la tesorería, pero vemos potencial para introducir este tipo de informe para los otros constituyentes del ada-pots, así como informes detallados sobre grupos de estacas seleccionados y recompensas de miembros en el futuro.
La mayoría de las veces, el valor de la tesorería es, de media, unos 3.500 ada más alto de lo que predice la fórmula. La regla de cosecha de peñas devuelve a la tesorería los depósitos de las peñas que no se pueden reclamar, como cuando una peña se retira y la dirección de la apuesta asociada ya se ha dado de baja. Además, cada fondo 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 de la aplicación actual deberían reducir la diferencia media absoluta.
La Fundación ya ha tenido cierto éxito al abordar los fundamentos del cálculo e identificar las 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 norma Pool Reap, así como añadir recompensas limitadas a la tesorería, incorporar certificados MIR y dirigir 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 resultaría beneficioso disponer de un consumidor con alcance para las comisiones, los fondos retirados, las cuentas de estaca dadas de baja, las actualizaciones de fondos y más. Esta estructura permitiría realizar cálculos dinámicos basados en el cálculo anterior.
Sin embargo, si se produjera otra incógnita en el cálculo que condujera 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 sobre problemas.
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 su opinión inicial. Acogieron favorablemente 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 aportaría un valor suplementario.
Un enfoque de código abierto siempre enriquece el ecosistema, ofreciendo beneficios mutuos a todas las partes implicadas, al tiempo que fomenta la transparencia y mejora la probabilidad de adopción generalizada de la tecnología blockchain. La Fundación Cardano, por lo tanto, planea continuar abriendo repositorios y soluciones con vistas a promover la madurez del código abierto de Cardano.
Traducción al Español por Martín Ungar @LatinStakePools
Texto original: Releasing an open source rewards calculation