Las nuevas Librerías de programación de IOTA: mejores, más rápidas, más fuertes
A lo largo de los años, muchos desarrolladores de nuestro ecosistema han estado haciendo uso de nuestra libreria cliente para integrar sus aplicaciones con IOTA. Disponible en multiples lenguajes de programación, tanto proyectos impulsados por la misma comunidad como aquellos apoyados oficialmente hicieron posible que la Tangle de IOTA fuera utiliazada en muchos proyectos: Desde dispositivos IoT usando las librerías C, para aplicaciones web en Node.js, Go o Phyton.
Temprano durante el año 2020 comenzamos a hacer planes para meorar esta experiencia debido a las experiencias de años anteriores.
Hemos pensando un plan sólido y hemos decidido que el lanzamiento de Chrysalis que se centra en un producto listo y fácil de manejar para el usuario, eran el momento ideal para reemplazar nuestras librerías existentes por unas que ofrecieran soluciones más fáciles, robustas, sustentables y estandarizadas. Hoy las presentamos a la vista del nuevo amanecer de IOTA.
Los principios básicos de las nuevas librerías
Después de trabajar con las actuales librerías de programación durante varios años y apoyar a innumerables desarrolladores de la comunidad con sus proyectos, teníamos una idea bastante clara de los aspectos que podíamos mejorar.
Algunas de las cosas que escuchábamos a menudo eran afirmaciones como «Hay demasiadas cosas que necesito aprender sobre IOTA antes de poder empezar» o «La característica X sólo está soportada en el lenguaje Y».
Recopilamos todas nuestras experiencias y los comentarios de la comunidad y de las empresas y llegamos a un conjunto de principios básicos para las nuevas bibliotecas de clientes:
Bindings, una única fuente de verdad
Hasta ahora, cada lenguaje tenía su propio conjunto de características IOTA soportadas y formas de realizar ciertas tareas. Esto podía llevar a veces a la confusión entre diferentes implementaciones y claramente no era lo más óptimo.
Con las nuevas bibliotecas hemos decidido que sólo debe haber una implementación de referencia para las bibliotecas de cliente (hemos elegido Rust para esto) y todas las demás implementaciones deben seguir esa implementación de referencia en términos de nomenclatura y funcionalidad.
Para reforzar esto y para utilizar las características de seguridad y el rendimiento de Rust, decidimos que las nuevas bibliotecas deberían utilizar la referencia de Rust a través de los enlaces para asegurar exactamente el mismo comportamiento y la misma funcionalidad en cualquier lenguaje soportado. Lo que esto significa es que usted puede utilizar nuestras bibliotecas Rust directamente desde su lenguaje favorito en su sintaxis favorita, trayendo el poder y el rendimiento de nuestra biblioteca basada en Rust a su lenguaje de elección. Al momento de escribir esto, ya tenemos enlaces disponibles para Node.js y Python y estamos desarrollando activamente enlaces adicionales para Java y otros lenguajes.
De fácil uso, pero tan avanzado como pueda necesitar
Las bibliotecas anteriores se crearon pensando en la máxima flexibilidad. Literalmente, todas las opciones disponibles en el protocolo se podían utilizar desde los clientes, pero esto también significaba que había que saber mucho sobre el funcionamiento del propio protocolo antes de poder utilizarlo en toda su extensión.
Con Chrysalis hemos decidido mejorar esta experiencia y crear tantos valores predeterminados como sea posible. Anteriormente había que proporcionar manualmente la URL del nodo, convertir/codificar la transacción, configurar las opciones como «magnitud de peso mínimo» (minimum weight magnitude – MWM) y «profundidad» antes de poder utilizar las bibliotecas.
En la nueva versión, sin embargo, todo esto se proporciona por defecto bajo el supuesto de que quieres trabajar con la red principal, utilizando los parámetros por defecto para la red principal y que estás codificando tus datos en bytes (utf-8). Esto resulta en una biblioteca mucho más fácil de usar para todos, incluso si nunca has trabajado con IOTA antes.
Si no proporcionas un argumento específico se utiliza el predeterminado; Si no quieres el comportamiento predeterminado puedes sobrescribir este comportamiento para que todos los casos de uso avanzado sean posibles también. Esto nos permite ofrecer una nueva biblioteca que es a la vez fácil de usar y tiene toda la funcionalidad incorporada que usted podría necesitar.
Funciones de ayuda
Hay algunos patrones al momento de desarrollar con IOTA que son bastante comunes; por ejemplo, encontrar un nodo público para usar. Esto solía ser un trabajo manual, pero con las nuevas librerías de cliente puedes simplemente decirle que use ‘mainnet’ o ‘testnet’ y automáticamente encontrará un nodo público sincronizado para ti a través de nuestra función de ayuda. Otra buena función de ayuda que ofrecemos es la abstracción de eventos.
En el pasado tenías que usar una librería de terceros separada para conectarte al feed MQTT/ZMQ de los nodos para los eventos, ahora simplemente tienes la opción de escuchar los eventos directamente desde las librerías de los clientes proporcionando tu propia función de callback si se dispara un evento.
Estos y otros ayudantes ya están disponibles para su uso en este momento con las nuevas bibliotecas de cliente que aportan otro nivel de comodidad a la experiencia de los desarrolladores de IOTA.
Una librería wallet para controlar todo
Anteriormente, cada implementación de IOTA que manejaba tokens IOTA hacía su propia implementación usando las bibliotecas de cliente centrales, que son low-level. Esto requería un poco de trabajo y como cada implementación es diferente, a veces resultaba en implementaciones incorrectas.
Para remediar este problema de una vez por todas, hemos introducido otra nueva biblioteca de cliente, wallet.rs. Wallet.rs es esencialmente una wallet (billetera) programable que animamos a utilizar para cada implementación que maneja tokens IOTA. Esta biblioteca con estado se encarga de todo por ti, incluyendo cosas como la sincronización y la seguridad. Wallet.rs ya está integrado en la nueva wallet de Firefly, la wallet de la línea de comandos y el faucet de testnet, y permite a cualquier desarrollador implementar un propio wallet en el que los componentes centrales críticos son manejados por la biblioteca.
Algunos de los aspectos más destacados de wallet.rs son
- Es stateful, así que es rápido de usar incluso si tienes muchas direcciones y cuentas
- Puedes hacer tantas cuentas como quieras con sus propias opciones; gestionar tanto las cuentas de prueba como las de la red principal en una única configuración de wallet.rs si lo deseas
- Es seguro por defecto, utilizando Stronghold para la gestión de secretos
- El envío y la recepción de fondos es fácil, si alguna vez se necesita una re-adhesión se encargará de ello por ti
- La copia de seguridad y la recuperación del estado es una característica incorporada
Los mismos principios que se aplican a la biblioteca principal se aplican también a wallet.rs. La biblioteca es fácil de usar con valores predeterminados sensibles y tiene enlaces para Node.js, Python y Java con más lenguajes potenciales que se añadirán más adelante.
Otras bibliotecas
Por mucho que nos guste nuestro nuevo enfoque, no es una solución ideal para todas las situaciones posibles. Para estos casos tenemos otras bibliotecas disponibles también, pero con una funcionalidad más limitada:
Bibliotecas C para dispositivos de baja potencia
C es un lenguaje de bajo nivel (low-level) y alto rendimiento que se utiliza mucho en dispositivos embebidos con recursos limitados. Debido a algunas de las limitaciones que vienen con los enlaces de Rust para dispositivos embebidos, decidimos crear una librería separada para C. Esta librería maneja toda la interacción básica pero no ofrece la funcionalidad de wallet.rs o la mayoría de las funciones de ayuda de iota.rs.
Go Nativo y TypeScript
También ofrecemos una biblioteca nativa de Go y TypeScript que no utiliza los enlaces de Rust. Esto tiene que ver con el hecho de que ya necesitábamos utilizar estas bibliotecas antes de que iota.rs estuviera disponible. Estamos considerando ofrecer bindings para ambas también en una etapa posterior, pero estas bibliotecas ya pueden ser utilizadas si deseas utilizar la tecnología IOTA usando Go o en un navegador web.
Mirá el video que habla acerca de las nuevas librerías
Conclusión
Con las nuevas librerías cliente aportamos un nuevo nivel de usabilidad, flexibilidad, rendimiento y profesionalidad al ecosistema IOTA, haciendo que sea un verdadero placer trabajar con ellas. Están disponibles ahora mismo para ser usadas en nuestra red de pruebas Chrysalis y reemplazarán las bibliotecas existentes una vez que lancemos Chrysalis en la red principal.
La biblioteca del cliente, incluyendo los enlaces, se puede encontrar aquí, con la documentación inicial aquí. Para la librería de wallet, vea el repositorio wallet.rs en GitHub y la documentación inicial de la misma.
¡No podemos esperar a que los pruebes! Si tienes alguna pregunta, no dudes en unirte a nuestro Discord y charlar con nosotros.
Post Original: The new IOTA Client Libraries: Harder, Better, Faster, Stronger