Comment installer un noeud complet sur Lightning Network ?

Le Lightning Network est une technologie naissante, liée à Bitcoin, qui permet d’accélérer les transactions sur la Blockchain de Bitcoin ainsi que de réduire drastiquement les frais de ces transactions en créant une « seconde couche » sur le réseau, où les transactions peuvent s’effectuer sans être inscrite sur la Blockchain. Pour en savoir plus : http://youcoin.ch/questions-reponses-faq/quest-ce-le-lightning-network/

Il est désormais possible d’effectuer des transactions sur le Lightning Network pour acheter tout et n’importe quoi – potentiellement, car encore peu de commerçants ont de quoi recevoir des paiements effectués sur le LN. En outre, un des problèmes avec le fait de vouloir passer par le LN pour effectuer un paiement, et qu’il faille trouver un node auquel se connecter pour ouvrir un canal de paiement.

Ce problème est résolu si l’on crée soi-même un node complet par lequel autrui peut passer et par lequel soi-même peut passer pour ouvrir des canaux de paiements. Comme avec Bitcoin, il faut installer sur son ordinateur de quoi maintenir le node en question, et à ce stade, cela requiert encore un peu de savoir-faire informatique.

Ce tutoriel se propose de regarder une variété de possibilités, avec le caveat que la technologie est jeune et sujette à changer. Autre chose essentielle à savoir, il n’y a pas qu’un Lightning Network. Ce mot désigne une technologique utilisable par plusieurs personnes, si elles le souhaitent, comme la téléphonie mobile. Il y a pour l’instant 3 grandes firmes développant le Lightning Network :

C-Lightning

Il s’agit du projet de la firme Blockstream, plus exactement sa communauté de développeurs qui portent l’alias de Elements Project. Il ne fonctionnait jadis que sous Linux mais cela semble désormais possible de le faire fonctionner sur les autres OS. Il nécessite un node complet pour être opérationnel. Ils ont créé notamment Lightning Charge, une interface pour effectuer des paiements – mais si vous n’êtes pas vous-même un développeur, il y a peu de chance que vous y réussissiez.

Lightning Network Daemon (LND)

Cette implémentation est celle de Lightning Labs. Eux ont développé Neutrino, une plateforme pour utilisateurs de smartphones qui permet d’effecteur des paiements – de nouveau, assez difficile d’utilisation, et cela n’est pas un wallet pour autant. LND est programmé en Golang et il faut installer la version 1.9 de Go pour l’utiliser.

Eclair

Eclair nous vient de la firme française Acinq, qui a réussi le coup de maître extraordinaire de développer un wallet fonctionnel sur testnet et mainnet pour Android. Ce wallet permet donc d’effectuer des transactions, de créer des canaux de paiements mais aussi de conserver des bitcoins. Ce wallet a été pensé pour être utiliser par quiconque possédant une connaissance même superficielle des wallets Bitcoin.

Pour installer un node complet d’Eclair, la version 0.16.0 de Bitcoin Core est nécessaire. Elle possède une API JSON-RPC.

 

––––––––––––––––––––––

 

Nous allons désormais voir deux manières possibles d’installer un noeud complet sur son ordinateur : une fois via Eclair et de manière gratuite, une fois via C-Lightning, avec quelques frais de maintien. Ce tutoriel est en grande partie issu des tutoriels en anglais des développeurs d’Eclair sur Github, et de Ronald Mannak sur Medium.

Noeud complet sur Eclair

Configurer Bitcoin Core

Avant toute chose, il vous faut installer et configurer Bitcoin Core, à la version 0.16.0 au minimum. Si vous avez déjà un wallet sur Bitcoin Core, il vous faut créer une nouvelle adresse et transférer vos fonds sur cette adresse. Pour qu’Eclair puisse fonctionner sur Bitcoin Core, vous devez vous assurer que votre noeud Core soit synchronisé, ait activé SegWit, ait activé la fonction zeromq,  ait activé la fonction tx-index, ait activé la fonction wallet, et n’ait pas activé le pruning.

