Hallo,
ich probiere mich gerade im Lightning Netzwerk aus und will das hier dokumentieren. Auch, weil es zum LN nichts online gibt was selbst für erfahrene Computernutzer ohne Weiteres zu bewältigen wäre. Wenn schon die Installation von Eclair kaum hinzubekommen ist, dann ist vollkommen klar, dass das LN nicht aus den Puschen kommt. Deshalb diese Anleitung um die Einstiegshürden zu überwinden. Diesen Text werde ich nach und nach erweitern. Mein Ausganspunkt ist hierbei dieser Beitrag:
https://medium.com/@ajs1287/setting-up-bitcoin-lightning-network-node-on-macos-is-peanuts-eclair-5afbef553d71D.h., wenn ich mit meiner Anleitung noch nicht fertig bin und ihr weiterspielen wollt, dann halten euch an obigen Beitrag.
Sonstige ReferenzenLightning Network Megathread:
https://www.reddit.com/r/Bitcoin/comments/7pwna9/lightning_network_megathread/Frage zu Eclair lassen sich mit Github-Account am besten hier beantworten:
https://gitter.im/ACINQ/eclair
Voraussetzungen- Ein Rechner mit genug Leistung und 64bit, läuft natürlich analog auch für ein 32bit System, sind dann aber andere Dateien
- Ubuntu 16.04 LTS (http://de.releases.ubuntu.com/16.04.3/), geht aber bestimmt auch mit einer anderen Version
- Der Rechner sollte eigenständig, Betriebssystem frisch installiert und getrennt von wichtigen Daten sein
- Erfahrung mit Linux, Netzwerk etc. pp.
- Eine zügige Netzwerkverbindung
- Etwa 2h Zeit da mindestens 2 Bitcoin Transaktionen durchgeführt werden
- Der Nutzer hier ist "curiosity81", der muss entsprechend angepasst werden
- Platzhalter sind z.B. "" und müssen entsprechend ersetzt werden
Zu Beginn gehen wir in den Download-Ordner (den gibt es bei Ubuntu standardmäßig):
cd /home/curiosity81/Downloads
Bitcoin Core (vor Synchronisierung)Und laden Bitcoin Core (
https://bitcoin.org/en/download) herunter:
wget https://bitcoin.org/bin/bitcoin-core-0.15.1/bitcoin-0.15.1-x86_64-linux-gnu.tar.gz
Zusätzlich besorgen wir uns die Signatur von van der Laan:
wget https://bitcoin.org/laanwj-releases.asc
Wir importieren den Schlüssel:
gpg --import laanwj-releases.asc
Zu guter Letzt besorgen wir uns die Hashsummen der Dateien:
wget https://bitcoin.org/bin/bitcoin-core-0.15.1/SHA256SUMS.asc
Nun verifizieren wir Bitcoin Core bevor wir es entpacken:
gpg --verify SHA256SUMS.asc
sha256sum bitcoin-0.15.1-x86_64-linux-gnu.tar.gz | grep -o 387c2e12c67250892b0814f26a5a38f837ca8ab68c86af517f975a2a2710225b
Die lange Hex-Zahl stammt aus SHA256SUM.asc und entspricht der Hashsumme der runtergeladenen Datei. Wenn grep ein Ergebnis ausgibt, dann ist alles ok. Gibt bestimmt elegantere Lösungen das zu prüfen als meine.
Jetzt entpacken wir Bitcoin Core:
tar -xzvf bitcoin-0.15.1-x86_64-linux-gnu.tar.gz
Und passen die Bitcoin Konfigurationsdatei an:
mkdir /home/curiosity81/.bitcoin
nano /home/curiosity81/.bitcoin/bitcoin.conf
Wir füllen die Datei folgendermaßen:
testnet=1
server=1
rpcuser=
rpcpassword=
txindex=1
zmqpubrawblock=tcp://127.0.0.1:29000
zmqpubrawtx=tcp://127.0.0.1:29000
Die Platzhalter
und müssen mit einem entsprechenden Werten ersetzt werden. Wir speichern und verlassen nano mit Strg+X.
Nun können wir Bitcoin Core starten:
/home/curiosity81/Downloads/bitcoin-0.15.1/bin/bitcoin-qt
Bitcoin Core wird sich nun mit dem Testnetz synchronisieren. Das dauert ein Weilchen, aber nicht solange wie im Hauptnetz. Bei mir waren das ca. 1.5h.
JRE 1.8
Nun müssen wir das Java Runtime Environment von Oracle installieren, damit Eclair auch läuft. Wir gehen also den Weg des geringsten Widerstands. Fragt mich aber nicht zu den Lizenzen und was sich Eclair dabei gedacht hat Oracle zu nutzen. Dies hier ist nur eine Anleitung. Jeder installiert also auf eigene Entscheidung hin dieses Oracle-Produkt.
Wir gehen zu Beginn per Browser (Firefox) auf http://www.oracle.com/technetwork/java/javase/downloads/jre8-downloads-2133155.html. Dort wählen wir
jre-8u162-linux-x64.tar.gz
aus, bestätigen das License Agreement und beginnen den Download. Die Datei landet in unserem Download-Ordner. Da Bitcoin Core wahrscheinlich noch synchronisiert so öffenen wir ein neues Terminal und gehen wieder in den Download-Ordner:
cd /home/curiosity81/Downloads
Dann verifizieren wir die Hashsumme der runtergeladenen Datei. Dazu klicken wir oben auf der Oracle Seite (http://www.oracle.com/technetwork/java/javase/downloads/jre8-downloads-2133155.html) bei
JRE 8u162 Checksum
auf "Checksum" und merken uns den sha256-Wert für die entsprechende Datei:
dfa25ebd1f90bf74ad7ba2dacb0e08d884594e733c9a522b58256778031341a4
Jetzt testen wir den Hash:
sha256sum jre-8u162-linux-x64.tar.gz | grep -o dfa25ebd1f90bf74ad7ba2dacb0e08d884594e733c9a522b58256778031341a4
Wenn alles ok ist so entpacken wir die Datei:
tar -xzfv jre-8u162-linux-x64.tar.gz
Und installieren java (https://wiki.ubuntuusers.de/Java/Installation/Oracle_Java/Java_8/):
sudo mkdir /opt/Oracle_Java
sudo cp jre1.8.0_162/ /opt/Oracle_Java/ -R
sudo update-alternatives --install "/usr/bin/java" "java" "/opt/Oracle_Java/jre1.8.0_162/bin/java" 1
sudo update-alternatives --install "/usr/bin/javaws" "javaws" "/opt/Oracle_Java/jre1.8.0_162/bin/javaws" 1
sudo update-alternatives --set "java" "/opt/Oracle_Java/jre1.8.0_162/bin/java"
sudo update-alternatives --set "javaws" "/opt/Oracle_Java/jre1.8.0_162/bin/javaws"
java -version
Wenn das letzte Kommando die Version wie folgt ausgibt:
java version "1.8.0_162"
Java(TM) SE Runtime Environment (build 1.8.0_162-b12)
Java HotSpot(TM) 64-Bit Server VM (build 25.162-b12, mixed mode)
So haben wir auch diesen Schritt bewältigt. Weiter geht's.
Eclair
Wir sind immer noch im Download-Ordner, im zweiten Terminal. Nun besorgen wir uns Eclair (https://github.com/ACINQ/eclair). Wir sind immer noch faul und wollen das nicht selbst kompilieren oder bauen. So werden wir uns mit dem jar begnügen (https://github.com/ACINQ/eclair/releases):
wget https://github.com/ACINQ/eclair/releases/download/v0.2-alpha8/eclair-node-gui-0.2-alpha8-8edb2a4.jar
Das war es auch schon. Hier gibt es leider nichts zu verifizieren. Wir wollen aber auch nur im Testnetz spielen. Wir müssen also das Risiko eingehen. Wichtig: Damit Eclair korrekt läuft muss Bitcoin Core nebenher laufen! Nach:
java -jar eclair-node-gui-0.2-alpha8-8edb2a4.jar
Sollte sich dann auch schon was tun, auch wenn das Programm noch nicht konfiguriert ist und deshalb mit Fehlermeldung beendet.
Bitcoin Core (nach Synchronisierung)
In der GUI:
Help -> Debug window -> Console
Dort:
Die Adresse, in meinem Fall:
mtDmzMz7NvuRjptrLWwbdVBs4j7Y3eXvCV
merken wir uns. Dann
addwitnessaddress mtDmzMz7NvuRjptrLWwbdVBs4j7Y3eXvCV
Erzeugt Segwit-Adresse, in meinem Fall:
2MswDJ1kf9aqiC6twrDyUbLqGmtnjtFG4XX
Auch diese merken wir uns.
Nun besorgen wir uns Geld auf:
https://testnet.manu.backend.hamburg/faucet
Indem wir unsere Segwit-Adresse dort angeben. Ich bekam z.B. 1.3 BTC auf 2MswDJ1kf9aqiC6twrDyUbLqGmtnjtFG4XX geschickt . Natürlich dauert es hier ca. 1h bis die Transaktion 6x bestätigt und somit nutzbar ist.
Eclair Konfiguration
Wir gehen zu Beginn wieder in den Download-Order
cd /home/curiosity81/Downloads
Falls der Konfigurationsordner von Eclair noch nicht existiert so erzeugen wir ihn:
mkdir /home/curiosity81/.eclair
Dann editieren wir die eclair.conf:
nano /home/curiosity81/.eclair/eclair.conf
Und füllen die Datei wie folgt:
eclair.server.port=9735
eclair.node-alias="curiosity81"
eclair.node-color="9716b7"
eclair.bitcoind.rpcuser=""
eclair.bitcoind.rpcpassword=""
eclair.bitcoind.zmq="tcp://127.0.0.1:29000"
eclair.server.public-ips=["xx.xx.xx.xx"]
Für und nutzen wir die Werte, welche wir auch in der bitcoin.conf nutzen. Strg+X speichert die Datei und beendet nano. Damit man später den eigenen Knoten mit den entsprechenden Information auf https://explorer.acinq.co zu sehen bekommt (siehe auch weiter unten), so muss bei eclair.server.public-ips die eigenen IP eingetragen werden. Nur so können sich andere Teilnehmer im Netzwerk mit dem eigenen Knoten verbinden. Wie das abläuft, wenn sich Nachts die ip ändert ... das weiss ich auch nicht. Möglicherweise muss man dann erst den Knoten stoppen, per Skript die Konfiguration entsprechend ändern, und dann den Knoten wieder hochfahren. Das ist aber nur eine Vermutung. Man kann aber, um Testzahlungen durchzuführen, auch "xx.xx.xx.xx" stehen lassen.
Jetzt versuchen wir erneut Eclair zu starten:
java -jar eclair-node-gui-0.2-alpha8-8edb2a4.jar
Und tada, die Eclair-GUI öffnet sich.
Verbindung mit dem Lightning Netzwerk
Wir öffnen im Browser folgende Adresse:
https://explorer.acinq.co
Und suchen uns dort einen Knoten im rechten Scrolldownmenü aus (also nicht in der Karte sondern rechts davon) mit welchem wir uns verbinden können. Wenn man einen Knoten anklickt, dann sieht man weitere Infos wie Alias, Publickey und IP. Für den Anfang begnügen wir uns mit den Knoten, welche eine IP anzeigen. Ich habe mir einen Knoten rausgesucht, der den Alias "pikefloyd" hat. Dessen Daten sind wie folgt, werden sich aber wohl mit der Zeit ändern oder der Knoten verschwindet ganz, seid also flexibel:
Alias: pikefloyd
Publickey: 03c4b20397d476a0d008e61022c96803ada3c11918fff8133db4f7d27273710e03
IP und Port: 81.149.149.156:9735
Daraus bauen wir uns folgende ID aus dem Publickey, IP und Port zusammen:
03c4b20397d476a0d008e61022c96803ada3c11918fff8133db4f7d27273710e03@81.149.149.156:9735
In der Eclair-GUI wählen wir: Channels -> Open channel ...
Dort, bei "Target Node URI", kopieren wir obere ID rein. Zusätzlich klicken wir noch "Simple connection (no channel)" an und drücken "Connect". Nach etwas warten sollte sich die GUI mit Infos zu Channels und Nodes füllen. Wenn ihr eure Bitcoin Core Testnetzwallet wie oben beschrieben mit Faucetcoins gefüllt habt so sind nun auch sicherlich Payment-Channels möglich.
Öffnen eines Payment-Channels
Wie im vorherigen Schritt suchen wir uns einen Knoten im Lightning Netzwerk aus und geben die ID bei "Target Node URI" ein. Heute habe ich mir einen anderen Knoten ausgesucht. Diesmal klicken wir aber NICHT "Simple connection (no channel)" an! Zusätzlich wählen wir eine Bitcoin Betrag aus und geben diesen im Feld "Capacity" ein. Der Betrag muss natürlich kleiner/gleich dem Betrag auf eurer Bitcoin Core Testwallet sein. Ich habe dort mal 100 milliBTC eingegeben. Dann auf "Connect" drücken. Sofort sollte in Bitcoin Core die Meldung einer Transaktion von 0.1 BTC + Transaktiongebühr aufpoppen. Ihr habt also nun 2 Transaktionen in eurer Testwallet. Eine Eingehende von der Faucet und eine Ausgehende um den Channel zu öffnen. Nach dem Drücken von "Connect" handelt Eclair mit dem Channel-Partner etwas aus. Dann sollte in Eclair, bei den "Local Channels" bei "STATE" stehen:
WAIT_FOR_FUNDING_CONFIRMED
Jetzt heisst es etwa eine halbe Stunde zu warten, also 3 Bitcoin-Bestätigungen bis der Channel geöffnet ist. Bei Eclair scheinen nämlich 3 Bestätigungen auszureichen. Solange ist auch euer Knoten noch nicht sichtbar, siehe auch https://explorer.acinq.co/#/faq. Dann sollte in Eclair, bei den "Local Channels" bei "STATE" stehen
Sehen kann ich meinen Knoten auch nach 6 Bestätigungen nicht, liegt wahrscheinlich an den geschlossenen Ports. Ansonsten hat bisher alles fehlerfrei funktioniert.
Mit Lightning Netzwerk bezahlen
Wenn ich mich richtig entsinne, muss einer von den Beiden, der Bezahlende oder der Zubezahlende, dem anderen ein Geheimnis direkt, also nicht über das Lightning Netzwerk, schicken. Fragt mich jetzt nicht wie das genau geht, das war irgendwas mit einer Zufallszahl und deren Hash, welche/r dann durch das Netzwerk propagiert wird und ich habe die Details vergessen (ungefähr bei 9:00 in https://www.youtube.com/watch?v=wIhAmTqXhZQ). D.h. also, dass es sowas wie öffentliche Adressen in einer Blockchain nicht mehr gibt, der Zubezahlende muss einen Zahlungsaufruf generieren, den er dann dem Bezahlenden zu kommen lässt (https://medium.com/@btc_coach/lightning-network-in-action-b18a035c955d). So mein momentanes Verständnis. Ich könnte aber auch falsch liegen. Also korrigiert mich wenn nötig.
Um einen Zahlungsaufruf zu erzeugen geht man in Eclair wie folgt vor: Channels -> Receive Payment. Dort bei "Optional amount to receive" gibt man einen validen Betrag ein (oder auch nicht, ist ja optional) und drückt auf "Generate". Das Ergebnis muss man wohl seinem Gegenüber zukommen lassen.
Hier kann man wohl Phantasiekaffee kaufen:
https://starblocks.acinq.co
Port forwarding und Ähnliches
Gefunden habe ich auf https://explorer.acinq.co/#/faq folgendes dazu, siehe den letzten Punkt:
I cannot connect to a node listed in the explorer.
Connection can fail due to one of the following reasons:
The node is currently offline right now (any channels it might have are temporarily unavailable but stay open).
The node does not announce a public IP.
The public IP announced by the node is not accurate.
The node is not reachable (misconfiguration in port forwarding, firewall...).
...
Bis jetzt hat alles ohne Portforwarding funktioniert. Und raustelefonieren d.h. schlichtes Bezahlen wird auch immer so funktionieren, auch mit geschlossenem Port 9735. Wenn aber euer Port 9735 geschlossen ist und die entsprechenden Pakete nicht an den entsprechenden Computer weitergeleitet werden (Portforwarding), dann bekommt derjenige, der sich mit euch verbinden will, eine Fehlermeldung, obwohl euer Knote wie ein ganz normaler aussieht. Aktuell kann man nämlich nicht unterscheiden, welche Knoten einen offenen Port 9735 haben und bei welchen dieser geschlossen ist. D.h. es wird passieren, dass auch ihr euch mit manchen Knoten nicht verbinden könnt, da diese Port 9735 geschlossen haben. Also nochmal:
Damit sich jemand mit eurem Knoten verbinden kann muss Port 9735 geöffnet sein!
Oder anders ausgedrückt, wenn alle nur anrufen und keiner abnimmt, dann ist das Telefonnetz nutzlos! Soll heissen, wenn alle ihren Port 9735 schliessen, dann gibt es schlicht kein Lightning Netzwerk. Wenn nur ein paar Knoten Port 9735 offen haben, dann ergibt das ein zentralisiertes Netzwerk, weil dann alle anderen sich mit diesen Knoten verbinden müssen. Und am besten wäre es, wenn alle Port 9735 geöffnet haben.