Lightning-Network

Bitcoin : installer « Lightning Network »

Trading du CoinTrading du Coin

Inventé depuis longtemps (sur l’échelle de temps de Bitcoin), implémenté depuis peu, Lightning Network est une évolution majeure du protocole sans en être une : c’est une seconde couche. C’est ce que l’on verra dans ce tutoriel, puisqu’il s’agira de faire interagir le daemon de Lightning (lightningd) avec bitcoind. J’utiliserai C-lightning, l’implémentation en C de Blockstream.

Avant-propos

Lightning Network est une technologie nouvelle. Il est encore « déconseillé » de déployer des nœuds sur le mainnet, bien qu’il y en ait plus de 3000, et 12000 canaux ouverts sur celui-ci à l’heure où j’écris cet article. Comme c’est spécifié un peu partout, les implémentations (c-lightning, lnd, Éclair…) ont des bugs connus et inconnus, et ont de plus été très peu testées : faites donc attention si vous les mettez en place avec de vrais bitcoins. Si vous avez un problème ou une remarque, n’hésitez pas à le dire dans les commentaires ou sur Discord.

Prérequis

Maintenant que la mise en garde est faite, nous allons pouvoir passer au concret : étant donné que tout n’a pas encore été très testé, très peu d’erreurs sont répertoriées et c’est donc beaucoup plus difficile de se sortir d’une impasse. Je vais donc décrire dans cette partie ce que j’attends que vous ayez chez vous, et ce que j’ai chez moi, pour pouvoir comparer en cas de besoin :

  • Un user « bitcoin »
  • bitcoind (avec un service – parenthèse après).
  • bitcoin-cli qui communique sans problème avec bitcoind – et évidemment, bien savoir pourquoi et comment (le fichier bitcoin.conf, etc.)
  • bitcoind interfacé avec Tor ou non, je couvrirai les deux cas.
  • Que vous compreniez comment fonctionnent Bitcoin (si ce n’est pas le cas : ici et ici peuvent être tout à fait humblement un bon commencement 😉 ) et Lightning (si ce n’est pas le cas, je devrais faire bientôt un article, mais en attendant celui de Bitcoin magazine est vraiment pas mal, il y a aussi des liens vers des ressources dans mon article sur les améliorations apportées à Bitcoin)

Je suis sous Debian donc je parlerai de systemd et de tout ce que Debian utilise; si vous êtes sur un autre OS qui n’a pas les mêmes spécifications je mettrai des liens externes, mais je n’aurai pas testé.

Rapidement si vous n’avez pas les prérequis décrits ci-dessus, voici quelques commandes, mais je ne détaillerai pas :

Optionnel : Lightning Network via Tor

Ajouter le dépôt pour Tor (as root) :

deb http://deb.torproject.org/torproject.org stretch main
deb-src http://deb.torproject.org/torproject.org stretch main
gpg --keyserver keys.gnupg.net --recv A3C4F0F979CAA22CDBA8F512EE8CBC9E886DDD89
gpg --export A3C4F0F979CAA22CDBA8F512EE8CBC9E886DDD89 | apt-key add -
apt update && apt install tor

Ensuite dans /etc/tor/torrc :

RunAsDaemon 1
PortForwarding 1
MaxMemInQueues 500MB
ControlPort 9051

CookieAuthentication 1
CookieAuthFileGroupReadable 1

Vous pouvez changer « MaxMemInQueues » ou même l’enlever, c’était propre à mes capacités.

systemctl restart [email protected]
#systemctl restart bitcoind

(Fin de la première partie sur tor)


useradd bitcoin -r -m -G debian-tor #

Remarque : enlever “-G debian-tor” en l’absence de Tor.

Créez un fichier /etc/systemd/system/bitcoind.service :