Eclair utilisera les bitcoins qu’il trouvera sur le wallet Bitcoin Core pour alimenter les canaux de paiements, et retournera ces BTC dans le wallet une fois le canal fermé.

Lancer bitcoind, et entrer cette bitcoin.conf :

testnet=0
server=1
rpcuser=<your-rpc-user-here>
rpcpassword=<your-rpc-password-here>
txindex=1
zmqpubrawblock=tcp://127.0.0.1:29000
zmqpubrawtx=tcp://127.0.0.1:29000
addresstype=p2sh-segwit

Installer Eclair

Téléchargez Eclair à cette adresse. Sur Windows, l’ordinateur créera automatiquement un raccourci sur le bureau.

Si vous souhaitez l’installer manuellement sur Windows, ou l’installer tout court sur Linux et Mac, vous devrez d’abord installer la version JRE 1.8 de Java.

Si vous utilisez la version OpenJDK de JRE, alors vous devez monter OpenJFX vous-même, ou lancer l’application en mode « headless ». Téléchargez ensuite la dernière fat jar de Java, et rentrer la commande suivante dans votre terminale si vous voulez une interface :

java -jar eclair-node-gui-<version>-<commit_id>.jar

Ou, si vous ne voulez pas d’interface :

java -jar eclair-node-<version>-<commit_id>.jar

Configurer Eclair

Eclair écrit et lit sont fichier de configuration par défaut au chemin  ~/.eclair . Pour changer la configuration du noeud, il vous faut créer un fichier appelé eclair.conf dans ~/.eclair, de la sorte :

eclair.chain=mainnet
eclair.bitcoind.rpcport=8332
eclair.bitcoind.rpcuser=<votre-nom-d-utilisateur-RPC-pour-BitcoinCore>
eclair.bitcoind.rpcpassword=<votre-mot-de-passe-RPC-pour-BitcoinCore>

Voici les options les plus courantes :

nom description valeur par défaut
eclair.chain Quelle Blockchain sera utilisée : regtesttestnet or mainnet testnet (évidemment, vous voulez faire tourner Eclair sur mainnet)
eclair.server.port Le port Lightning TCP 9735
eclair.api.enabled Activer/Désactiver l’API

(Interface de programmation)

false. Par défaut, l’API est désactivé. Si vous l’activez, choisissez un mot de passe.
eclair.api.port Le port API HTTP 8080
eclair.api.password API password (BASIC) «  » (votre mot de passe API)
eclair.bitcoind.rpcuser nom d’utilisateur Bitcoin Core RPC foo
eclair.bitcoind.rpcpassword mot de passe Bitcoin Core RPC bar
eclair.bitcoind.zmq adresse ZMQ de Bitcoin Core « tcp://127.0.0.1:29000 »
eclair.gui.unit Unité dans laquelle les montants apparaissent (valeurs possibles : msat, sat, mbtc, btc) btc

 

Les guillemets ne sont pas nécessaires sauf si vous entrer des signes spéciaux. Vous trouverez le guide pour la syntaxe complète ici. Et sur reference.conf vous trouverez toutes les options supplémentaires et imaginables.

Tableau de commandes pour le JSON-RPC API

