Wenn man eine eigene Lightning-Node betreibt und seine Channel-Fees nicht permanent händisch anpassen möchte, kann man dies auch mit dem Tool “charge-lnd” automatisieren. Dieser Artikel geht auf die Installation ein und gibt ein paar Tips wie man das ganze für sich einstellen kann. Falls euch die Beschreibung nicht ganz ausreicht lohnt sich immer ein Blick in das Github-Repository, dort ist nochmal alles sehr genau beschrieben (Englisch).
Nachteile
Wichtig: Im neuen Podcast mit Livera (relativ am Ende) werden auch Nachteile besprochen, wenn man seine Channel-Fees sehr oft ändert. Jede Node hat zu einem Zeitpunkt eine Sicht auf das Netzwerk und die potentiellen Routen für ein Zahlung. Also muss jede Node bei einer Zahlung schon im Voraus die Fees angeben, die bei einem Hop in der Route gezahlt werden.

Ändert jetzt eine Node sehr oft die Channel-Fees, kann das bedeuten, dass die neuen Fee-Informationen noch nicht durch das ganze Netzwerk propagiert wurden. Es kann bis zu einer Stunde dauern, bis Fees sich durch das gesamte Netzwerk propagiert haben. Das bedeutet Nodes, die oft ihre Fees ändern (eigentlich nur erhöhen, billiger ist egal) haben öfter fehlgeschlagene Zahlung, da die Fees outdated sind und werden somit in ihrem Routing Score downgerated.
Dies führt dann leider dazu, dass man nicht mehr so viel routet. Man sollte sich also ganz genau überlegen wie oft man das Charge-Lnd script benutzt. Ich benutze es momentan einmal in der Woche. Dazu später mehr beim einrichten des Crontab-Jobs.
Installation
Wenn ihr einen Raspiblitz habt, dann startet erstmal eine SSH-Session entweder als “admin” oder “bitcoin” user.
ssh admin@ip.ip.ip.ip
Anschließend cloned (kopiert) ihr das Repository von charge-lnd:
cd ~
git clone https://github.com/accumulator/charge-lnd.git
cd charge-lnd
pip install -r requirements.txt .
- das ausführbare Programm befindet sich in
$HOME/.local/bin
Jetzt haben wir das Programm installiert und kontrollieren ob es auch sauber funktioniert. (Das Tool funktioniert momentan nur outofthebox für mainnet, was natürlich für die meisten ausreicht. Leute, die ein bisschen im Testnet rumspielen möchten, müssen händisch den Pfad des Macaroons im Code von Charge-Lnd anpassen.

Einführung in das Config-File
Jetzt kümmern wir uns um die Config-File, das Herzstück von charge-lnd. Darin legen wir verschiedene Bedingungen fest, wie die Fees unserer Channels anzupassen sind. Doch vorab eine kleine Beschreibung dieses Files. Die Beispiel Config befindet sich in folgendem Pfad: $HOME/charge-lnd/charge.config.example.
Um das Config File zu öffnen, müsst ihr folgenden Befehl eingeben:
nano $HOME/charge-lnd/charge.config.example

Der Aufbau
- Name der Policy in eckigen Klammern z.B. [zerobasefee-initiative]
- Die Properties für welchen Channel diese Policy greift.
- Festlegung der Strategy z.B. static, match_peer die ausschlaggebend ist, wie die darauffolgenden Parameter gesetzt werden
- die eigentlichen Parameter bzw. Stellgrößen z.B. fee_ppm, base_fee_msat
Für jeden Channel den man hat, wird diese Config-File von oben nach unten analysiert und geschaut welche Policy greift. Dabei ist zu beachten, dass die erste passende Policy die Channel Parameter festlegt.
Zu Beginn werden mit der [Default] Policy Standardwerte gesetzt, sodass auch jeder Channel zumindest einen Anfangswert gesetzt bekommt.
Beispiel 1 aus dem Config-File:

Beispiel 2:

Wenn man das Prinzip verstanden hat, kann man sich jetzt unterschiedlichste Policies zusammenstricken und diese in eine eigene Config File abspeichern. Ich werde euch im Folgenden eine Config-File wie ich Sie benutze vorstellen. Ihr könnt diese nach euren Vorstellungen weiter verfeinern.
Liste an Bedingung (Properties) anhand derer ihr Channels gewissen Policies zuordnen könnt

Config-File Beispiel
Hier der Link zur Config File: https://gist.github.com/ziggie
Schritt für Schritt Anweisung wie ihr die Config File erstellt:
cd ~/charge-lnd && touch charge.config
nano charge.config
(Inhalt in die Datei kopieren und speichern)
Hier werden eigentlich hauptsächlich static policies verwendet. Eine proportional policy verwende ich auch bei Channels, die größer als 2 mio Satoshis sind und zu großen Nodes verbunden sind.

Jetzt können wir bei dem bestehenden Setup einen Testrun durchführen und schauen wie sich die Channel Fees ändern würden. Dazu müsst ihr folgenden Befehl ins Terminal eingeben:
~/.local/bin/charge-lnd -c charge.config.example --dry-run

Wenn ihr jetzt das –dry-run am Schluss weglässt, werden die Channel-Fees geändert.
Tips bei Rings of Fire
Wenn ihr einen neuen Channel öffnet und erstmal die Fees hochstellt, würde das charge-lnd script sofort die Fees wieder runtersetzen (mit der oberen Config File), weswegen man auch gewisse Channels zu Nodes ignorieren kann, die also nicht von dem Script beeinflusst werden (Stichwort strategy = ignore, node.id = pubkey der Node). Nähere Infos dazu findet ihr hier.
Automatisiertes Aufrufen des Scripts
Nachdem wir das Tool installiert haben und ein eigenes Config File erstellt haben, wollen wir das Tool beispielsweise jeden Tag einmal ausführen. Das machen wir mit Hilfe von Crontab. Hierzu müsst ihr folgende Befehle ins Terminal eingeben:
crontab -e
(es öffnet sich ein vim-editor)
Dann am ende der Datei folgendes eingeben:
0 0 * * * /home/admin/.local/bin/charge-lnd -v -c /home/admin/charge-lnd/charge.config

Anschließend:
:wq
(vim editor schließt)crontab -l (verifizieren ob unten die Zeile übernommen wurde
)
Das Script wird jeden Tag um 00:00 UTC ausgeführt. Wenn ihr das Skript öfter ausführen möchtet, findet ihr hier Tipps zur Konfiguration.
Weitere Tips
Falls ihr merkt, dass eure Channels eigentlich nur zum Reblancen anderer Nodes benutzt werden und ihr nur Micropayments unterstützen wollt, könnt ihr den Betrag der pro Channel durchgeroutet werden kann auch runtersetzen. Dazu könnt ihr in eurer lnd.conf folgenden Parameter setzen: max_htlc_msat.
Das wars, danke fürs lesen und be Reckless, ride the lightning 🙂
Spende uns:
Wenn dir dieser oder einer unserer anderen Beiträge gefallen hat, würden wir uns über eine kleine Spende freuen:
Wie immer ein TOP Beitrag, danke Ziggie!
Cool danke. Noch 2 kleine Tipps.
max_htlc_msat kann verwendet werden (auch wenn man eine 0/0 fee policy verfolgt) um die größe möglicher Transaktionen zu beschränken wenn die lokale balance niedriger wird.
Siehe zB: https://gist.github.com/zerofeerouting/48082266eb05a183c8eeb22b3d9f983d
Um ein einfaches Log zu bekommen von den letzten Fee Anpassungen kann man bei der cron definition den Output in ein logfile redirecten:
0 0 * * * /home/admin/.local/bin/charge-lnd -v -c /home/admin/charge-lnd/charge.config >>/home/admin/charge-lnd/cron.log 2>&1