Haciendo Stellar

Haciendo la comunidad de Stellar Network más grande de hablahispana

Haciendo la comunidad de Stellar Network
más grande de hablahispana

Modo Pull: la Última Iniciativa para Aumentar las TPS de Stellar

TPS, o “transacciones por segundo”, es uno de los datos de los que más se habla en blockchain. Los periodistas lo utilizan para comparar distintas cadenas de bloques. Los responsables políticos especulan sobre él. Los degenerados de Twitter se pelean por él.

Es una métrica de la cantidad de trabajo que las cadenas de bloques pueden gestionar realmente, y una alta tasa de TPS ayuda a que las transacciones a través de una cadena de bloques sean más deseables que el uso de los carriles financieros tradicionales. Lo que hace que Stellar sea óptimo para los pagos se debe en parte a su competitiva tasa de TPS. Mantener esa tasa, e incluso mejorarla, ha sido durante mucho tiempo un objetivo de la comunidad Stellar.

Actualmente, Stellar no está limitado por TPS. La tasa máxima de la red está fijada en 200 TPS, aunque la comunidad podría aumentarla si los validadores votaran a favor. Y aunque las transacciones alcanzan ocasionalmente esa tasa de 200 TPS, la cadena de bloques sigue siendo capaz de resolver las transacciones pendientes de validación en unos pocos segundos, pero no en ese mismo segundo.

Pero, como siempre, Stellar sigue aspirando a las estrellas. Siempre es preferible que la tecnología sea capaz de gestionar más flujos de datos de los que necesita, por lo que muchas versiones principales y actualizaciones de protocolo se centran en aumentar la velocidad de las transacciones. Una de esas versiones, la 19.4.0, introdujo el modo pull, una función que todos los validadores empezaron a utilizar a partir de la versión 19.7.0. Estas versiones prepararon la red para una importante actualización del protocolo destinada a aumentar la capacidad de la red.

Es importante que todos los validadores sepan qué pretenden conseguir estas versiones. De este modo, pueden verificar que la versión ha cumplido realmente su objetivo y ofrecer mejoras o señalar fallos. Veamos cómo se diseñó el modo pull y cómo ayuda a mejorar el TPS de Stellar.

Si te gusta más aprender de forma visual, también puedes ver la presentación que Hidenori Shinohara, ingeniero de SDF, hizo el año pasado en Meridian sobre el modo pull:

Propagación de transacciones 

El protocolo de consenso de Stellar es muy complejo (si no entiendes cómo funciona, te recomiendo que leas el white paper antes de continuar). En resumen: los validadores de la red deben mantener un registro histórico completo de todas las operaciones que han tenido lugar en la red Stellar para que todo siga funcionando. También deben llegar a un acuerdo entre ellos para – lo has adivinado – validar una nueva transacción y cerrar el ledger.

Para ello, los validadores deben informarse mutuamente sobre las transacciones. Lo hacen a través de algo llamado “difusión de transacciones”, que a veces también se denomina “multidifusión” o “inundación” de transacciones. No se equivoque: aunque la difusión implica que una entidad central envía datos a todos los demás, eso no es lo que ocurre aquí. Por el contrario, cada nodo transmite datos sobre transacciones a otros nodos de la red, sin que ninguno de ellos sea el difusor central de la información.

Como no hay un único nodo que transmita información sobre las transacciones, el poder está descentralizado. La descentralización es algo bueno, porque significa que ningún nodo tiene poder para bloquear transacciones. El inconveniente, sin embargo, es que hay una cantidad excesiva de información redundante que se difunde entre los nodos. Hay tantos nodos que se comunican entre sí las transacciones, que a veces un solo nodo recibe información sobre una transacción más de 30 veces.

La redundancia puede ayudar a que un sistema sea estable, pero ese nivel de redundancia es innecesario. Requiere una cantidad excesiva de CPU, memoria y ancho de banda para funcionar, lo que ralentiza la velocidad de la red. En otras palabras, la difusión de transacciones era un factor limitante en el TPS de Stellar antes de que la versión 19.7.0 del núcleo impusiera el modo Pull a todos los validadores.

Espera, ¿entonces qué es el Modo Pull? 

Imagina que quieres enviar un regalo de cumpleaños a alguien a quien todavía no conoces bien, tal vez un compañero de tu nuevo trabajo. No sabes si ya tiene en su baúl de peluches el peluche que quieres comprarle. Ni siquiera sabes si les gustan los peluches de gran tamaño. ¿Y qué haces?

Haces algunas preguntas antes de salir a comprar el peluche y regalárselo.

Ese es el concepto de Pull Mode: “pregunta antes de enviar”. Aunque parece bastante obvio para los humanos, no lo es tanto para los validadores de una red descentralizada. Pero tras la implantación del Modo Pull, los validadores empezaron a enviarse entre sí una representación de una transacción para comprobar si un validador ya la conoce antes de enviar la transacción en sí. 

Esa representación de la transacción es un hash: una notación abreviada de la transacción que se utiliza en este contexto porque requiere menos potencia de cálculo para transmitirla y leerla. La transacción en sí sólo se envía si el nodo receptor no tiene ya un registro de ella y si acepta la solicitud.

El Modo Pull se probó en Stellar Supercluster, una plataforma de simulación diseñada por SDF para evaluar los cambios en Stellar Core. Puedes leer más sobre su diseño aquí. En resumen, simula una red distribuida dentro de unos pocos ordenadores, pero con más sofisticación que ejecutar una simple prueba en un ordenador portátil. Está diseñado para ser un entorno para probar cómo se comportará el código en Mainnet, sin empujarlo directamente a Mainnet y arriesgarse a cualquier interrupción.

El modo Pull se probó de tres formas: en una versión de Stellar Supercuster pensada para comportarse como una red realista, en una versión de Stellar Supercluster con otras configuraciones potenciales y en una versión que permitía realizar pruebas límite, inundando la red con transacciones hasta que se rompe para determinar un TPS máximo absoluto. 

Aunque los resultados de Stellar Supercluster son todos relativos – es decir, pueden compararse con otras simulaciones realizadas en Stellar Supercluster, pero no con la Mainnet u otras blockchains públicas – los resultados mostraron que Pull Mode aumenta el TPS máximo en un 72%. Esto se debe probablemente a que el modo Pull disminuye la potencia de cálculo necesaria para validar una transacción.

Seguimiento

Entonces, ¿qué deberías hacer con esta información? Bueno, como he dicho, el Modo Pull ya está activo – se introdujo el otoño pasado, y se activó para todos los nodos validadores con una versión del núcleo la semana pasada. Eso significa que si ejecutas un nodo validador, tu nodo está utilizando el Modo Pull. Y si simplemente realizas transacciones en la red o construyes sobre ella, simplemente estás cosechando los beneficios (felicidades, de nada). 

Pero una comunidad blockchain próspera no es pasiva. Es importante seguir participando en las actualizaciones, para que cuando veas el código, entiendas realmente lo que consigue. Gracias al Pull Mode, por ejemplo, deberías ver que ejecutar un nodo requiere menos ancho de banda, memoria y CPU que antes. 

¿Tienes ideas sobre cómo mejorar el modo Pull u otros aspectos de Stellar Core? Envía tu feedback a Github.