méthode paramètres description
getinfo infos de base du noeud (chain hash, hauteur du bloc actuelle)
connect nodeId, host, port établit une connexion sécurisée à un noeud lightning
connect uri établit une connexion sécurisée à un noeud lightning
open nodeId, fundingSatoshis, pushMsat = 0, feerateSatPerByte = ?, channelFlags = 0x01 ouvre un canal avec un autre noeud lightning. Par défaut, push = 0 ; les frais pour ouvrir le canal sont à 6 blocs.
updaterelayfee channelId, feeBaseMsat, feeProportionalMillionths met à jour les frais de relai pour les paiements sur ce canal
peers liste les pairs locaux existant
channels liste les canaux locaux existants
channels nodeId liste les canaux locaux existant avec un nodeId particulier
channel channelId récupère les infos d’un canal en particulier
channelstats récupère les statistiques d’un canal donné (frais, nombre total et moyen de paiements, etc.)
allnodes liste tous les noeuds
allchannels liste tous les canaux
allupdates liste toutes les mises à jour de canaux de paiements
allupdates nodeId liste toutes les mises à jour de canal pour ce nodeID
receive description génère une requête de paiement sans montant donné (utile pour les donations)
receive amountMsat, description génère une requête de paiement pour un montant donné
receive amountMsat, description, expirySeconds génère une requête de paiement pour un montant donné qui expirera dans un temps fixé de secondes
checkinvoice paymentRequest indique le hash du noeud, du montant et du paiement
findroute paymentRequest nodeId
send amountMsat, paymentHash, nodeId envoie un paiement sur un noeud Lightning
send paymentRequest envoie un paiement à un noeud lightning en utilisant une requête au format BOLT11 et un montant personnalisé
send paymentRequest, amountMsat envoie un paiement à un noeud lightning en utilisant une requête au format BOLT11 et un montant personnalisé
checkpayment paymentHash indique « true » si le paiement a été accepté, « false » sinon
checkpayment paymentRequest indique « true » si le paiement a été accepté, « false » sinon
close channelId ferme un canal
close channelId, scriptPubKey ferme un canal et renvoie les fonds sur une scriptPubKey
forceclose channelId ferme de force un canal en publiant la tx d’engagement local (local commitment tx) ; cette méthode coûte plus cher qu’une fermeture normal, et le délai pour dépenser à nouveaux les fonds est plus long.
audit liste tous les paiements envoyés, reçus, différés
audit from, to liste tous les paiement envoyés, reçus, différés dans un intervalle de temps

(from <= intervalle de temps < to)

networkfees liste tous les frais de réseau payés par les mineurs, par transaction
networkfees from, to liste tous les frais de réseau payés par les mineurs, par transaction dans cet intervalle de temps (from <= intervalle de temps < to)
help affiche les méthodes disponibles

 

Docker

Pour ceux qui ne savent pas ce qu’est un docker, il s’agit d’un « logiciel libre qui automatise le déploiement d’applications dans des conteneurs logiciels ». Plus exactement, un docker un outil qui facilite la création, le déploiement et l’usage d’applications en utilisant des conteneurs. Ces conteneurs permettent au développeur d’empaqueter une application avec toutes les parties nécessaires – comme sa librairie – et de l’envoyer dans un seul « paquet ». Nous parlons ici d’envoi d’ordinateur à ordinateur. L’avantage d’utiliser un dockerfile est que l’application peut alors tourner virtuellement sur n’importe quel ordinateur. Bien. Revenons au Lightning Network.

Une image du Dockerfile est construite sur chaque envoi effectué vers le docker hub pour faire tourner un node Lightning « docker-isé ».

Vous pouvez utiliser la variable JAVA_OPTS de l’environnement Java pour mettre les arguments sur eclair-node.

docker run -ti --rm -e "JAVA_OPTS=-Xmx512m -Declair.api.binding-ip=0.0.0.0 -Declair.node-alias=node-pm -Declair.printToConsole" acinq/eclair

Si vous voulez faire persister le chemin des données, vous pouvez construire le volume sur votre hôte avec l’argument -v de la manière suivante :

docker run -ti --rm -v "/path_on_host:/data" -e "JAVA_OPTS=-Declair.printToConsole" acinq/eclair

 

––––––––––––––––––––––

 

Noeud complet sur C-Lightning

Prérequis

Dans le tutoriel ci-dessus, nous sommes partis du principe que vous installiez le noeud directement sur votre disque dur, ou un disque dur externe. Or il est possible également de l’installer sur un VPS – Virtual Private Server. Ici, nous allons opter pour l’installation d’un VPS sur Digital Ocean.

Créez un compte sur Digital Ocean

La première chose à faire est de créer un compte sur Digital Ocean. Une fois que c’est fait, vous verrez sur votre profil un bouton vert « Create ». Cliquez dessus et choisissez l’option « Droplets », qui créera un serveur cloud.

