C-lightning, clboss und RTL selbst auf Debian 11 aufsetzen

Vorwort

Hallo. Dieses Tutorial soll Dir zeigen, wie Du bitcoind, c-lightning, RTL und clboss aufsetzt. Wir eröffnen zusammen einen Channel und lassen später alles weitere durch clboss erledigen. Dieses Tutorial ist für jeden geeignet, der eine kleine (oder größere) Lightning-Routing-Node aufsetzen möchte und das nötige Durchhaltevermögen mitbringt diese auch dauerhaft zu pflegen und sich eventuelle fehlende Skills zu erarbeiten. Dieses Tutorial ist nicht für Personen geeignet, die „einfach nur“ Lightning benutzen möchten.

Was brauchst Du?

  • Du benötigst einen PC, Server oder eine VM mit optimalerweise 1 TB Speicherplatz für die BTC-Blockchain, der optimalerweise immer online ist. c-lightning kann auch mit einer pruned Node arbeiten - dies deckt dieses Tutorial allerdings nicht ab.
  • Auf diesem PC, Server oder auf dieser VM sollte Debian 11 installiert sein. Wenn Du ein anderes Betriebssystem installierst musst Du Dich entsprechend auskennen und die Kommandos entsprechend selbst substituieren. (Z.B. sudo statt su, etc.)
  • Die Pfade in den Beispielen setzen voraus, dass Du einen Benutzer Namens btc beim Setup angelegt hast und im Verzeichnis /blockchain genügend Speicherplatz zur Verfügung steht um die BTC-Blockchain zu speichern. Während ich das schreibe sind das schon 387 GB. Falls das Verzeichnis /blockchain nicht existiert musst Du es so anlegen, dass der Benutzer btc Schreib-Rechte hat: mkdir /blockchain, chown btc: /blockchain und chmod 0755 /blockchain.
  • Eine statische IP-Adresse. (Dieses Tutorial beinhaltet keine Konfiguration von wechselnden IP-Adressen während dem Betrieb. Das „Lightning-Netzwerk“ unterstützt hier keine wiederholenden DNS-Auflösungen, bzw. viel verwendete Software unterstützt dies nicht.)
  • Mindestens 0,1 BTC.

Formatierungshinweis

Code-Blöcke sind entweder komplette Dateien oder Konsolen In-/Output. Im Fall von Konsolen In-/Output die Kommandos enthalten sind Zeilen die mit einem $ beginnen das Shell-Prompt des btc-Users und Zeilen die mit # beginnen das Shell-Prompt des root-Users. In dem Fall musst Du entsprechend su oder sudo verwenden um die Zeile(n) als root auszuführen.

Tastenkombinationen werden in Eckigen Klammern geschrieben: [Strg]+[D] bedeutet z.B., dass Du die STRG-Taste zusammen mit der D-Taste drücken sollst. Modifikator-Tasten werden dabei vor der Nicht-Modifikator-Taste gedrückt und erst nach dem Loslassen der Nicht-Modifikator-Taste losgelassen. In dem Fall also: [Strg] drücken und halten, [D] drücken, [D] loslassen, [Strg] loslassen.

Neuere Versionen

Es kann sein, dass diese Dokumentation mittlerweile outdated ist. Ich verlinke deshalb immer Seiten mit weiteren Informationen bei denen ihr dann die aktuelle Version der Software recherchieren könnt.

Mahnendes Vorwort

Auch wenn es verlockend ist, dass clboss die komplette Node selbst managen kann würde ich empfehlen zuerst selbst „laufen zu lernen“. c-lightning ist auch wunderbar ohne RTL oder clboss managebar. Falls Du mich flamen möchtest, weil Du durch mein Tutorial alle BTCs verloren hast, kannst Du das direkt per Telegram tun: @GhostTyper.

bitcoind installieren

