Actualización de Herramientas de Desarrollo de æternity: Middleware

Foto: Alex wong

Para los equipos de æpps y herramientas de desarrollo de æternity, nuestras principales prioridades son las experiencias de usuario y desarrollador. Y en el caso de las herramientas de desarrollador, nuestros usuarios también son desarrolladores.

Después del lanzamiento de la red de Roma, nuestro objetivo no es solo optimizar, monitorear y mejorar la red æternity, sino también hacer crecer el ecosistema de varias maneras. Una de estas formas es crear herramientas que ayuden a todos a interactuar con la red.

El propósito principal de un nodo de æternity es mantener la cadena y establecer un consenso con otros nodos. Pero también necesitamos consultar la cadena de maneras que no sean tan simples de responder. Si el nodo ofreciera todas las consultas que necesitamos, interferiría con este propósito principal.

Por ejemplo, Blockchain Explorer necesita consultar key blocks, microbloques y transacciones. En el caso de un key block con 50 microbloques y 1,000 transacciones, esto significa que para mostrar los detalles de un key block es posible que tengamos que realizar más de mil consultas. Podemos evitar el estrés de los nodos y ofrecer a nuestros usuarios un rendimiento interactivo más rápido al almacenar en caché la blockchain en una base de datos SQL y atender las consultas más simples desde allí.

Construido como necesidad

El middleware es una capa de almacenamiento en caché que nos permite interactuar con la blockchain de æternity de manera más eficiente. Habían 3 razones principales para construirlo:

  • Queríamos acceder a la información del nodo más rápidamente para que el explorador de æternity funcione mejor.
  • El middleware facilita la consulta de un nodo y agrega consultas adicionales, que devuelven información muy útil.
  • Podemos almacenar el historial de la blockchain en una base de datos PostgreSQL para un fácil dump/import en otros sistemas.

Cómo funciona

El middleware se encuentra entre los clientes y el nodo. Cuando se ejecuta inicialmente, llena su base de datos extrayendo todos los key blocks y microbloques y todas las transacciones del nodo, y las almacena en su base de datos. Cuando está actualizado, sondea regularmente el nodo para encontrar nuevos bloques y recorre la cadena para verificar que su base de datos es correcta. De esta forma, se puede recuperar de los forks.

El middleware está escrito en Rust, por su alta velocidad y seguridad.

Queries

A continuación puedes ver los queries que están disponibles cuando se consulta un nodo directamente, pero se atienden más rápido a través del middleware.

/key-blocks/height/<height>
/transactions/<hash>
/generations/current
/micro-blocks/hash/<hash>/transactions
/micro-blocks/hash/<hash>/header
/key-blocks/current/height
/micro-blocks/hash/<hash>/transactions/count

Además de los queries anteriores, el middleware ofrece los siguientes queries que agregan información del nodo y no están disponibles en ningún otro lugar.

/transactions/account/<account>
/transactions/interval/<from>/<to>
/key-blocks/height/<height>/gas-price

Esta colección crecerá con el tiempo a medida que añadamos nuevas funcionalidades.

Cómo usarlo

Para usar el middleware puedes clonar el repositorio y ejecutarlo localmente. También puedes conectarte a él en http://mdw.aepps.com:8080

Ya hay documentación preliminar en el repositorio de GitHub, aunque somos muy conscientes de que necesita mejoras. Además, si eres un desarrollador y tienes requisitos que el middleware podría cumplir, te recomendamos que levantes un issue en GitHub.

¿Preguntas?

Si tienes alguna pregunta sobre el middleware, no dudes en publicarlo en el Foro en la categoría de Desarrollo.

En el Futuro

Tenemos muchas más actualizaciones interesantes de los equipos æpps y desarrollo de herramientas. ¡Como siempre, puedes comunicarte con nosotros usando los enlaces de abajo!


¿Interesado en æternity? Síguenos:

GitHub | Forum | Reddit | Twitter | YouTube| LinkedIn


Leave a Reply

Your email address will not be published. Required fields are marked *