Sur la page « Create Droplet », sélectionnez la page « One-click apps » et l’option « Docker » (et non pas Django ou Discourse). Ensuite, dans le menu déroulant du Docker, sélectionnez l’option 320GB.

Vous devrez ensuite créer une paire de clés SSH (c’est-à-dire, une clé publique et une clé privée) via votre Terminal, en rentrant les commandes suivantes :

1. Créez la paire de clés SSH ; le nom du fichier sera "lightning"
Entrez un mot de passe pour protéger le fichier
$ ssh-keygen -f ~/.ssh/lightning -t rsa -b 4096
2. Créez un backup des fichiers lightning et lightning.pub
$ cd ~/.ssh
3. Copiez la clé publique dans le presse-papier
$ pbcopy < ~/.ssh/lightning.pub

Sur Digital Ocean, cliquez sur le bouton « New SSH Key » et copiez-y la clé publique dans la boîte de texte prévue à cet effet ; puis cliquez sur « Create » pour créer la Droplet.

Une fois la Droplet créée, copiez l’adresse IP de celle-ci et rentrez là dans le Terminal pour vous connecter au serveur :

$ ssh root@<l'adresse IP en question> -i ~/.ssh/lightning

Créez d’abord un répertoire pour Bitcoind en dehors du Docker. Grâce à cette étape, la Blockchain sera sauvegardée sur le disque et non pas dans le contenant lui-même, de sorte que toutes les données persisteront même si vous remplacer le contenant de Bitcoind par une version mise à jour.

Rentrez cette commande :

$ mkdir -p /scratch/bitcoin/mainnet/bitcoind

Installez votre client Lightning

Il existe plusieurs implantations du Lightning Network, comme C-Lightning ou lnd. Comme C-Lightning est régulièrement mis à jour et est plus user-friendly que lnd, la suite du tutoriel se basera sur une implantation de C-lightning. Mais en réalité, toutes les implantations sont interchangeables.

Si vous n’êtes pas déjà connectés, connectez-vous.

$ ssh root@<l’adresse IP de votre droplet> -i ~/.ssh/lightning

Créez un répertoire temporaire sur votre disque de sorte à ce que les données restent si vous changez de docker pour votre client, comme pour ce que vous avez dû faire juste au-dessus avec Bitcoind.


$ mkdir -p /scratch/bitcoin/mainnet/clightning

Création du noeud

La Droplet de Digital Ocean contient un firewall (pare-feu) appelé ufw. Dans ce firewall, il faut ouvrir les ports 8333 pour Bitcoin et 9735 pour Lightning, tant pour le traffic rentrant que sortant :

1. Ouvrez le port Bitcoin 8333.
$ sudo ufw allow 8333
2. Ouvrez le port Lightning 9735.
$ ufw allow 9735
$ ufw allow out 9735
3. Vérifiez le statut du pare-feu.
$ ufw status

Quand vous effectuerez l’étape 3, vous devriez voir apparaître un résultat similaire à celui en-dessous (il peut varier en fonction d’autres ports qui seraient ouverts).

ports that are open).

To                         Action      From
--                         ------      ----
9735                       ALLOW       Anywhere
8333                       ALLOW       Anywhere
9735 (v6)                  ALLOW       Anywhere (v6)
8333 (v6)                  ALLOW       Anywhere (v6)
9735                       ALLOW OUT   Anywhere
8333                       ALLOW OUT   Anywhere
9735 (v6)                  ALLOW OUT   Anywhere (v6)
8333 (v6)                  ALLOW OUT   Anywhere (v6)
...

Il faut ensuite créer les containers pour Bitcoind et C-Lightning en utilisant un script dit « Docker-compose ».

1. Créez un fichier docker-compose vide dans Nano.
$ cd ~
$ nano docker-compose.yml
2. Copiez-collez le code du docker-compose.yml ci-dessous
#    et changez les aliasname, rbg, et announce-addr
3. Sauvegardez le fichier édité (Ctrl-X, Y, <Enter>)