bitcoind ist der „bitcoin Daemon“ aus der Softwaresuite „BitcoinCore“ und „die defacto Standard“ Bitcoin-Node-Software. (Nicht sehr dezentral. :'D) Die Suite liefert noch mehr, aber wir benötigen nur den bitcoind und das Kommandozeilensteuerprogramm bitcoin-cli.

Gute Informationen zu diesem Punkt für weitere Recherchen gibt es hier: Running A Bitcoin Full Node.

bitcoind installieren, falls die Prüfsummen nicht übereinstimmen: Installation abbrechen. Du startest im Home-Verzeichnis vom btc-User:

$ wget https://bitcoincore.org/bin/bitcoin-core-0.21.1/bitcoin-0.21.1-x86_64-linux-gnu.tar.gz
$ wget https://bitcoincore.org/bin/bitcoin-core-0.21.1/SHA256SUMS.asc
$ cat SHA256SUMS.asc | grep bitcoin-0.21.1-x86_64-linux-gnu.tar.gz
$ sha256sum bitcoin-0.21.1-x86_64-linux-gnu.tar.gz
$ mkdir work
$ cd work
$ tar xvf ../bitcoin-0.21.1-x86_64-linux-gnu.tar.gz
$ su -
# install -m 0755 -o root -g root -t /usr/local/bin bitcoin-0.21.1/bin/bitcoind
# install -m 0755 -o root -g root -t /usr/local/bin bitcoin-0.21.1/bin/bitcoin-cli
# [Strg]+[D]

su (oder auch sudo) wird Dich zur Eingabe des root-Passworts (oder bei anderen Distributionen auch zur Eingabe des Passworts des btc-Users) auffordern. Testen, ob bitcoind und bitcoin-cli erfolgreich installiert wurde kannst Du so:

$ cd
$ bitcoind --version
Bitcoin Core version v0.21.1
Copyright (C) 2009-2020 The Bitcoin Core developers

Please contribute if you find Bitcoin Core useful. Visit
<https://bitcoincore.org/> for further information about the software.
The source code is available from <https://github.com/bitcoin/bitcoin>.

This is experimental software.
Distributed under the MIT software license, see the accompanying file COPYING
or <https://opensource.org/licenses/MIT>

$ bitcoin-cli --version
Bitcoin Core RPC client version v0.21.1

Ich hoffe, es hat alles bisher geklappt. Wenn nicht, dann schildere Dein Problem unter diesem Thread.

Als nächstes setzen wir ein Start-Script auf. Editiere dazu mit Deinem Lieblings-Editor (hoffentlich vim) die Datei /etc/init.d/cryptostack als root. Wenn Du das Start-Script ohne meine Hilfe erstellen möchtest schlage ich vor, dass Du ein bestehendes Start-Script kopierst und dieses abänderst. Ansonsten ist hier mein Vorschlag für den Datei-Inhalt von /etc/init.d/cryptostack:

#!/bin/sh

### BEGIN INIT INFO
# Provides:             cryptostack
# Required-Start:       $local_fs $remote_fs
# Required-Stop:        $local_fs $remote_fs
# X-Start-Before:
# X-Stop-After:
# Default-Start:        3 4 5
# Default-Stop:         0 1 2 6
# Description:          Runs the open-vm-tools services
# Short-Description:    Runs the open-vm-tools services
### END INIT INFO

. /lib/lsb/init-functions

case "${1}" in
    start)
        log_daemon_msg "Starting bitcoind" "bitcoind"
        su btc -c "screen -dmS bitcoind bitcoind -nodebuglogfile -maxconnections=256 -datadir=/blockchain -rpcpassword=password -server -listenonion=0"
        log_end_msg 0
        ;;

    stop)
        log_daemon_msg "Stopping bitcoind" "bitcoind"
        su btc -c "bitcoin-cli -rpcpassword=password stop"
        sleep 15
        log_end_msg 0
        ;;

    force-reload|restart)
        ${0} stop
        ${0} start
        ;;

    *)
        log_success_msg "Usage: ${0} {start|stop|restart|force-reload}"
        exit 1
        ;;
esac

Das Script benötigt screen, welches Du wie folgt installieren kannst. Außerdem müssen wir sicherstellen, dass die korrekten Rechte für das Start-Script gesetzt sind:

# apt-get install screen
# chown root: /etc/init.d/cryptostack
# chmod 0755 /etc/init.d/cryptostack

Nun ist es Zeit, dass wir bitcoind und das Script testen:

# /etc/init.d/cryptostack start
Starting cryptostack (via systemctl): cryptostack.service.

Das Start-Script startet für uns nun bitcoind in einer screen-Session unter dem Benutzer btc. Als benutzer btc kann man auch in die screen-Session hineinsehen:

$ screen -r

Wenn Du die screen-Session wieder beenden willst geht das mit der folgenden Tastensequenz: [Strg]+[A] gefolgt von [D].

Im Endeffekt starten wir bitcoind mit folgenden Parametern:

bitcoind -nodebuglogfile -maxconnections=256 -datadir=/blockchain -rpcpassword=password -server -listenonion=0

Dies führt dazu, dass wir 256 Gossip-Clients akzeptieren (es ist OK, wenn andere von mir die Blockchain herunterladen). Zudem schreiben wir keine Debug-Log-Datei, verwenden kein ToR-Netzwerk, speichern die Blockchain nach /blockchain und setzen password als Passwort für RPC-Calls.

Zum Beenden führen wir folgendes aus:

bitcoin-cli -rpcpassword=password stop

…was über das RPC-Interface einen Befehl zum Beenden an bitcoind sendet. So kannst Du abfragen, wie weit bitcoind bereits synchronisiert ist:

$ bitcoin-cli -rpcpassword=password -getinfo
{
  "version": 210100,
  "blocks": 697446,
  "headers": 697446,
  "verificationprogress": 0.9999992350927487,
  "timeoffset": 0,
  "connections": {
    "in": 11,
    "out": 10,
    "total": 21
  },
  "proxy": "",
  "difficulty": 15556093717702.55,
  "chain": "main",
  "relayfee": 0.00001000,
  "warnings": ""
}

blocks gibt an, auf welcher höhe euer Stand der Blockchain ist. Falls ihr eingehende Verbindungen erlauben wollt solltet ihr Port tcp/8333 öffnen oder forwarden. (Es wäre nett dem Netzwerk etwas zurück zu geben, welches Euch so bereitwillig bei der Synchronisierung Deiner Node die Blockchain ausgeliefert hat.)

Um unser StartScript bei Bootvorgang automatisch zu starten und zu beenden müssen diese Symlinks gesetzt sein:

