Das c-lightning Team ist erfreut, die Herausgabe der Version 0.7 von c-lightning bekannt zu geben. Diese Version ist der Höhepunkt von acht Monaten Arbeit seit unserer letzten großen Version, mit 50 Beitragenden aus der ganzen Welt und insgesamt 1.300 Beiträgen. Zu dieser Version gehören nicht nur eine Anzahl von Leistungsverbesserungen und Fehlerbehebungen, sondern auch einige wahrlich aufregende Features.
Neue Features
- Plug-Ins: Als Haupt-Feature der 0.7 Version erlauben Plug-Ins den Entwicklern, Lightning mit ihren eigenen, in jeder Sprache geschriebenen Anwendungen zu erweitern. Plug-Ins verstärken unser Versprechen die flexibelste, am meisten erweiterbare und anpassbare Implementation der Lightning Netzwerk Spezifikation zu werden. Sie erlauben uns, uns auf unsere Kernfunktionalität zu konzentrieren während wir zur selben Zeit Nutzer und Entwickler ermächtigen, ihre eigenen Funktionalitäten zu ergänzen um c-lightning in ihre eigene Umgebung zu integrieren.
- Routeboost ist nun implementiert, was uns erlaubt Zahlungen über nicht-öffentliche Kanäle zu senden und zu empfangen indem wir ihre Informationen den Rechnungen anfügen. Dies ist für Nodes welche ihre Kanäle nicht öffentlich machen, wichtig, was ihnen erlaubt diese geheim zu halten.
- **Verbesserte Verwaltung von Mitteln: **Bessere Kontrolle darüber, welche Coins benutzt werden um Kanäle zu finanzieren und auszuzahlen, hilft dabei, die Probleme mit nicht-bestätigten Transaktionen zu vermeiden.
option_data_loss_protect
ist nun voreingestellt, was sowohl Ihre Sicherheit gegen Datenverlust als auch die Ihrer Peers verbessert.- Nachvollziehbare Builds: Mit geringen Einstellungen können Sie Ihren eigenen Ubuntu Binärcodes kreieren und nachprüfen, dass dieser identisch ist mit denen die wir Ihnen zur Verfügung stellen.
- **Bessere Dokumentation: **Die besten Features sind unnütz wenn diese nicht gut dokumentiert sind. Aus diesem Grund haben wir unsere Dokumentation umgestaltet welche nun automatisch auf lightning.readthedocs.io generiert wird.
- **Und wie immer: **Leistung, Leistung, Leistung.
Erweiterungen und Anpassungen durch Plug-Ins
Obwohl Erweiterungen und Anpassungen, zusammen mit Leistung und Sicherheit, schon immer unsere Hauptziele waren, mussten Nutzer bis jetzt vollwertige Dämonen schreiben um einfache Funktionalitäten hinzuzufügen oder kleine Änderungen durchzuführen. Dies ändert sich dramatisch mit der Einführung von Plug-Ins. Plug-Ins sind einfache Programme, geschrieben in jeder Sprache, welche von c-lightning verwaltet werden. Dies ist dem Seitenwagen Modell ähnlich, in welchem zugehörige Prozesse zusammen mit den Prozessen laufen, mit denen sie interagieren. Zusätzlich legen wir einige Fortsetzungspunkte durch die Plug-In API frei:
- **Kommandozeilen-Pass-Through-Option **erlaubt Plug-Ins, ihre eigenen Kommandozeilenoptionen zu registrieren welche durch lightningd aufgedeckt sind sodass nur der Hauptprozess konfiguriert werden muss.
- JSON-RPC Kommando-Pass-Through ermöglicht Plug-Ins ihre eigenen Kommandos der JSON-RPC Verbindung hinzuzufügen.
- Event Benachrichtigungen erlauben Plug-Ins mit einem push-basierten Benachrichtigungsmechanismus zu Events von lightningd.
- Hooks sind eine Stammfunktion, welche Plug-Ins erlaubt über interne Events in lightningd benachrichtigt zu werden und ihr eigenes Verhalten zu verändern oder maßgeschneidertes Verhalten zu injizieren.
Von der JSON-RPC und Option Pass-Through, welche einen einzigen Interaktionspunkt mit sowohl dem Dämon als auch jedweden Plug-Ins bereitstellt, bis hin zu den Benachrichtigungen und Hooks welche Echtzeit-Interaktionen oder gar Modifikationen zum Verhalten der Node erlauben, ermöglichen diesen Erweiterungen eine viel engere Interaktion mit dem Kern-Dämon als je zuvor.
Im Vergleich zu den bestehenden Arten, c-lightning zu erweitern, sind die Voraussetzungen, mit Plug-Ins anzufangen, so gering wie nie zuvor. Sollten Sie jemals von stdin oder nach stdout geschrieben haben oder JSON kodierte Daten gehandhabt haben, haben Sie alle Fertigkeiten, ein Plug-In zu schreiben. Zusätzlich haben wir und die Gemeinschaft eine Anzahl von Libraries entwickelt, um Plug-Ins in C, Python, Golang oder Java zu schreiben.
Das folgende Beispiel ist ein Python Plug-In, das eine JSON-RPC Pass-Through und Option Pass-Through zeigt, sowie Benachrichtigungen für das Protokollieren von Nachrichten an 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() \
Zusammen mit der JSON-RPC Verbindung ist das Plug-In System eine der besten Schnittstellen, und wir werden weiterhin die Funktionalität im Sinne der freigelegten Informationen und Interaktionen mit c-lightning core verbessern.
Neue Modularisation
Plug-Ins erlauben Nutzern nicht nur, c-lightning zu erweitern und anzupassen, sondern erlauben uns, den c-lightning Entwicklern, c-lightning zu modularisieren. Über die letzten paar Wochen hinweg haben wir einige der in c-lightning festgeschriebenen Funktionalitäten als Plug-Ins portiert. Es gibt zwei Hauptgründe, wieso wir diese Funktionalitäten in Plug-Ins übertragen:
- Wir erreichen eine größere Aufteilung von Interessen, indem wir explizit festlegen, auf welche Informationen zugegriffen werden kann und welche Aktionen ausgeführt werden können.
- Wir erlauben Nutzern einfach, die Plug-Ins gegen ihre eigenen Implementationen auszutauschen, sollten die voreingestellten Plug-Ins nicht ihren Anforderungen genügen.
Indem wir selbst Plug-Ins benutzen, stellen wir auch sicher, dass diese wahrlich Bürger erster Klasse sind, kontinuierlich ihre Ausdrucksfähigkeit verbessern und die Art mit der sie mit dem Kern Dämon interagieren.
Zum Beispiel haben wir einen Teil vom Kode, der die zur Zahlung von Rechnungen verwendet wird, in einen Pay-Plug-In integriert. Der Hauptzweck dieses Pay-Plug-Ins ist es, eine Rechnung zu erhalten und dann eine Zahlung aufgrund der Informationen in dieser Rechnung auszuführen. Während dies einfach klingt, kann es dazu führen, dass eine einfache Zahlung zu einem längeren Prozess führt in dem zusätzliche Information von der Rechnung, wie beispielsweise Routing Hinweise und die bald implementierten mehrteiligen Zahlungen abgerufen werden. Basierend auf dieser Information generiert das Plug-In eine Anzahl von Routen und versucht, die Zahlung über jede einzelne Route abzuwickeln und diese zu wiederholen, sollte eine Route nicht verfügbar sein. Diese Funktionalität an ein Plug-In zu übergeben erlaubt uns, einfacheren Kode zu schreiben, auf sowohl der Plug-In Seite als auch dem Kern Dämon. Es erlaubt Nutzern, es mit ihrem eigenem Kode zu ersetzen sollten sie eine bessere Lösung zur Abwicklung von Zahlungen gefunden haben, ohne darauf warten zu müssen, dass wir dies in c-lightning eingliedern..
Obwohl das Plug-In System erst kürzlich fertiggestellt wurde, haben mehrere Entwickler bereits angefangen, innovative Plug-Ins zu entwerfen und zu schreiben, was c-lightning’s Funktionalität über unsere Vorstellungen hinweg erweitert: Netzwerk Sonden, Prometheus Metriken, Cross-chain atomic swaps, zusätzliche RPC-Verbindungen und viele mehr.
Nach vorne schauen
Obwohl es sicherlich ein wichtiger Meilenstein für uns ist, ist diese Version nur der Anfang von vielen Entwicklungen die kommen werden. Nachdem wir kürzlich die Version 1.0 der Lightning Netzwerk Spezifikation finalisiert haben, schauen wir bereits auf viele neue aufregende und innovative Features auf unserer Roadmap.
Zum einen haben wir kürzlich eine flexiblere Art vorgestellt das Onion Routing Paket zu konstruieren, was es erlaubt, mehr Informationen zu transportieren. Dies erlaubt, kraftvolle Features wie spontane Zahlungen, die keine Rechnungen benötigen, und Rendezvous Routing das sowohl die Identität des Senders als auch die des Empfängers verschleiert.
Andere Vorschläge an denen wir arbeiten inkludieren doppelt-finanzierte Kanäle die dem Netzwerk bessere Liquidität bereitstellen, und das Entfernen von Bearbeitungsgebühren was eines der Hauptgründe von Kanalschließungen löst.
Mit der Version 0.7 von c-lightning sind wir erfreut mit dem Implementieren dieser aufregenden Features anzufangen und einige der großen Herausforderungen vor uns zu bewältigen.
Wir möchten den vielen Beitragenden danken die nicht nur Kode zu c-lightning beigetragen haben sondern auch #reckless genug waren, Rückmeldung darüber zu geben, was funktioniert und was verbessert werden kann. Schlussendlich möchten wir den anderen Lightning Netzwerk Teams danken, ACINQ und Lightning Labs, sowie den individuellen Beitragenden die daran teilnehmen, die Lightning Netzwerk Gemeinschaft solch eine angenehme, kollaborative und offene Umgebung zu machen!
Mit Plug-Ins anfangen
Lightning braucht mehr Plug-Ins! Um mit dem Erweitern Ihrer Lightning Apps anzufangen schauen Sie am besten als erstes auf unsere Dokumentation, dann auf ein paar Beispiel Plug-Ins. Wir würden uns sehr über Ihre Rückmeldung zu den neuen Updates freuen. Sie können uns über unsere Github Repo erreichen oder über die Lightning-dev Mailliste.