Le contenu du fichier docker-compose.yml doit ressembler à cela, ci-dessous. Changez la partie  alias par le nom que vous voulez donner à votre noeud ; rentrez l’adresse IP de votre Droplet dans announce-addr ; et si vous vous en sentez l’envie, vous pouvez mettre une couleur à votre node pour le rendre mieux visible en changeant la valeur rgb. Vous trouverez les codes RGB sur cette page.

version: "3"
services:
  bitcoind:
    image: nicolasdorier/docker-bitcoin:0.16.0
    container_name: bitcoind
    environment:
      BITCOIN_EXTRA_ARGS: |
        testnet=0
        whitelist=0.0.0.0/0
        server=1
        rpcuser=rpcuser
        rpcpassword=rpcpass
    expose:
      - "8333"
    ports:
      - "0.0.0.0:8333:8333"
    volumes:
      - "/scratch/bitcoin/mainnet/bitcoind:/data"
  clightning_bitcoin:
    image: elementsproject/lightningd
    container_name: lightning
    command:
      - --bitcoin-rpcconnect=bitcoind
      - --bitcoin-rpcuser=rpcuser
      - --bitcoin-rpcpassword=rpcpass
      - --network=bitcoin
      - --alias=<le nom de votre noeud>
      - --rgb=le code RGB de la couleur souhaitée
      - --log-level=debug
      - --announce-addr=<l'adresse IP de votre Droplet>:9735
    environment:
      EXPOSE_TCP: "true"
    expose:
      - "9735"
    ports:
      - "0.0.0.0:9735:9735"
    volumes:
      - "/scratch/bitcoin/mainnet/clightning:/root/.lightning"
      - "/scratch/bitcoin/mainnet/bitcoind:/etc/bitcoin"
    links:
      - bitcoind

Créez et lancez les containers en utilisant docker-compose :

$ docker-compose up

Docker va créer et faire tourner deux containers, un pour Bitcoind et un pour C-Lightning.

Bitcoind est un protocol qui permet d’installer Bitcoin Core sur un ordinateur. Et c’est bien cela que vous souhaitez faire : synchroniser l’entièreté de la Blockchain de Bitcoin sur votre ordinateur, ce qui prend environ 175 GB de place. Cela peut prendre plusieurs heures voire plusieurs jours.

Ouvrez une nouvelle page dans votre Terminal et connectez-vous à votre Droplet.

$ ssh root@<l’adresse IP de votre Droplet> -i ~/.ssh/lightning

Ajoutez un script qui permet d’accéder facilement au container bitcoind :

1. Créez le script.
$ nano /bin/bitcoin-cli
2. Éditez le script :
#!/usr/bin/env bash
docker exec lightning bitcoin-cli -rpcuser=rpcuser -rpcpassword=rpcpass "$@"
3. Sauvegardez-le (Ctrl-X, Y, <Enter>)
4. Faites en sorte qu'il soit exécutable.
$ chmod +x /bin/bitcoin-cli
5. Confirmez qu'il fonctionne en obtenant les infos du wallet.
$ bitcoin-cli getwalletinfo

Faites de même pour le container Lightning

1. Créez le script.
$ nano /bin/lightning-cli
2. Éditez le script.
#!/usr/bin/env bash
docker exec lightning lightning-cli "$@"
3. Sauvegardez le fichier (Ctrl-X, Y, <Enter>)
4. Faites en sorte qu'il soit exécutable.
$ chmod +x /bin/lightning-cli
5. Assurez-vous qu'il fonctionne correctement.
$ lightning-cli getinfo

Votre noeud complet Lightning devrait désormais fonctionner. Mais il faut désormais le connecter au réseau. Vous pouvez laisser les frais de transactions à la valeur par défaut.

Connectez votre noeud au réseau

Pour fonder un canal de paiement il faut 1) envoyer des btc depuis votre wallet actuel au wallet de votre noeud et 2) « financer » le canal de paiement avec des btc du wallet de votre noeud.

Pour créer une adresse Lightning, vous devez :

