C-lightning 0.7: maintenant avec plus de plugins
Lightning Network

C-lightning 0.7: maintenant avec plus de plugins

Christian Decker
Christian Decker, Rusty Russell

L’équipe de c-lightning est heureuse d’annoncer la sortie de c-lightning v0.7, aboutissement de huit mois de travail depuis notre dernière sortie par 50 contributeurs du monde entier qui ont réalisé 1 300 commits. Cette version inclut non seulement certaines améliorations de performance et des corrections de bugs, mais aussi de nouvelles fonctionnalités très intéressantes.

Nouvelles Fonctionnalités

  • Plugins : Fonctionnalités phare de la version 0.7, les plugins permettent aux développeurs d’utiliser Lightning avec leurs propres applications dans n’importe quel langage de programmation. Ils confirment notre engagement de devenir l’implémentation la plus flexible, extensible et personnalisable. Ces plugins nous permettent de nous focaliser sur les fonctionnalités principales, tout en offrant aux utilisateurs et aux développeurs la possibilité d’ajouter leurs propres fonctionnalités pour intégrer c-lightning à leur environnement.
  • Routeboost est opérationnel. Il nous permet d’envoyer et de recevoir des paiements via des canaux non publics en ajoutant leurs détails aux factures. C’est important pour les nœuds qui n’annoncent pas leurs canaux, et leur permet de les garder privés.
  • Amélioration de la gestion des fonds : un meilleur contrôle des fonds utilisés pour financer les canaux et les retraits des nœuds permet d’éviter de nombreux pièges liés aux transactions non confirmées.
  • option_data_loss_protect _est activé par défaut, renforçant à la fois votre propre sécurité et celle de vos pairs contre les pertes de données.
  • Compilations reproductibles: avec certaines configurations, vous pouvez créer vos propres binaires Ubuntu et vérifier qu’ils sont identiques à ceux que nous mettons à votre disposition.
  • Meilleure documentation: les meilleures fonctionnalités sont inutiles si elles ne sont pas correctement documentées. C’est pourquoi nous l’avons revue, elle est maintenant générée automatiquement sur lightning.readthedocs.io
  • Et comme toujours: performance, performance, performance.

Extensibilité et Personnalisation via les Plugins

Bien que l’extensibilité, la personnalisation, les performances et la sécurité aient toujours été nos principaux objectifs, les utilisateurs devaient écrire des _deamons _à part entière pour pouvoir ajouter des fonctionnalités simples ou apporter de petites modifications. Cela change radicalement avec l’introduction des plugins. Les plugins sont de simples programmes, écrits dans n’importe quelle langue, qui sont gérés par c-lightning. Cela s’apparente au modèle du side-car, dans lequel un processus associé est exécuté parallèlement à un autre processus avec lequel il interagit. De plus, nous présentons un certain nombre de points d’extension via l’API du plugin:

  • La ligne de commande “option passthrough permet aux plugins d’enregistrer leurs propres options de ligne de commande exposées à lightningd, de sorte que seul le processus principal doive être configuré.
  • JSON-RPC command passthrough permet aux plugins d’ajouter leurs propres commandes à l’interface JSON-RPC.
  • Les notifications d’événements fournissent aux plug-ins un mécanisme de notification_ push_ basé sur les événements de lightningd.
  • Les hooks sont une primitive qui permet aux plugins d’être informés des événements internes à lightningd et de modifier leur comportement ou d’impulser des comportements personnalisés.

Depuis le JSON-RPC et l’option passthrough qui fournissent un point d’interaction unique avec le deamon et les plug-ins jusqu’aux notifications et aux hooks qui permettent des interactions en temps réel ou même des modifications du comportement du nœud, ces points d’extension permettent une intégration beaucoup plus étroite qu’auparavant avec le deamon de base.

Les conditions requises pour prendre en main les plugins sont également beaucoup plus souples que les méthodes actuelles d’extension de c-lightning. Si vous avez déjà écrit à partir de stdin et stdout et manipulé des données encodées JSON, vous avez toutes les compétences requises pour créer un plugin. De plus, nous avons développé avec la communauté un certain nombre de bibliothèques pour faciliter l’écriture de plugins en C, Python, Golang ou Java.

L’exemple suivant est un plugin en Python présentant le _passthrough _JSON-RPC, “option _passthrough” _et les notifications pour l’enregistrement des messages dans 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()