$ su -
# cd /etc/rc3.d
# ln -s ../init.d/cryptostack S99cryptostack
# cd /etc/rc4.d
# ln -s ../init.d/cryptostack S99cryptostack
# cd /etc/rc5.d
# ln -s ../init.d/cryptostack S99cryptostack
# cd /etc/rc0.d
# ln -s ../init.d/cryptostack K99cryptostack
# cd /etc/rc1.d
# ln -s ../init.d/cryptostack K99cryptostack
# cd /etc/rc2.d
# ln -s ../init.d/cryptostack K99cryptostack
# cd /etc/rc6.d
# ln -s ../init.d/cryptostack K99cryptostack

Ich schlage vor das System kurz neu zu starten um zu sehen, ob unser Start-Script beim Bootvorgang tatsächlich gestartet wird:

# init 6

c-lightning installieren.

Bevor Du c-lightning startest sollte bitcoind synchronisiert sein. Kompilieren und installieren kannst Du es aber auch schon jetzt. c-lightning findest auf GitHub.

$ cd
$ wget https://github.com/ElementsProject/lightning/releases/download/v0.10.1/clightning-v0.10.1.zip
$ su -
# apt-get install unzip autoconf automake build-essential git libtool libgmp-dev \
  libsqlite3-dev python3 python3-mako net-tools zlib1g-dev libsodium-dev \
  gettext