1. Créer une nouvelle adresse. 
$ lightning-cli newaddr
2. Envoyer des fractions de btc à cette adresse et attendre
# 6 confirmations. Vous pouvez en voir la progression à cette adresse.
3. Confirmer que les fonds ont été reçus.
$ lightning-cli listfunds

Vous pouvez évidemment créer plusieurs adresses, dans ce cas, vous pouvez les voir toutes en rentrant :

$ lightning-cli dev-listaddrs

Connectez-vous à un ou plusieurs noeuds Lightning.

4. Les paramètres sont l'identifiant Lightning,  
#    optionnellement son IP et son port.
$ lightning-cli connect <les paramètres du noeud>
5. Confirmez que votre noeud est connecté et que son
# statut est "GOSSIPING"
$ lightning-cli listpeers

Pour trouver des noeuds Lightning, vous avez plusieurs sites à choix : RecksplorerLightning Network StoresY’alls et Moneni.

N’oubliez pas que financer un canal de paiement est archivé sur la Blockchain et doit donc être confirmé comme toute autre transaction normale.

6. Listez, si besoin, les connexions : les canaux non-financés
# auront le statut "GOSSIPING".
$ lightning-cli listpeers
7. Financez votre canal de paiement $ lightning-cli fundchannel <votre ID> <le montant en satoshis>

Normalement, vous devriez être connecté à ce stade.

Effectuer un paiement

1. Connectez-vous à un noeud d'un marchand
$ lightning-cli connect <identifiant Lightning du vendeur>

2. Financer un canal sortant et attendez confirmation.
$ lightning-cli fundchannel <ID du vendeur> <montant en satoshis>

3. Assurez-vous que le statut est CHANNELD_NORMAL
$ lightning-cli listpeers <ID du vendeur>
4. Vous devrez parfois chercher manuellement votre node
# sur le site du vendeur ; dans ce cas, le site devrait
# offrir la possibilité de vous connecter à votre noeud
# depuis une liste de noeuds disponibles.
5. Copiez l'adresse de paiement que vous fournira le vendeur.

6. 
$ lightning-cli pay <adresse fournie par le vendeur>

Fermer des canaux et récupérer ses fonds

Quand vous n’aurez plus besoin d’un canal de paiement – par exemple parce que vous aurez terminé un paiement – vous pourrez le fermer et récupérer les fonds que vous y avez mis pour le financer. Cela prend à peu près 1 heure pour que les fonds reviennent dans le wallet de votre noeud. Comme pour le financement initial, la fermeture d’un canal est inscrit sur la Blockchain comme une transaction normale.

1. Trouvez l'ID de votre canal de paiement.
$ lightning-cli listfunds
2. Fermez-le. Le terminal devrait vous renvoyer un txid
#  que vous pouvez vérifier sur https://www.blockchain.com/btc/tx/
$ lightning-cli close xxxxx:xxx:x
3. Après 1 heure, l'ID devrait disparaître de la liste. 
#  Un utxo devrait s'ajouter à la liste d'utxo.
#  N'hésitez pas à rafraîchir la liste des utxo.
$ lightning-cli dev-rescan-outputs
$ lightning-cli listfunds

Copie de sauvegarde

Comme pour votre noeud Bitcoin, vous devriez toujours avoir une copie de sauvegarde des informations de votre noeud.

Mais attention, contrairement aux noeuds Bitcoin, vous ne pouvez pas copier les états des canaux (channel states). Cela est dû au système de sécurité mis en place sur le réseau Lightning. L’un des moyens de tromper le réseau serait de diffuser un état obsolète d’un canal de paiement – or cela risque de se produire si vous copiez l’état de votre canal de paiement.

La punition prévue par le réseau est de vous faire fermer de force pour canal et confisquer tous vos fonds. Ce n’est donc guère une fameuse idée.

Les channel states se trouvent dans le fichier lightning.sqlite3 dans le répertoire /scratch/bitcoin/mainnet/clightning/. Ne copiez jamais le fichier lightning.sqlite3.