Nouvelle modularisation

Les plugins permettent non seulement aux utilisateurs d’étendre et personnaliser c-lightning, mais également à nous, développeurs de c-lightning, de mieux le modulariser. Au cours des dernières semaines, nous avons transféré dans des plugins certaines des fonctionnalités qui étaient auparavant codées en dur dans c-lightning lui-même. Le déplacement de cette fonctionnalité a deux objectifs principaux :

  1. Nous simplifions les choses en indiquant explicitement quelles informations peuvent être consultées et quelles actions peuvent être effectuées.
  2. Nous permettons aux utilisateurs d’échanger simplement le plug-in par défaut par leur propre implémentation, s’il ne correspond pas à leurs exigences.

En utilisant nous-mêmes les plugins, nous garantissons qu’ils sont vraiment des “citoyens de première classe”, et améliorons continuellement leur expressivité et la manière dont ils peuvent interagir avec le _deamon _principal.

Par exemple, nous avons migré une partie du code relatif au paiement des factures dans un plugin de paiement. L’objectif principal de ce plugin est de recevoir une facture, puis de procéder au paiement en fonction des informations qu’elle contient. Même si cela semble simple, il s’avère qu’un paiement unique peut entraîner un processus assez long d’extraction d’informations supplémentaires de la facture, tels que des routehints _et les _multi-part payments actuellement en cours de développement. Sur la base de ces informations, le plugin génère un certain nombre d’itinéraires, en essayant d’acheminer un paiement sur chacun et en recommençant si l’un d’entre eux est indisponible. La migration de cette fonctionnalité dans un plugin nous a permis d’écrire un code plus simple à la fois du côté du plugin et du _deamon _principal. Cela permet également aux utilisateurs de le remplacer par le leur s’ils disposent d’une meilleure solution d’acheminement - par exemple basée sur des informations supplémentaires sur l’état du réseau - sans qu’il soit nécessaire de la développer dans c-lightning-même.

Bien que le système de plugin soit très récent, un certain nombre de développeurs ont déjà commencé à concevoir et écrire des plugins innovants, qui étendent les fonctionnalités de c-lightning au-delà de ce que nous pouvions imaginer : pilotes automatiques, sondes de réseau, métriques Prometheus, échange atomique cross-chain, interfaces RPC supplémentaires, etc.

La suite

Bien qu’il s’agisse d’une étape importante, cette sortie n’est que le début pour nous. Après avoir récemment finalisé la v1.0 des spécifications du Lightning Network, nous prévoyons de nombreuses autres fonctionnalités intéressantes et innovantes dans notre plan d’action.

Nous avons par exemple récemment proposé un moyen plus flexible de construire le routage en oignon, ce qui permet d’acheminer davantage d’informations. Cela permettra d’activer des fonctionnalités puissantes telles que des paiements spontanés ne nécessitant pas de factures et le routage “rendez-vous” qui cache l’identité de l’expéditeur et celle du destinataire lors d’un paiement.

Parmi les autres propositions sur lesquelles nous travaillons, citons les canaux à double financement, destinés à améliorer la liquidité du réseau, et à supprimer les_ commitments _sur les frais de transaction, mettant ainsi fin à l’une des principales causes de fermeture de canaux de paiement.

Nous sommes enthousiastes à l’idée de mettre en œuvre ces fonctionnalités étonnantes grâce à la version 0.7 de c-lightning et de relever certains des grands défis qui nous attendent.

Nous tenons à remercier les nombreux participants qui ont, non seulement contribué au code de c-lightning, mais également ceux qui ont été assez _reckless _pour tester et donner leur avis sur ce qui fonctionne et ce qui devait être amélioré. Enfin, nous voudrions remercier les autres équipes qui travaillent sur le Lightning Network, ACINQ et Lightning Labs, ainsi que tous les contributeurs individuels qui ont fait de la communauté Lightning Network un environnement aussi agréable, collaboratif et ouvert !

Démarrer avec les plugins

Lightning a besoin de plus de plugins ! Avant de développer vos applications Lighting, il faut d’abord consulter notre documentation, puis quelques exemples de plug-ins. Nous aimerions connaître votre avis sur les nouvelles mises à jour. Vous pouvez nous contacter via notre dépôt GitHub ou via la liste de diffusion Lightning-dev.

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