# [Strg]+[D]
$ cd work
$ rm -rf /home/btc/work/*
$ unzip ../clightning-v0.10.1.zip
$ cd clightning-v0.10.1
$ ./configure --prefix=/home/btc/inst
$ make -j 1
$ make install
$ cd ../../inst
$ ls -l
insgesamt 12
drwxr-xr-x 2 btc btc 4096 25. Aug 02:56 bin
drwxr-xr-x 3 btc btc 4096 25. Aug 02:56 libexec
drwxr-xr-x 4 btc btc 4096 25. Aug 02:56 share

make install hat die Dateien jetzt in das Verzeichnis kopiert, welches wir beim ./configure-Aufruf angegeben haben. Dies ist natürlich nicht das finale Ziel, aber ich schaue mir gerne an, welche Dateien mit der Installation erstellt werden. Denn wenn ich später Updaten muss möchte ich nicht, dass Dateien, die dann obsolete sind erhalten bleiben. Die finale Installation kann so vorgenommen werden:

$ su -
# cd /home/btc/inst
# install -m 0755 -o root -g root -t /usr/local/bin bin/*
# mkdir -p /usr/local/libexec/c-lightning/plugins
# install -m 0755 -o root -g root -t /usr/local/libexec/c-lightning libexec/c-lightning/*
# install -m 0755 -o root -g root -t /usr/local/libexec/c-lightning/plugins libexec/c-lightning/plugins/*
# cp -R share /usr/local

Aus den Verzeichnissen und Dateien aus dem inst-Verzeichnis leite ich dann ab, was ich später löschen muss, bevor ich eine aktuellere Version „darüber“ installiere. Dies kann deshalb wichtig sein, weil c-lightning Plugins mit ausliefert. Sollte ein Plugin bei einem Update weg fallen möchte ich nicht, dass alter Code von früheren Versionen durch den Plugin-Manager ausgeführt wird. (Reine Sicherheitsmaßnahme.)

Das Start-Script muss nun noch angepasst werden. Nach der Start-Zeile für bitcoind fügen wir folgendes ein:

sleep 12
su btc -c "screen -dmS lightningd lightningd --network bitcoin --addr 127.0.0.1 --bitcoin-rpcpassword password --alias Noname --rgb 202020 --min-capacity-sat 900000"

Die IP-Adresse hinter dem --addr-Parameter muss natürlich mit Deiner öffentlichen IP-Adresse substituiert werden. --alias und --rgb sind Namen und eine Farb-ID mit der die Node „identifiziert“ wird. Ist natürlich keine echte Identifikation, aber ihr könnt Eure Node so auf Webseiten wie 1ml.com oder amboss.space besser finden. --min-capacity-sat stellt ein, dass fremde Nodes zu meiner Node nur einen Channel öffnen dürfen, wenn dieser mindestens 0,9 Mio. Satoshi groß ist. Ihr könnt diesen Parameter auch weglassen, wenn ihr dort keine Einschränkung haben wollt.

Vor der Zeile in der bitcoind beendet solltest Du das Einfügen:

su btc -c "lightning-cli stop"
sleep 5

Starte den cryptostack neu:

# /etc/init.d/cryptostack restart

Mit dem folgenden Kommando kannst Du sehen, was das screen von c-lightning anzeigt:

$ screen -r lightningd
2021-08-25T01:44:01.392Z UNUSUAL lightningd: Creating configuration directory /home/btc/.lightning/bitcoin
2021-08-25T01:44:01.392Z UNUSUAL lightningd: Creating configuration directory /home/btc/.lightning/bitcoin
2021-08-25T01:44:01.439Z INFO    database: Creating database
2021-08-25T01:44:01.464Z UNUSUAL hsmd: HSM: created new hsm_secret file
2021-08-25T01:44:01.512Z INFO    plugin-bcli: bitcoin-cli initialized and connected to bitcoind.
2021-08-25T01:44:01.525Z INFO    lightningd: --------------------------------------------------
2021-08-25T01:44:01.526Z INFO    lightningd: Server started with public key 02b3...e846, alias Noname (color #202020) and lightningd 0.10.1

screen kann wieder mit [Strg]+[A] gefolgt von [D] beendet werden.

Bevor wir nun weiter machen solltest Du sicherstellen, dass Deine Lightning-Node von außen über Port tcp/9735 erreichbar ist.

Mit getinfo können wir überprüfen, ob c-lightning läuft:

$ lightning-cli getinfo

Um mit unserer Lightning-Node Channels eröffnen zu können oder Channels annehmen zu können benötigen wir On-Chain-Funds. Dazu erzeugt die Lightning-Node ein internes (hot) Wallet:

$ lightning-cli newaddr

Die nach bech32 angezeigte Adresse ist die Adresse, auf die Du BTC überweisen musst um die c-lightning-Instanz zu verwenden. Es reichen zuerst einmal weniger als die geplante Summe, die Du in die Node stecken möchtest. Es sollten aber mindestens 0,05 BTC sein.

Am besten verwendest Du mempool.space um zu verfolgen, wann Deine Überweisung On-Chain soliditiert wurde. Ihr könnt das auch mit listfunds auf Eurer Lightning-Node überprüfen:

$ lightning-cli listfunds

An dieser Stelle können wir uns überlegen, mit welcher Node wir zuerst einen Channel eröffnen wollen. Ich entscheide mich für eine der Bitfinex-Nodes. Denn darauf kann ich Satoshis überweisen und dann On-Chain zurückschicken und der Channel ist somit (je nach dem) ausgeglichen. Ihr könnt das aber auch zusammen mit einem Freund machen, etc. An dieser Stelle empfehle ich für weitere Fragen den kostenpflichtigen Telegram-Lightning-Channel von @mrsieb.

$ lightning-cli connect 03cde60a6323f7122d5178255766e38114b4722ede08f7c9e0c5df9b912cc201d6@34.65.85.39:9745

…stellt eine Verbindung zu einer der Bitfinex-Nodes her. Erst ab jetzt beginnt c-lightning eine Verbindung zum Lightning-Netzwerk herzustellen und andere Nodes, sowie öffentliche Channels herunterzuladen. listchannels listet alle bekannten Kanäle und listnodes alle bekannten Nodes auf:

$ lightning-cli listchannels
$ lightning-cli listnodes

Dies erstellt einen Kanal mit 4 Mio. Satoshis (dem Minimum was Bitfinex-Nodes akzeptieren) mit einer der Bitfinex-Nodes:

$ lightning-cli fundchannel 03cde60a6323f7122d5178255766e38114b4722ede08f7c9e0c5df9b912cc201d6 4000000

Du solltest die zurückgelieferte TXID wieder in mempool.space eingeben um die Transaktion zu verfolgen. Nach 3 Bestätigungen gilt der Kanal zwischen den Teilnehmern als eröffnet, aber erst nach 6 Bestätigungen als „öffentlich“. Ab dann kannst Du Deine Node auch in öffentlichen Auflistungen finden.

Wenn der Kanal bestätigt ist kannst Du mit listfunds die Funds abfragen:

$ lightning-cli listfunds

Der Eintrag „our_amount_msat“ gibt dabei an, wieviel der Channel-Kapazität auf unserer Seite ist – in dem Fall alles. Dies bedeutet, dass uns über diesen Channel niemand Geld schicken kann. Erst wenn wir etwas darüber verschickt haben und somit die Balance nicht mehr nur auf unserer Seite ist können wir etwas über den Channel empfangen. Später wird clboss die Channel für uns ausbalancieren. Manuell können wir dies im Fall von Bitfinex nun wie folgt machen:

  1. Wir überweisen auf Bitfinex mit Lightning die Hälfte der Channel-Kapazität.
  2. Mit Bitfinex überweisen wir diese in diesem Beispiel 2 Mio sat on-chain wieder auf unsere oben generierte Lightning-Node-Adresse.

Es gibt hier noch viele weitere Strategien und Balancing-Möglichkeiten, die aber nicht Teil dieses Tutorials sind.

RTL installieren

Ride the Lightning ist eine grafische Benutzeroberfläche in Form einer Webseite. Ursprünglich für lnd entwickelt benötigt es ein zusätzliches Plugin um mit c-lightning kommunizieren zu können. Eine Installationsanleitung findet sich hier.

$ wget https://github.com/Ride-The-Lightning/c-lightning-REST/archive/refs/tags/v0.4.4.tar.gz
$ cd work
$ rm -rf /home/btc/work/*
$ tar -xvf ../v0.4.4.tar.gz
$ cd c-lightning-REST-0.4.4
$ su -
# apt-get install npm
# [Strg]+[D]
$ npm install --only=prod
$ cd ..
$ mv c-lightning-REST-0.4.4 ~/cl-rest

Und jetzt RTL:

$ cd
$ wget https://github.com/Ride-The-Lightning/RTL/archive/refs/tags/v0.11.0.tar.gz
$ cd work
$ tar xvf ../v0.11.0.tar.gz
$ cd RTL-0.11.0
$ npm install --only=prod
$ cp docs/Sample-RTL-Config.json ./RTL-Config.json

Editiere die RTL-Config.json-Datei, dass sie wie folgt aussieht:

{
  "multiPass": "password",
  "port": "3000",
  "defaultNodeIndex": 1,
  "SSO": {
    "rtlSSO": 0,
    "rtlCookiePath": "",
    "logoutRedirectLink": ""
  },
  "nodes": [
    {
      "index": 1,
      "lnNode": "MeineNode",
      "lnImplementation": "CLT",
      "Authentication": {
        "macaroonPath": "/home/btc/cl-rest/certs"
      },
      "Settings": {
        "userPersona": "MERCHANT",
        "themeMode": "DAY",
        "themeColor": "PURPLE",
        "enableLogging": false,
        "lnServerUrl": "https://localhost:3003",
        "fiatConversion": false
      }
    }
  ]
}

RTL muss noch aus dem inst-Folder ins Home-Verzeichnis verschoben werden:

$ mv /home/btc/work/RTL-0.11.0 /home/btc/rtl

Die start sowie stop-Sektion unseres Start-Scripts (/etc/init.d/cryptostack) sollte wie folgt mit dem root-User abgeändert werden:

start)
    log_daemon_msg "Starting bitcoind" "bitcoind"
    su btc -c "screen -dmS bitcoind bitcoind -nodebuglogfile -maxconnections=256 -datadir=/blockchain -rpcpassword=password -server -listenonion=0"
    sleep 12
    su btc -c "screen -dmS lightningd lightningd --network bitcoin --addr 127.0.0.1 --bitcoin-rpcpassword password --alias Noname --rgb 202020 --min-capacity-sat 1900000 --plugin=/home/btc/cl-rest/plugin.js --rest-port=3003"
    sleep 3
    su btc -c "screen -dmS rtl node /home/btc/rtl/rtl"
    log_end_msg 0
    ;;

stop)
    log_daemon_msg "Stopping bitcoind" "bitcoind"
    su btc -c "lightning-cli stop"
    sleep 2
    su btc -c "killall node"
    su btc -c "bitcoin-cli -rpcpassword=password stop"
    sleep 15
    log_end_msg 0
    ;;

Für die korrekte Ausführung benötigen wir allerdings killall, welches bei Debian im Paket psmisc enthalten ist:

# apt-get install psmisc

Bevor wir das testen solltest Du die Firewall o.Ä. so konfigurieren, dass auf Port tcp/3003 nicht von außen zugegriffen werden kann. Port tcp/3000 sollte nur für berechtigte Adressen geöffnet werden.

Nach einem restart des Scripts:

# /etc/init.d/cryptostack restart

…solltest Du mit http://<ip>:3000/ auf RTL verbinden können. Das initiale Passwort ist wie in der Config-File angegeben: „password“. (RTL möchte dieses unsichere Passwort sowieso beim ersten Login ändern.)

clboss installieren.

Fahr‘ hier erst fort, wenn Du schon ein paar Channels angelegt hast oder selbst keine Channels anlegen möchtest. Wenn Du strikt dem Tutorial folgst wird clboss möglicherweise automatisch über boltz.exchange einen Lightning → OnChain Swap machen und zwar evtl. auch bei hohen Gebühren (entweder für boltz.exchange oder auch normale Bitcoin-Gebühren), weil clboss keine andere Möglichkeit sieht den Channel auszugleichen.

clboss ist ein geniales Stück Software und hat es geschafft, dass ich mit einem Einsatz von 0,15 BTC ungefähr 1000 sats pro Tag an Transaktionsgebühren eingenommen habe. ~1000 sats pro Tag, die durch eine „ehrliche Dienstleistung“ eingenommen wurden und nicht durch dubiose Defi-Geschäfte. (Ich schreibe das jetzt nur als Wiedergutmachung, weil ich oben die Dezentralität von Bitcoin kritisiert habe.)

Installation:

$ cd
$ wget https://github.com/ZmnSCPxj/clboss/releases/download/0.11B/clboss-0.11B.tar.gz
$ cd work
$ tar xvf ../clboss-0.11B.tar.gz
$ su -
# apt-get install pkg-config libev-dev libcurl4-gnutls-dev libsqlite3-dev
# [Strg]+[D]
$ cd clboss-0.11B
$ ./configure --prefix=/home/btc/inst
$ make -j 1
$ rm -rf /home/btc/inst/*
$ make install
# su –
# install -m 0755 -o root -g root -t /usr/local/bin /home/btc/inst/bin/clboss
# [Strg]+[D]

Die Zeile für den Start von c-lightning in unserem Start-Script (/etc/init.d/cryptostack) ändern wir wie folgt ab:

su btc -c "screen -dmS lightningd lightningd --network bitcoin --addr 127.0.0.1 --bitcoin-rpcpassword password --alias Noname --rgb 202020 --min-capacity-sat 1900000 --plugin=/usr/local/bin/clboss --clboss-min-onchain=1000000 --plugin=/home/btc/cl-rest/plugin.js --rest-port=3003"

Achte darauf, dass die Anzahl der --clboss-min-onchain größer ist als die Funds die Dir noch OnChain zur Verfügung stehen. Damit verhindern wir, dass clboss diese Funds vorerst verwenden kann und Channels öffnet.

Wenn Du das alles neustartest (Betriebssystem oder nur cryptostack) und dann zur screen-Session von c-lightning verbindest siehst Du, was sich clboss so überlegt:

 # /etc/init.d/cryptostack restart
$ screen -r lightningd
2021-08-25T04:38:07.996Z INFO    plugin-clboss: ChannelFinderByDistance: No candidate leaves.
2021-08-25T04:38:07.999Z INFO    plugin-clboss: New block at 697474
2021-08-25T04:38:08.001Z INFO    plugin-clboss: ChannelCreationDecider: Low fees now. Will create channels worth 5999724000msat (1000000000msat reserved for onchain actions).
2021-08-25T04:38:08.009Z INFO    plugin-clboss: ChannelCreator: Insufficient channel candidates, will solicit more.
2021-08-25T04:38:08.011Z INFO    plugin-clboss: ChannelFinderByEarnedFee: No peers with earned outgoing fee, nothing for us to process.
2021-08-25T04:38:10.584Z INFO    plugin-clboss: FeeModderBySize: Peer 033d8656219478701227199cbd6f670335c8d408a92ae88b962c49d4dc0e83e025 has 426 other peers, 28 of which have less capacity than us, 397 have more.  Multiplier: 0.556068
2021-08-25T04:38:12.936Z INFO    plugin-clboss: ChannelFinderByPopularity: Progress: 2429 / 11856 (0.204875)
2021-08-25T04:38:22.875Z INFO    plugin-clboss: ChannelFinderByPopularity: Random selection (by popularity): 0242a4ae0c5bef18048fbecf995094b74bfb0f7391418d71ed394784373f41e4f3 (1142 peers), 03864ef025fde8fb587d989186ce6a4a186895ee44a926bfc370e2c366597a3f8f (1843 peers), 024e3985397f704899ddc9ea12dae5c5be351b541259028133ac5d607b401ab2cb (2 peers), 024a2e265cd66066b78a788ae615acdc84b5b0dec9efac36d7ac87513015eaf6ed (13 peers), 03beddc8adbf7d56a7da15cdaf95d97b24d07088c3571b421c0e6f9d551a210342 (43 peers)

clboss fügt ein neues Kommando hinzu, welches ebenfalls Interessante Daten liefert:

$ lightning-cli clboss-status

Meine Empfehlung ist es, clboss erstmal ein paar Stunden ohne die Erlaubnis Channels anzulegen laufen zu lassen, so dass es noch Daten über das Netzwerk sammeln kann. Wenn Du dann möchtest, dass clboss übernimmt kannst Du im cryptostack-Script die Zahl von --clboss-min-onchain= auf 100000 oder sogar 30000 ändern. (Ich verwende lieber mehr Puffer für Channel-Closes, etc. 30000 sat ist das empfohlene Minimum.)

Laut dem Entwickler von clboss wird es folgendes für Dich tun:

  • Es öffnet Channel zu anderen nützlichen Nodes, sofern die OnChain-Gebühren gering sind und OnChain-Funds zur Verfügung stehen.
  • Es akquiriert eingehende Funds mit Hilfe von boltz.exchange swaps.
  • Channel-Rebelancing durch Selbst-Bezahlung.
  • Steuert die Fees aller Channels.

Mit clboss-unmanage kannst Du clboss zwingen keine Channels zu öffnen (open) oder einen bestimmten Channel nicht zu schließen (close) oder die Fees dafür nicht anzupassen (lnfee). Für das #zerobasefee-Movement habe ich auch dieses Ticket eröffnet, denn clboss setzt auch eine Offset-Fee. Weitere Infos findest Du hier.

12 „Gefällt mir“

Starke Sache, Ghosty :ok_hand:

2 „Gefällt mir“

Spitzen Tutorial, danke dafür! :+1:

So wie ich das verstehe ist c-lightning mit lnd vergleichbar. Wo liegen denn grob die Unterschiede, bzw. was unterscheidet die c-lightning Node von einem Raspiblitz oder -bolt?

2 „Gefällt mir“

Ghostie tausend Dank für diese BAHNBRECHENDE Anleitung!
Wirklich klasse!

3 „Gefällt mir“

Es gibt sehr viel missverständnis über die diversen Lightning implementationen.

Ein Lightning Node besteht immer aus:

** einee BitcoinFull Node
** einem Lightningdienst

  • LND - Lightning Network Daemon (Golang)
  • eclair - A Scala implementation of the Lightning Network (Scala)
  • lit - Lightning Network node software (Golang)
  • c-lightning - A Lightning Network implementation in C
  • rust-lightning - A Lightning Network implementation in Rust [Incomplete]
  • lightning-onion - Onion Routed Micropayments for the Lightning Network (Golang)
  • ptarmigan - C++ BOLT-Compliant Lightning Network Implementation

Die Bekanntesten sind LND und C-Lightning

Die Hauptunterschiede sind die Sprache in der sie geschrieben sind und ein paar details wie
das C-Lightning zb nicht 2 Channells zur selben Peer erlaubt. Aber Sonst können die alle untereinander reden. Und definitv der clboss automanger

Raspiblitz oder umbrel sind mehr als Distribution zu sehen die als Packet einfach alles an board haben,
Raspiblitz läuft jetzt standrad mässig mit LND, zukünftige Versionen sollen auch die auswahl haben c-lightning zu verwenden.

@GhostTyper fette Anleitung

3 „Gefällt mir“

Soweit ist mir das klar. Aber gerade wenn ich in Zukunft sogar auf einem Raspiblitz die Auswahl habe, wäre es natürlich interessant die groben Unterschiede zu kennen.

Die Implementierungen kommen ja von konkurrierenden Firmen, die das jeweils in der Sprache ihrer Wahl umsetzen. Wenn das schon, zusammen mit der Einfachheit der Einrichtung, der wesentliche Unterschied ist, auch gut.

Du hast völig recht. Ich denke es könnte durch aus sein das es dann die detail unterschiede sind die es dann interessant machen. Aber um die genau auszumachen muss man mit beiden systemen erfahrung sammeln.

1 „Gefällt mir“

cbloss wird in Zukunft eine Option für zerobasefee bekommen.

Heyo,
erstmal vielen Dank für das super Tutorial!
Eine Frage habe ich noch: Sind die eingenommenen Fees die du oben mit ~1000 sats angegeben hast noch möglich? Ich habe meine Node mit ähnlichem Einsatz laufen lassen wie angegeben, nach 10 Tagen kamen dabei 180 sats fees raus. Kann es sein, dass ich CLBOSS zu früh die Erlaubnis gegeben habe, Channel zu öffnen? Ich habe 5 Stunden gewartet und dann freigeschaltet, doch die Peers die er mir jetzt vorschlägt zum Channel öffnen sind ganz andere. Ist es möglich, dass ich dadurch „schlechte“ Peers / Channel erwischt habe?

Hallo @m0rtis,

Derzeit ist es etwas weniger, vor allem auch, weil ich die Node verkleinert habe, aber im Schnitt immer noch mehr als 100 sat pro Tag. Es könnte sein, dass es für clboss mit Deinen Peers keine „gute“ Möglichkeit gibt die Channels auszubalancieren.

Du kannst mir Deinen PublicKey per PN schicken?

Es gibt derzeit eine Sicherheitslücke in Lightning, die im master-Branch gefixed ist, wofür aber erst diese Woche ein neues Release kommen soll. Mit dem Tutorial von mir bist Du dafür anfällig. Ein Update kommt dann, wenn ein Release mit dem Patch gemacht wurde.

Sorry für die Umstände.

Vorwort

Hallo. Dies ist eine Weiterführung des des initialen Posts, in dem wir:

  • bitcoind und
  • c-lightning updaten werden.
  • Generell solltet ihr das System Up-To-Date halten (letzter Abschnitt).

c-lightning sollte von Dir auf jeden Fall upgedated werden, da es derzeit eine Sicherheitslücke enthält. Es gibt aber noch weitere Verbesserungen. Das bitcoind-Update ist optional für c-lightning, es spricht aber nichts dagegen es trotzdem mitzunehmen.

Anfallender Traffic.

Ich habe an der Node nun auch den Ressourcen-Verbrauch gemessen und muss sagen dieser ist ziemlich hoch. Die Konfiguration erlaubt es jedem die Blockchain von uns herunterzuladen und wir bedienen sehr viele Clients zeitgleich. Diese Konfiguration hält im Schnitt 160 TCP/IP-Verbindungen und erzeugt bei mir c.A. 5 TB Traffic pro Monat. (Das ist nicht wenig, ungefähr 5x so viel wie eine StorJ-Node oder 12 Mal so viel wie eine Chia-Node, was schon für die Nutzung des Netzwerks spricht auch wenn der mempool leer ist.)

Bitte beachte…

…die Formatierungshinweise und generell alle Hinweise aus dem initialen Post!

bitcoind updaten

Zuerst beenden wir den cryptostack:

$ su -
# /etc/init.d/cryptostack stop
# [Strg]+[D]

Im Prinzip machen wir danach das selbe wie schon bei der bitcoind-Installation. Hier was Du tun musst ohne den Check der Prüfsummen. (Das kannst Du Dir vom originalen Post abgucken.) Ich gehe davon aus, dass das work-Verzeichnis noch existiert, aber leer ist. Wenn es nicht leer ist, dann solltest Du es leeren (rm -rf ~/work/*):

$ wget https://bitcoincore.org/bin/bitcoin-core-22.0/bitcoin-22.0-x86_64-linux-gnu.tar.gz
$ cd work
$ tar xvf ../bitcoin-22.0-x86_64-linux-gnu.tar.gz
$ su
# install -m 0755 -o root -g root -t /usr/local/bin bitcoin-22.0/bin/bitcoind
# install -m 0755 -o root -g root -t /usr/local/bin bitcoin-22.0/bin/bitcoin-cli
# /etc/init.d/cryptostack start
# [Strg]+[D]

Durch die zusätzliche Zeile /etc/init.d/cryptostack start sollte alles wieder laufen und wir können testen, ob die Installation erfolgreich gewesen ist:

$ bitcoind --version
Bitcoin Core version v22.0.0
$ bitcoin-cli --version
Bitcoin Core RPC client version v22.0.0

c-lightning Updaten

Zuerst beenden wir den cryptostack:

$ su -
# /etc/init.d/cryptostack stop
# [Strg]+[D]

Diese Befehle sollten c-lightning aktualisieren. Ich gehe davon aus, dass das work-Verzeichnis noch existiert, aber leer ist. Wenn es nicht leer ist, dann solltest Du es leeren (rm -rf ~/work/*). Außerdem gehe ich davon aus, dass Du wie immer im Home-Verzeichnis startest (cd):

$ su -
# apt-get install -y python3-pip
# pip install mrkd
# [Strg]+[D]
$ wget https://github.com/ElementsProject/lightning/releases/download/v0.10.2/clightning-v0.10.2.zip
$ cd work
$ unzip ../clightning-v0.10.2.zip
$ cd clightning-v0.10.2
$ rm -rf ~/inst
$ ./configure --prefix=/home/btc/inst
$ make -j 1
$ make install
$ cd ~/inst
$ ls -l
insgesamt 12
drwxr-xr-x 2 btc btc 4096 13. Nov 17:54 bin
drwxr-xr-x 3 btc btc 4096 13. Nov 17:54 libexec
drwxr-xr-x 4 btc btc 4096 13. Nov 17:54 share

Leider mussten wir pip und mrkd installieren, was eigentlich nur für Entwickler notwendig sein sollte. Aber ohne mrkd läuft das make nicht durch.

Die Dateien aus ~/inst und /usr/local/bin und /usr/local/libexec/c-lightning und /usr/local/libexec/c-lightning/plugins kannst Du jetzt vergleichen, ob evtl. alte Dateien (=Dateien nur aus /usr/local, die zur alten c-lightning-Installation gehört haben) nicht mehr benötigt werden. Wenn Du das gewissenhaft machst wirst Du feststellen, dass sogar ein neues Modul dazugekommen ist: lightning_websocketd. Alte Dateien müssen also nicht gelöscht werden:

$ su -
# cd /home/btc/inst
# install -m 0755 -o root -g root -t /usr/local/bin bin/*
# install -m 0755 -o root -g root -t /usr/local/libexec/c-lightning libexec/c-lightning/*
# cp -R share /usr/local
# /etc/init.d/cryptostack start
# [Strg]+[D]

Es sollte alles wieder funktionieren. Testen wir das:

$ lightning-cli --version
0.10.2
$ lightning-cli getinfo
[...]
   "version": "0.10.2",
[...]

Super, das Update scheint geklappt zu haben. Testen wir, ob clboss auch noch damit tut:

$ lightning-cli clboss-status

Wenn ihr hier ebenfalls Output seht und ihr euch weiterhin in RTL einloggen könnt ist alles in Ordnung.

System updaten

Es ist generell eine gute Idee das System aktuell zu halten:

$ su -
# apt-get update
# apt-get -y upgrade
# # Falls ihr direkt neustarten wollt, dann noch:
# init 6
# # Ansonsten:
# [Strg]+[D]

Testet nach dem Neustart (den ihr durchführen solltet) nochmals alles!

Verdienst

Ich wurde angeschrieben, dass einige Leute diese 1000 sat pro Tag nicht erreichen. Und seit einiger Zeit ist das auch bei mir so. Trotzdem ist mein Umsatz nicht so schlecht wie von manchen beschrieben. Daher habe ich die folgenden Tipps:

  1. Schließt Euch einer der Lightning-Gruppen an. Dort gibt es Tipps. Evtl. müsst ihr manuell in die Channels eingreifen.
  2. Bildet RoFs (Ring of Fire) oder macht bei einem mit. Das erhöht die Möglichenkeiten für clboss einen Channel auszugleichen, was uns zum nächsten Punkt führt:
  3. clboss rebalanced nicht, wenn ihr dabei Verlust machen würdet. Es gibt auch keine --reckless-Option.
2 „Gefällt mir“

Hallo Ghosty,
Unter „Was brauchst Du“ schreibst Du dass eine statische IP benötigt wird.
Im Privat Haushalt hat das kaum jemand.
Hast Du konkrete Tipps?

  • Mein ISP und FritzBiox bieten IPv6 an, hilft mir das weiter?
  • Manche empfehlen DynDNS: reicht das auch für eine LND node? Die braucht doch die clear IP, …eine feste Domain hilft hier doch nicht weiter, richtig?
  • virtuellen Server (mit fester IP) anmieten und Traffic an die eigene Node weiterleiten?
  • Kann eine VPN Verbindung (oder Tailscale) weiterhelfen?
    Danke Dir!
    P.S.: Frage bezüglich Umbrel auf Rasperry Pi4

Hey @TeeGee,

ich habe Umbrel nie benutzt. Als ich mich mit dem Thema beschäftigt habe konnte man noch nicht zuverlässig Hostnamen als Endpunkt über das Lightning-Gossip-Protokoll broadcasten, weil die IPs von anderen Clients nicht regelmäßig neu aufgelöst werden.

Mittlerweile soll das angeblich besser sein, aber ich habe keine Erfahrungswerte dazu.

Wenn Du schon einen VServer anmietest, dann würde ich dort einfach alles installieren, außer Du hast besondere Sicherheitsanforderungen.

Ansonsten ist ein Raspberry Pi keine gute Hardware.