[Unit] Description=Bitcoin daemon
After=network.target [Service] ExecStart=/usr/bin/bitcoind -daemon -conf="/path/vers/bitcoin.conf" -datadir="/path/vers/la/chain" -pid=/run/bitcoind/bitcoind.pid
RuntimeDirectory=bitcoind
User=bitcoin
Type=forking
PIDFile=/run/bitcoind/bitcoind.pid
Restart=on-failure

PrivateTmp=true
ProtectSystem=full
NoNewPrivileges=true
PrivateDevices=true
MemoryDenyWriteExecute=true
TimeoutStopSec=60s
TimeoutStartSec=2s
StartLimitInterval=120s
StartLimitBurst=5 [Install] WantedBy=multi-user.target

Source : https://github.com/bitcoin/bitcoin/tree/master/contrib/init où vous trouverez aussi les services pour Upstart, OpenRC, CentOS, MacOS.

systemctl start bitcoind
systemctl enable bitcoind

Je suis allé vite dans cette partie, pour ne pas rallonger l’article avec un hors sujet, mais n’hésitez pas si vous avez besoin de précisions dans les commentaires.

Installer C-lightning

source : https://github.com/ElementsProject/lightning

Les dépendances :

apt update && apt install -y autoconf automake build-essential git libtool libgmp-dev libsqlite3-dev python python3 net-tools zlib1g-dev

On clone et on compile :

git clone https://github.com/ElementsProject/lightning.git
cd lightning
./configure
make
su -c 'make install'

Si vous voulez tester :

systemctl stop bitcoind
bitcoind & #.....attendre qu'il vérifie les blocs....
lightningd

S’il vous parle, mais ne s’arrête pas, tout va bien. Faites juste un petit :

rm -r ~/.lightning

Pour nettoyer ce qu’il a créé. S’il s’arrête avec un message d’erreur, c’est le plus souvent parce qu’il n’arrive pas à communiquer avec bitcoind, dans ce cas pas de panique.

C-lightning utilise bitcoin-cli pour lui parler et ça devrait se régler avec la configuration.

Configurer c-lightning

La partie casse-gueule clavier figure. On va créer un service lightningd qui sera exécuté par bitcoin (l’utilisateur) pour pouvoir communiquer avec bitcoind (le service).

Premièrement, il faut créer un login pour RPC, donc vous pouvez soit utiliser (conseillé) le script fourni avec le code de Bitcoin. Vous l’avez si vous avez compilé Bitcoin, sinon :

wget https://raw.githubusercontent.com/bitcoin/bitcoin/452bb90c718da18a79bfad50ff9b7d1c8f1b4aa3/share/rpcauth/rpcauth.py -qq
python3 rpcauth.py lightning

Il va vous sortir un truc du genre :

rpcauth=lightning:6ed5aa1ef4526e0414ec29f9ee7f84$b9840564b864ec04a659c0ebd5f924ca3471ec6378b67e546869a89ed8f685e8
Your password:
EH03M0BApKTWV4wc2qI5dFmxyr4jA4eqgE3iLOAH-No=

Copiez « rpcauth=lightning:blablablblabla » dans votre bitcoin.conf (par défaut ~bitcoin/.bitcoin/bitcoin.conf – sinon vous savez où il est), il faut aussi avoir server=1 pour accepter les commandes JSON-RPC. Notez bien votre password, on le mettra dans la config de C-lightning, comme ça la boucle est bouclée. Évidemment, ne prenez pas celui-là. Plutôt que d’utiliser le script, vous pouvez créer un password avec rpcuser= et rpcpassword=, mais choisissez un mot (ou phrase) de passe très fort.

Redémarrez bitcoind, et passons à la configuration de C-lightning.

Optionnel : Lightning Network via Tor

Pour connecter Lightning Network aussi à travers Tor, suivons les instructions décrites ici. En 6 lignes, ça donne :

#tor addr v2
HiddenServiceDir /var/lib/tor/ln_service_v2/
HiddenServicePort 9735 127.0.0.1:9735

#tor addr v3
HiddenServiceDir /var/lib/tor/ln_service_v3/
HiddenServiceVersion 3
HiddenServicePort 9735 127.0.0.1:9735