À sa place, sauvegardez le fichier hsm_secret que vous trouverez dans le répertoire /scratch/bitcoin/mainnet/clightning/. La commande suivante copie le fichier dans le directoire local de votre ordinateur.

$ scp -i <fichier SSH sur votre disque> root@<adresse IP de votre Droplet>:/scratch/bitcoin/mainnet/clightning/hsm_secret ~

Pour récupérer vos fonds à partir d’une sauvegarde

Copiez hsm_secret dans une version fraîche de votre programme et lancez lightningd avec l’option --port=0.

Ne vous connectez à ni financer aucun canal.

Faites tourner lightning-cli newaddr plusieurs fois, puis arrêtez Lightning avec lightningd stop.

Lancez sqlite3/scratch/bitcoin/mainnet/clightning/lightningd.sqlite3 "UPDATE vars SET val= 500000 WHERE name='last_processed_block';"

Lancez à nouveau lightningd avec l’option --port=0.

Récupérez les fonds sur la Blockchain en les envoyant sur votre wallet en lançant lightning-cli withdraw all. Attendez quelques mois que tous les pairs aient fermé tous vos anciens canaux. Une fois que tous les canaux seront fermés, rentrez de nouveau lightning-cli withdraw all.

Gardez en tête que si vous en arrivez à devoir récupérer vos fonds de cette manière, il vous faudra créer un nouveau serveur pour votre noeud Lightning.

Problèmes et solutions

N’ayez pas peur de rencontrer souvent des problèmes, étant donné que le Lightning Network reste une technologie expérimentale. Voici une liste de quelques problèmes connus.

No address known, giving up

Vous tomberez sur ce message si vous essayez de vous connecter à un noeud Lightning qui n’a pas encore fini de synchroniser. Attends la fin de la synchronisation et essayez de nouveau.

Not enough funds to open channel

Si vous financez plusieurs canaux, il est possible que Lightning indique qu’il n’y a pas assez de fonds disponibles. Vous n’avez pas perdu vos fonds, ils sont toujours là, tout ce que vous avez à faire et de demander à votre client Lightning de scanner à nouveau les utxos.

1. Listez les utxos.
$ lightning-cli dev-rescan-outputs
2. Vérifiez que tous vos btc sont là.
$ lightning-cli listfunds

Connection refused

Si vous essayez de vous connectez à des noeuds populaires avec plusieurs canaux, vous pouvez tombez sur le message d’erreur  -1, Connection establishment: Connection refused. La seule solution est de réessayer régulièrement jusqu’à ce que le réseau se décongestionne un peu.

Unable to fund a channel

Vous vous retrouverez parfois en état de vous connectez à un noeud, mais incapable de financer un canal vers ce pair. Ces pairs seront dans un état constant de « GOSSIPING ». Pour vérifier quel est le statut d’un noeud, tapez :

$ lightning-cli listpeers | jq '.peers[] | select(.state == "GOSSIPING") | .'

Financez tous les noeuds qui apparaîtront alors :

$ lightning-cli fundchannel <ID Lightning> <montant>

CHANNELD_AWAITING_LOCKIN et CHANNELD_SHUTTING_DOWN

Il se peut que vos canaux soit bloqués dans un état plusieurs jours après les avoir financés. Vos fonds sont donc bien envoyés mais le canal n’est pas actif. Soit le canal attend un lock-in (Peer already CHANNELD_AWAITING_LOCKIN), soit est dans un état perpétuel de clôture (Peer already CHANNELD_SHUTTING_DOWN), au lieu deCHANNELD_NORMAL.

Mauvaise nouvelle : il n’y a pas encore de solution connue à ce problème.

Sources :

https://medium.com/@dougvk/run-your-own-mainnet-lightning-node-2d2eab628a8b

https://github.com/ACINQ/eclair

https://medium.com/coinmonks/the-lightning-network-how-to-install-and-hopefully-make-money-6e3058e3fa7c

https://medium.com/coinmonks/installing-lightning-network-part-2-here-we-go-again-ed5a84f9cade