Rilascio di c-lightning 0.7, ora con plugin
Lightning Network

Rilascio di c-lightning 0.7, ora con plugin

Christian Decker, Rusty Russell

Il team c-lightning è lieto di annunciare il rilascio di c-lightning v0.7. Questa release è il risultato di un lavoro lungo otto mesi dall’ultima grande release, comprendente contributi da parte di 50 sviluppatorida tutto il mondo e 1300 commits. La release include nuove feature eccitanti insieme a miglioramenti delle prestazioni e correzione di bug.

Nuove Feature

  • Plugin: la componente di punta della release, permettono agli sviluppatori di estendere Lighting con le loro applicazioni scritte in qualunque linguaggio. I plugin rafforzano ulteriormente il nostro impegno nel diventare l’implementazione più flessibile, estensibile e personalizzabile della specifica del protocollo Lightning Network. Ci permetteranno di concentrarci sulle funzionalità portanti, permettendo ad utenti e sviluppatori di aggiungere le loro funzionalità preferite per integrare c-lightning nei loro ambienti.
  • Routeboost è finalmente implementato, permettendo invio e ricezioni di pagamenti tramite canali privati aggiungendo i loro dettagli alle invoice. Ciò risulta di grande importanza per i nodi che scelgono di non annunciare i loro canali, permettendo loro di mantenerli privati.
  • Gestione dei fondi migliorata: un migliore controllo su quali coin vengono utilizzati per creare canali di pagamento e prelevare somme dai nodi permette di evitare una serie di insidie dovute a transazioni non confermate
  • option_data_loss_protect è abilitato di default, migliorando la tua sicurezza e quella dei tuoi peers contro la perdita di dati.
  • Compilazione deterministica: effettuando le opportune modifiche potrai compilare i tuoi binari su Ubuntu e verificare che siano identici a quelli forniti da noi.
  • Documentazione migliorata: le migliori feature rimangono inutilizzate se non sono ben documentate. Per questa ragione abbiamo rinnovato la nostra documentazione che è ora disponibile presso https://lightning.readthedocs.io/
  • E, come sempre: prestazioni, prestazioni, prestazioni.

Estensibilità e Personalizzazione grazie ai plugin

Nonostante estensibilità e personalizzazione siano sempre stati i nostri obiettivi, insieme a prestazioni e sicurezza, fino ad oggi gli utenti intenzionati ad aggiungere funzionalità o piccoli cambiamenti hanno dovuto scrivere demoni completi di tutte le funzionalità. Tutto ciò cambia drammaticamente con l’introduzione dei plugin.

I plugin sono semplici programmi, scritti in un linguaggio qualunque, gestiti da c-lightning. Questo corrisponde al modello “sidecar”, in cui un processo viene eseguito parallelamente ad un altro con il quale sta interagendo. Sono inoltre disponibili dei punti di estensione attraverso l’ API dei plugin:

  • Command line option passthrough permette ai plugins di registrare le proprie opzioni da linea di comando che vengono esposte attraverso lightningd, così che solo il processo principale necessiti di configurazione.
  • JSON-RPC command passthrough fornisce un metodo per permettere ai plugins di aggiungere i propri comandi all’interfaccia JSON-RPC
  • Le notifiche costituiscono un sistema di notifiche push per i plugins riguardo eventi da lightningd
  • Hooks: primitiva che permette ai plugins di ricevere notifiche riguardanti eventi interni a lightningd e modificarne il comportamento o iniettare un comportamento personalizzato

Da JSON-RPC e option passthrough che forniscono un singolo punto di interazione con il demone e qualsiasi plugin, alle notifiche e gli hooks che abilitano interazioni in tempo reale e addirittura modifiche al comportamento dei nodi, i punti di estensione permettono una forte integrazione con le funzionalità portanti rispetto al passato.

Inoltre, considerando le precedenti modalità di estensione di c-lightning, i requisiti per iniziare ad utilizzare i plugins sono molto inferiori. Se hai mai scritto da stdin o su stdout, o gestito dati codificati in JSON, hai tutto ciò che serve per iniziare a costruire un plugin.

In aggiunta, alcuni di noi e membri della community hanno costruito delle librerie per facilitare la scrittura di plugins in C, Python, Golang o Java.

