La foudre dans une bouteille

Commencer

Dans la deuxième partie de notre série de réseaux de foudre, nous détaillerons notre expérience du réseau de foudre et de certains des pièges que nous avons découverts au cours de notre parcours. Dans la troisième partie de notre série, nous commencerons notre didacticiel sur la gestion de vos propres nœuds locaux, un nœud Lightning à partir du téléphone Android, et la création d’un canal de paiement entre le nœud mobile et le nœud local.

Vue d'ensemble

Nous nous sommes lancés dans la tâche d'établir un nœud Bitcoin et un nœud Lightning dans le cloud AWS, un nœud Lightning fonctionnant à partir d'un téléphone Android et, enfin, l'établissement d'un canal de paiement entre les deux nœuds Lightning. Pour commencer, nous voulions que tout fonctionne localement sur le réseau Bitcoin testnet avant d'essayer de faire fonctionner les nœuds à partir du nuage. Pour la partie Android, nous avons utilisé la mise en œuvre Scala du réseau Lightning par ACINQ. Nous tenons à les remercier pour avoir ouvert leur projet en sourcing et à l'équipe de LND pour leur soutien sans fin sur leur canal de jeu!

Chaîne d'outils utilisée

  • Android Java avec une implémentation Scala de Lightning Network
  • Implémentation du réseau Lightning par LND
  • btcsuite implémentation du protocole bitcoin
  • Docker pour la conteneurisation de nos nœuds
  • serveo pour exposer mon nœud de foudre local au monde

Nous avions l'intention d'utiliser AWS pour les fonctionnalités de cloud, mais nous avons rencontré beaucoup plus de problèmes qui nous empêchaient d'atteindre ce stade du développement.

Le faire fonctionner localement

Nœuds locaux

La mise en service des nœuds Bitcoin et Lightning n’était pas une mince affaire et consistait principalement à installer toutes les dépendances appropriées et à télécharger la blockchain de Bitcoin. Comme nous utilisions le testnet, le téléchargement ne prend que 4 heures environ. En dehors de cela, il était également important de s'assurer que nous avions les indicateurs et les configurations corrects pour les nœuds.

Android

Faire fonctionner Lightning Network sur un téléphone Android a demandé beaucoup plus d'efforts. Tout d’abord, nous avons dû jeter un œil au portefeuille éclair de l’ACINQ pour comprendre comment utiliser leur implémentation Scala du réseau Lightning. À première vue, cela semblait assez compliqué, mais nous avons ventilé pièce par pièce et isolé les composants nécessaires au code de base de la plaque de la chaudière.

Configuration supplémentaire

La dernière étape nécessaire pour faciliter la communication entre mes nœuds locaux et le monde extérieur consistait à les exposer via un serveur SSH pour la redirection de port. Nous avons utilisé serveo pour cela, mais ngrok fonctionne tout aussi bien.

Défis initiaux

Les tests constituaient l'aspect le plus fastidieux de la mise en service des nœuds et de la création d'un canal de paiement. Comme nous utilisions le réseau testnet, nous devions encore attendre 6 confirmations de la part des mineurs et leur exécution pouvait prendre jusqu'à 30 minutes. Chaque fois que nous créions une transaction de financement pour des transactions hors chaîne, ou fermions et réglions un canal de paiement, nous attendions plus d'une demi-heure.

Un autre inconvénient que nous avons rencontré est que nous ne pouvions pas financer le canal de paiement après son ouverture. Essentiellement, les fonds avec lesquels vous avez ouvert le canal de paiement correspondent à tous les fonds que vous devez dépenser avant que l'État ne soit diffusé sur la chaîne principale. Contrairement aux canaux de paiement que nous avons mis en place sur le réseau Ethereum, les canaux de paiement sur le réseau Lightning ne possèdent pas d'adresse, ou du moins d'adresses exposées, pouvant recevoir des fonds.

L’imprévisibilité générale du réseau a été un thème essentiel dans toutes nos recherches sur le Lightning Network. Plusieurs fois, nous aurions essayé d'ouvrir un canal de paiement avec un nœud aléatoire auquel nous aurions connecté et nous aurions été accueillis avec l'erreur suivante:

L’erreur nous indique que nous n’avons pas assez de satoshis dans notre portefeuille pour financer la transaction d’ouverture. Nous avons essayé de financer la chaîne avec 20000 satoshis. total 505281 satoshis. Dans notre portefeuille, nous avons 41173093, plus que suffisant pour financer la transaction.

Enfin, lorsque vous effectuez des transactions hors chaîne sur le réseau Lightning Network, vous devez payer des frais si votre transaction doit transiter par plusieurs nœuds! Les créateurs de Lightning Network estiment que la redevance devrait être de 1 satoshi par nœud ou moins. Les frais sont nominaux, mais vous devez néanmoins payer des frais aux nœuds que vous traversez, contrairement aux canaux de paiement Ethereum où il n’ya aucun frais.

  1. Un satoshi est la plus basse dénomination d'un Bitcoin. Sa valeur est un cent millionième de Bitcoin. En termes simples, 1BTC = 10⁸ satoshis.

Nœuds dans les nuages

Dockerizing Nos Nodes

Docker est un logiciel qui vous permet de conteneuriser vos serveurs et de créer des images à partir desquelles bon nombre de vos serveurs peuvent être instanciés. Il est souvent utilisé en jonction avec AWS pour que vos serveurs soient encapsulés et faciles à activer.

En parcourant le github de LND, nous avons trouvé des images Docker et démarré des scripts déjà créés par l’équipe de LND. Nous avons donc décidé de les essayer. Nous avons rapidement rencontré plusieurs erreurs en essayant de créer les images. Nous avons également constaté que les images étaient connectées via des liens Docker.¹ Les liens Docker étant obsolètes, nous avons donc créé nos propres images et les avons connectées à l'aide d'un réseau Docker. Construire les images était assez simple, il ne nous restait plus qu'à partager le certificat rpc en utilisant un volume entre le nœud Bitcoin et le nœud Lightning… Ou du moins, nous pensions.

Malgré le partage du certificat rpc entre les nœuds et la vérification de leur présence dans les deux conteneurs, le nœud Lightning n'a pas pu établir de connexion avec le nœud Bitcoin. Nous nous sommes assurés de vérifier que tous les bons ports étaient visibles sur les deux conteneurs, mais nous n’avons toujours pas eu de chance.

  1. Les liaisons Docker permettent de relier des conteneurs via un canal sécurisé pour permettre la communication entre eux. Lorsque vous utilisez un réseau Docker à la place, Docker crée un réseau virtuel dans lequel les conteneurs ont leurs propres adresses IP de sous-réseau.

En conclusion

Notre expérience avec le réseau Lightning était intéressante, amusante et informative. Nous avons beaucoup appris sur le protocole Lightning et sur le potentiel de la technologie. Malheureusement, la technologie semble encore trop instable et sous-développée pour être utilisée dans une solution de niveau de production évolutive. Nous allons certainement garder les yeux ouverts pour voir où va la technologie.

Merci d'avoir lu notre blog, nous espérons que vous avez appris un peu de notre expérience avec Lightning Network. Assurez-vous de rester à l'écoute pour la troisième partie, où nous vous montrerons comment créer vos propres nœuds, un nœud sur le téléphone Android, et créer un canal de paiement entre eux!