À ajouter dans /etc/tor/torrc. Attention, si vous avez installé Tor depuis les dépôts Debian, il n’est pas à jour et ne supporte pas les adresses v3. Voir le début de l’article pour le dépôt Tor.

systemctl restart [email protected]

Pour connaître vos adresses (ou la votre si vous n’en avez mis qu’une seule) qu’il vous faudra ajouter dans la config vous pouvez faire :

cat /var/lib/tor/ln_service_v2/hostname
cat /var/lib/tor/ln_service_v3/hostname

(Fin de la seconde partie sur Tor)


C-lightning utilise par défaut un dossier caché dans votre répertoire utilisateur comme Bitcoin. Donc :

mkdir ~bitcoin/.lightning

Puis créez un fichier nommé « config » dans ce dossier. Vous pouvez trouver la documentation et l’explication de toutes les options ici. Voici une configuration possible, vous pouvez modifier pleins de trucs (surtout si ça ne marche pas à un moment).

# Si vous avez un chemin d'accès spécial vers votre chaîne
bitcoin-datadir="/path/vers/la/chaine/"
bitcoin-rpcuser="lightning"
bitcoin-rpcpassword="VOTRE PASSWORD QUE LE SCRIPT A OUTPUT"

# La couleur et le nom tel que vous pourrez l'apercevoir sur un explorateur
rgb=00000
alias=Darosior

# Vide pour écouter à la fois sur Tor, IPv4, IPv6
bind-addr=
# Si vous n'utilisez pas Tor, vous pouvez mettre
# bind-addr=VOTRE_IP_PUB:9735
announce-addr=VOTRE_IP_PUBLIQUE:9735
# tor
proxy=127.0.0.1:9050
announce-addr=adresse_tor_v2.onion:9735
announce-addr=adresse_tor_v3.onion # Je viens de remarquer que je n'avais pas spécifié le port en copiant/collant, mais ça marche quand même
# les fees (frais), choisissez ce que vous voulez, optionnel
fee-base=
fee-per-satoshi=
# J'ai mis les lignes suivantes pour comprendre d'où venaient les problèmes que je rencontrais. Je vous conseille de les laisser si vous rencontrez des problèmes.
log-level=debug
# Endroit similaire à bitcoind
log-file=/home/bitcoin/.lightning/debug.log

Nous touchons au but. Il ne manque plus que le service (créez un fichier /etc/systemd/system/lightningd.service) dont les samples peuvent être trouvés ici (vous aurez remarqué qu’il y en a nettement moins que sur le dépôt de Bitcoin 😉). Voici le mien (j’ai juste changé une ou deux choses) :

[Unit] Description=C-Lightning (Lightning network) daemon
Requires=bitcoind.service
After=bitcoind.service [Service] ExecStart=/usr/local/bin/lightningd --daemon --mainnet --lightning-dir=/home/bitcoin/.lightning --pid-file=/run/lightningd/lightningd.pid

# Creates /run/lightningd owned by bitcoin
RuntimeDirectory=lightningd

User=bitcoin
Group=bitcoin
Type=forking
PIDFile=/run/lightningd/lightningd.pid
Restart=on-failure

# Hardening measures
####################

# Provide a private /tmp and /var/tmp.
PrivateTmp=true

# Mount /usr, /boot/ and /etc read-only for the process.
ProtectSystem=full

# Disallow the process and all of its children to gain
# new privileges through execve().
NoNewPrivileges=true

# Use a new /dev namespace only populated with API pseudo devices
# such as /dev/null, /dev/zero and /dev/random.
PrivateDevices=true

# Deny the creation of writable and executable memory mappings.
MemoryDenyWriteExecute=true [Install] WantedBy=multi-user.target

Si bitcoind tourne déjà, il ne reste plus qu’à exécuter :

systemctl start lightningd
systemctl enable lightningd

Connecter son nœud et ouvrir des canaux

