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 : regtest, testnet 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 : Recksplorer, Lightning Network Stores, Y’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/installing-lightning-network-part-2-here-we-go-again-ed5a84f9cade