L’esempio seguente è un plugin Python che dimostra JSON-RPC passthrough, passthrough di opzioni e notifiche per messaggi a 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()


Insieme all’interfaccia JSON-RPC, il sistema di plugin è un cittadino di prima classe nell’interfaccia, e continueremo ad estenderne le funzionalità sia in termini di informazioni esposte che in termini di interazioni con il cuore di c-lightning.

Nuova Modularizzazione

I plugins non permettono solamente agli utenti di estendere e personalizzare c-lightning ma permettono a noi sviluppatori di lightning di dare a c-lightning una maggiore modularizzazione. Nelle ultime settimane abbiamo riscritto alcune funzionalità di c-lightning utilizzando i plugins. Lo spostamento di queste funzionalità nei plugins ha due obiettivi:

  1. Maggiori separazione dei ruoli, esplicitando quali informazioni sono disponibile e quali azione possono essere intraprese.
  2. Permettere agli utenti di sostituire i nostri plugins con le loro implementazioni, nel caso in cui il default non soddisfi i loro requisiti.

Essendo noi stessi utilizzatori dei plugins, ci assicureremo di aggiornarne l’espressività e le maniere in cui interagiscono con il cuore del demone.

Ad esempio, abbiamo migrato del codice relativo al pagamento di richieste di pagamento all’interno di un payplugin. Il suo obiettivo principale è quello di ricevere una richiesta di pagamento ed effettuare un pagamento in base alle informazioni contenute nella stessa. Nonostante questo suoni semplice, è possibile che un singolo pagamento risulti in un lungo processo di estrazione di informazioni dalla richiesta di pagamento, come nel caso di routehints e il pagamento multiparte che verrà supportato prossimamente. In base a queste informazioni, il plugin genera una serie di rotte e cerca di effettuare il pagamento attraverso ognuna di queste, riprovando su un’altra quando un tentativo fallisce.

Nonostante il sistema di plugin sia stato recentemente completato, alcuni sviluppatori hanno già iniziato a progettare e scrivere dei plugin innovativa, estendendo le funzionalità di c-lightning oltre a quello che ci eravamo immaginati: autopilota, network probes, prometheus metrics, cross-chain atomic swaps, interfacce RPC aggiuntive, e molto altro.

Guardando al Futuro

Nonostante questa release sia una grande pietra miliare si tratta solamente dell’inizio. Dopo aver recentemente finalizzato la versione 1.0 della specifica Lightning Network, non vediamo l’ora di nuove eccitanti feature nella nostra roadmap.

Ad esempio, abbiamo recentemente proposto una maniera più flessibile per costruire i pacchetti per l’onion routing, permettendo una maggiore quantità di informazioni per ogni hop nella rotta. Questo cambiamento abilita feature molto potenti come pagamenti spontanei senza bisogno di richieste e rendezvous routing che nasconde l’identità di mittente e destinatario.

Altre proposte su cui stiamo lavorando includono i canali dual-funded, per garantire migliore liquidità alla rete, e la rimozione di commitments per le fee, che risolve uno delle maggiori cause di chiusura dei canali.

Con la release 0.7 di c-lightning siamo felici di iniziare l’implementazione di queste feature spettacolari e di affrontare alcune delle grandi sfide che abbiamo davanti.

Vogliamo ringraziare quei contributori che non hanno solamente contribuito al codice di c-lightning, ma anche a coloro che sono stati abbastanza #reckless da testare e dare feedback su cosa funziona e che cosa può essere migliorato. E infine, ci piacerebbe ringraziare gli altri team che lavorano su Lightning Network, ACINQ e Lightning Labs, così come i contributori individuali che hanno fatto la loro parte per rendere la comunità Lightning Network un ambiente piacevole, aperto e collaborativo.

Comincia ad usare i plugin

Lightning ha bisogno di nuovi plugin! Per iniziare ad estendere le tue Lightning apps, vorrai innanzitutto dare un’occhiata alla nostra documentazione e ad alcuni esempi di plugins. Saremo lieti di ricevere feedback sulla nuova release. Puoi contattarci attraverso la nostra repo GitHub o tramite la mailing list Lightning-dev.