Nous allons l’interfacer avec le daemon lightningd grâce à lightning-cli :

su -c 'su - bitcoin'
lightning-cli help

Vous pouvez voir les différentes options, vérifiez que toutes les interfaces sont actives avec :

lightning-cli getinfo

Si tout va bien, vous allez pouvoir financer votre nœud en prenant d’abord une adresse :

lightning-cli newaddr

Une fois que la transaction est effective, vous pouvez commencer à vous connecter à d’autres nœuds et à ouvrir des canaux (la connexion sans ouvrir de canal ne nécessite pas de bitcoins). Je vous invite à vous connecter au mien (036[email protected]82.255.152.32:9735), mais vous en trouverez d’autres sur un explorateur (il est long comme un dimanche à charger). Essayez de vous connecter à plusieurs nœuds et d’ouvrir plusieurs canaux (en fonction de votre capacité).

lightning-cli connect 036[email protected]82.255.152.32:9735

Puis, pour ouvrir un canal, l’identifiant puis le montant suffisent (en satoshis).

lightning-cli fundchannel 03678b4f041fbfbeebcafc076469df75decf81da20a53bd490172e83ce532df1fa 100000

Répétez ces étapes pour tous les nœuds avec lesquels vous voulez ouvrir des canaux. Félicitations, vous êtes désormais connecté au Lightning Network 🙂 !

Erreurs fréquentes

  • C-lightning n’arrive pas à communiquer avec bitcoind : vérifiez la connexion de bitcoin-cli directement dans le prompt, si ça ne marche pas vérifiez bitcoin.conf. Sinon, essayez de spécifier une option bitcoin-cli=/path/vers/bitcoin-cli. Vérifiez aussi les permissions de l’user bitcoin partout.
  • C-lightning ne voit pas que bitcoind est synchronisé et à jour. Plusieurs options encore ici : C-lightning ne supporte pas les pruned nodes (nœuds élagués), si c’est votre cas vous devez synchroniser la chaîne. Sinon, essayez de spécifier le chemin d’accès (path) directement dans ExecStart (« –bitcoin-datadir=/path/vers/lachaine ») dans /etc/systemd/system/lightningd.service.
  • Je mettrai à jour cette liste avec les retours.

EDIT : Mettre à jour lightningd

su -c 'systemctl stop lightningd'

cd lightning
git fetch origin master
git checkout v0.6.2 # Ou la dernière release

./configure
make
su -c 'make install'

su -c 'systemctl start lightningd'

Un lien utile : https://lnroute.com/

Sources : Crypto-Lyon.fr || Images from Shutterstock

PARTAGER
Antoine Poinsot
Yet another Bitcoin promoter. [email protected] ~ github.com/darosior ~ crypto-lyon.fr

2 Commentaires

  1. Bonjour,
    Votre tutoriel pour installer un noeud lightning est très clair et simple.
    Est-ce que vous sauriez où je peux trouver un tutoriel équivalent pour installer un noeud bitcoind ?
    Savez vous si un Raspberry mini d’un disque dur assez gros pour stocker la blockchain est suffisant pour accueillir un noeud Bitcoin ?

    • Salut Alexandre,
      Il est tout à fait possible de configurer un full node Bitcoin avec bitcoind, sur un Raspberry Pi (2 ou 3), avec un disque dur dédié (1 TB et tu es largement tranquille). Tu trouveras un certain nombre de tutos en Français sur le web si tu veux “juste” un full node bitcoind.
      Si tu veux un full node (bitcoind) + Lightning Network (LND), le Raspiblitz pseudo-automatise le tout, mais il faut être anglophone :
      https://github.com/rootzoll/raspiblitz
      A+

LAISSER UN COMMENTAIRE

Votre adresse de messagerie ne sera pas publiée.En publiant un commentaire, vous acceptez notre politique de confidentialité.

S'il vous plaît entrez votre commentaire!
Veuillez entrer votre nom ici

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.