Anuncio de c-lightning 0.7, ahora con más complementos
Lightning Network

Anuncio de c-lightning 0.7, ahora con más complementos

Christian Decker
Christian Decker, Rusty Russell

El equipo de c-lightning tiene el agrado de anunciar el lanzamiento de la versión 0.7 de c-lightning. Esta versión es la culminación de ocho meses de trabajo desde nuestro último lanzamiento importante, realizado por 50 colaboradores de todo el mundo y compuesto de 1300 commits. Además de incluir una cantidad de mejoras en el desempeño y corrección de errores, esta versión viene con algunas características nuevas realmente emocionantes.

Nuevas características

  • Plugins, la característica estrella de la versión 0.7. Los plugins permiten a los desarrolladores expandir Lightning con sus propias aplicaciones escritas en cualquier lenguaje. Los complementos fortalecen aún más nuestro compromiso de convertirnos en la implementación más flexible, extensible y personalizable de la especificación de la red de Lightning. Nos permiten permanecer enfocados en la funcionalidad principal, al mismo tiempo que incentivamos a los usuarios y desarrolladores a agregar su propia funcionalidad para integrar c-lightning en su entorno.
  • Routeboost ahora está implementado, lo que nos permite enviar y recibir pagos a través de canales no públicos al agregar los detalles de los pagos a las facturas. Esto es importante para los nodos que no anuncian sus canales, lo que permite que se mantengan privados.
  • Manejo de fondos mejorado: un mejor control sobre qué monedas se usan para financiar canales y retirar de los nodos ayuda a evitar que haya un número de trampas con transacciones no confirmadas.
  • option_data_loss_protect ahora está habilitado por defecto, para reforzar tanto su propia seguridad contra la pérdida de datos como la de los otros usuarios.
  • Compilaciones reproducibles: mediante algunas configuraciones, puede compilar sus propios binarios de Ubuntu y verificar que sean idénticos a los que brindamos para su comodidad.
  • Mejor documentación: hasta las mejores características resultan inútiles si no están bien documentadas. Por ese motivo, hemos renovado nuestra documentación, que ahora se genera automáticamente en lightning.readthedocs.io
  • Y como siempre: desempeño, desempeño, desempeño.

Extensibilidad y personalización a través de Plugins

Si bien la extensibilidad y la personalización, junto con el desempeño y la seguridad, siempre han sido nuestros objetivos principales, hasta ahora los usuarios tenían que escribir daemons muy completos para agregar funcionalidades simples o hacer cambios pequeños. Esto cambia drásticamente con la introducción de los complementos. Los complementos son programas simples, escritos en cualquier lenguaje, que son gestionados por c-lightning. Esto corresponde al modelo de sidecar, en el que un proceso asociado se ejecuta junto con otro proceso con el que está interactuando. Además, exponemos una serie de puntos de extensión a través de la API del complemento:

  • El passthrough option por línea de comandos permite que los plugins registren sus propias opciones de línea de comandos que están expuestas a través de lightningd, de modo que deba configurarse solo el proceso principal.
  • El passthroughpor JSON-RPC ofrece una forma para que los plugins agreguen sus propios comandos a la interfaz JSON-RPC.
  • Las notificaciones de eventos proporcionan a los complementos un mecanismo de notificación basado en push sobre eventos de lightningd.
  • Los hooks son un primitivo que permite que los complementos sean notificados acerca de los eventos internos en lightningd y alteren su comportamiento o inserten comportamientos personalizados.

Desde el pasaje por JSON-RPC y de opción que proporcionan un único punto de interacción tanto con el daemon como con los plugins, hasta las notificaciones y hooks que permiten interacciones en tiempo real o, incluso, modificaciones al comportamiento del nodo, estos puntos de extensión permiten una integración mucho más estrecha con el core daemon de lo que antes era posible.

En comparación con las formas existentes de extender c-lightning, los requisitos para comenzar a trabajar con los complementos también son muchos menos que antes. Si alguna vez leyó desde stdin, escribió en stdout y manejó datos codificados en JSON, cuenta con todas las habilidades necesarias para crear un plugin. Además, nosotros y la comunidad desarrollamos una serie de bibliotecas para facilitar la escritura de complementos en C, Python, Golang o Java.

El siguiente ejemplo es un complemento en Python que muestra el pasaje por JSON-RPC, el passthroughn y las notificaciones para el registro de mensajes para c-lightning:

from lightning import Plugin
plugin = Plugin(autopatch=True)

@plugin.method("hello")
def hello(plugin, name="world"):
    greeting = plugin.get_option('greeting')
    s = '{} {}'.format(greeting, name)
    plugin.log(s)
    return s

@plugin.init()
def init(options, configuration, plugin):
    plugin.log("Plugin helloworld.py initialized")

plugin.add_option('greeting', 'Hello',
                  'The greeting I should use.')
plugin.run()


Junto con la interfaz de JSON-RPC, el sistema de los complementos es un objeto de primera clase entre nuestras interfaces, y estamos continuamente ampliando su funcionalidad en términos de la información expuesta y las interacciones con el núcleo de c-lightning.

Nueva modularización

Los plugins permiten a los usuarios expandir y personalizar c-lightning, y también nos permiten a nosotros, los desarrolladores de c-lightning, modularizar mejor c-lightning. En las últimas semanas, estuvimos trasladando a los plugins algunas de las funcionalidades que solían estar codificadas en el mismo c-lightning. Mover esas funcionalidades a plugins tiene dos propósitos principales:

  1. Lograr una mayor separación de intereses al afirmar explícitamente a qué información se puede acceder y qué acciones se pueden realizar.
  2. Permitir a los usuarios que simplemente intercambien de complemento con su propia implementación en caso de que el complemento predeterminado no cumpla sus requisitos.

Al usar plugins nosotros mismos, también nos aseguramos de que realmente sean objetos de primera clase, actualizando continuamente su expresividad y la forma en que pueden interactuar con el daemon núcleo.

Por ejemplo, migramos parte del código relacionado con el pago de facturas a un plugins de pagos. El propósito principal del plugin de pagos es recibir una factura y, luego, realizar un pago según la información incluida en la factura. Si bien esto parece simple, puede suceder que un único pago conlleve un proceso bastante prolongado para extraer información adicional de la factura, como las sugerencias de ruta y los pagos multiparte que pronto se implementarán. En función de esa información, el plugin genera una serie de rutas e intenta enrutar un pago a través de cada una de ellas, y vuelve a intentar si alguna no está disponible. Migrar esa funcionalidad a un complemento nos permitió escribir código más simple tanto del lado del complemento como del core daemon. También permite que los usuarios puedan reemplazarla con una propia si tienen una mejor solución para enviar pagos, p. ej., según la información adicional sobre el estado de la red, sin la necesidad de que la incorporemos en el mismo c-lightning.

Si bien el sistema de complementos se completó recientemente, varios desarrolladores ya han comenzado a diseñar y escribir numerosos complementos innovadores, lo cual expande la funcionalidad de c-lightning más allá de lo que podríamos haber imaginado: autopilots, sondeos de red, métricas prometheus, atomic swaps multi-cadena interfaces RPC adicionales y mucho más.

Viendo a Futuro

El lanzamiento de esta versión, que es ciertamente un hito importante para nosotros, es solo el comienzo de todo lo que está por venir. Tras finalizar recientemente la versión 1.0 de la especificación de la red de Lightning, esperamos ansiosos muchas más características emocionantes e innovadores en nuestro plan de desarrollo.

Para empezar, recientemente propusimos una forma más flexible de construir el paquete de enrutamiento onion, que permite que más información se lleve en los saltos de una ruta. Esto habilitará características poderosas, como pagos espontáneos que no requieren facturas y enrutamiento de encuentro secreto, que esconde tanto la identidad del emisor como del receptor durante un pago.

Otras propuestas en las que estuvimos trabajando comprenden canales de doble financiamiento, para proporcionar mejor liquidez a la red, y la eliminación de compromisos de tarifas, lo que resuelve una de las principales causas de cierres de canales.

Con la versión 0.7 de c-lightning estamos ansiosos de empezar a implementar estas excelentes características y enfrentar algunos de los grandes desafíos que nos esperan.

También queremos agradecer a todos los colaboradores que, además de haber aportado código para c-lightning, fueron lo bastante #reckless para ponerlo a prueba y hacer comentarios sobre lo que funciona y lo que podría mejorarse. ¡Y por último, queremos agradecer a los demás equipos de la red de Lightning, ACINQ y Lightning Labs, así como a los colaboradores individuales que hicieron sus aportes para que la comunidad de la red de Lightning sea un entorno tan abierto, agradable y colaborativo!

Primeros pasos con los Plugins

¡Lightning necesita más plugins! Para comenzar a expandir sus aplicaciones Lightning, le recomendamos que primero eche un vistazo a nuestra documentación y, luego, a algunos complementos de muestra. Nos encantaría saber qué piensa sobre las nuevas actualizaciones. Puede comunicarse con nosotros a través de nuestro repo de GitHub o a través de la lista de correos Lightning-dev.

If you have specific preferences, please, mark the topic(s) you would like to read: