Partager cet article :

 

 

Aujourd’hui, nous allons nous attaquer à la problématique des processeurs de paiement. Il en existe déjà plusieurs comme : 

Si ces services sont reconnus, ils souffrent néanmoins d’être complètement centralisés. C’est regrettable surtout lorsque l’on sait que Bitcoin est un système de transfert de valeur pair-à-pair (a peer-to-peer electronic cash system) et que son objectif est la désintermédiation.

Tout a commencé par un désaccord entre le développeur Nicolas Dorier et BitPay, l'un des processeurs de paiement les plus populaires :

 

tweet du créateur de btcpay server (Nicolas Dorier

 

C’est suite à cet épisode que Nicolas Dorier a commencé à développer sa propre solution de processeur de paiement open source et désintermédié. Sous le doux nom de BTCpay Server, il peut être installé par le commerçant ou par un tiers de confiance. Mieux que ça, il est prévu pour être déployé sur n’importe quel type de machine (y compris un Raspberry Pi 3 ou 4) tout en restant suffisamment bien pensé pour répondre aux exigences d’architecture des grandes entreprises.

Malgré son nom, il supporte également Litecoin, Dash et la documentation (à destination des développeurs) explique très clairement comment adapter l’outil pour supporter d’autres cryptomonnaies. Par ailleurs, l’intégration du Lightning Network est déjà opérationnelle. 

Ne vous y trompez pas : BTCPay Server n’est pas ce type de projet à la demi-vie, l’outil fonctionne déjà très bien et a le soutien de Square qui pour rappel a été cofondé par Jack Dorsey (PDG et fondateur de Twitter). En effet la branche ‘crypto’ de Square a d'ailleurs récemment versé 100 000 $ à la fondation BTCPay server.

Notez également que BTCPay Server peut répondre à deux grands cas d’usage :

  • Un commerçant souhaitant déployer son propre point de vente (commerce ou commerce électronique)
  • Un hébergeur de point de vente souhaitant fournir un moyen de paiement aux commerçants

Si la première solution est celle qui fournit le plus d’autonomie aux commerçants, la seconde est idéale pour ceux qui ne souhaiteraient pas installer eux-mêmes la solution.

C’est donc avec une joie non dissimulée que je vais vous partager l’installation en mode simplifié.

 

Objectifs

BTCpay Server dispose d’un grand nombre de fonctionnalités dont :

  • Le paiement en bitcoinson-chain’ (full node bitcoind et NBXplorer)
  • Le paiement en bitcoin par Lightning Network (nœud lnd ou c-lightning)
  • L'anonymisation du site web du nœud Lightning Network à l’aide de TOR 
  • Patron (alternative open source à Patreon)
  • L'intégration Woocommerce
  • La publication des services web via NGINX (certificat géré automatiquement via Let’s Encrypt)

L’objectif de ce tutoriel est de mettre en place une instance BTCPay Server auto-hébergée à destination d’un unique commerçant et disposant des fonctionnalités de paiement ‘on-chain’ et Lightning Network. TOR sera déployé bien que cela soit optionnel. 

La fonctionnalité de paiement ‘on-chain’ se base sur l’usage du wallet matériel Ledger (Nano S ou X). En effet, nous verrons que BTCPay Server facilite grandement cette intégration dans le but réduire un maximum la confiance nécessaire dans le gestionnaire de l’instance. Cette configuration permet aux commerçants d’utiliser des adresses Bitcoin issues de son propre wallet sans pour autant fournir à l'application la capacité de paiement.

Pour le mode de paiement Lightning Network, le commerçant utilisera le nœud de l’instance.

Notez qu’à fin septembre 2019, un full node Bitcoin nécessite 270 Go d’espace disque. Heureusement, BTCPay Server permet de réduire cet espace à l’aide de la fonction prune.

Point d’attention concernant Lightning Network : le protocole est encore en cours de développement et les implémentations actuelles (lnd, c-lightning, etc.) ne fournissent pas le même niveau de sécurité que le protocole Bitcoin. D’autre part, chaque paiement réalisé par ce biais reste séquestré dans les canaux. Un commerçant souhaitant récupérer ses fonds devra donc fermer ses canaux ou utiliser des bourses d’échanges comme ZigZag. Par ailleurs, il est recommandé d’avoir une bonne connaissance du fonctionnement de Lightning Network surtout si vous souhaitez l’utiliser comme moyen de paiement à votre commerce.

 

Architecture btcpay server

 

 

Définition des pré-requis

S’il est possible d’installer BTCPay Server sur un Raspberry, ce tutoriel est réalisé sur un hébergement virtuel hébergé (VPS) chez Scaleway (le prix est annoncé hors-taxe).

 

serveur utilisé pour le tutoriel

 

BTCPay Server nécessitant l’hébergement d’un full node Bitcoin, prévoyez 60 Go d’espace disque (avec le support du prune activé). Docker étant utilisé dans ce tutoriel, les données seront stockées dans /var/lib/docker (partition / sur ma configuration).

Voici les spécifications logicielles :

  • Ubuntu 18.04 LTS
  • Docker 19.03
  • docker-compose : 1.24
  • Git

Je ne détaillerai pas en profondeur l’installation de Docker. Cependant, selon votre configuration, il est possible que votre espace disque dédié au stockage ne soit pas votre disque principal. Dans ce cas, il ne sera pas possible de stocker l’ensemble du registre de votre nœud Bitcoin. Il faudra donc modifier le répertoire de travail de docker de la manière suivante (source).

Modifiez le fichier de configuration du démon Docker (/lib/systemd/system/docker.service).

Localisez la ligne suivante :

ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock

Remplacez-la par (remplacez /new/path/docker par votre futur répertoire de travail dans la partition de stockage) :

ExecStart=/usr/bin/docker daemon -g /new/path/docker -H fd://

Stoppez Docker :

systemctl daemon-reload

Créez votre nouveau répertoire de travail et copiez l’ensemble des données docker :

mkdir /new/path/docker

rsync -aqxP /var/lib/docker/ /new/path/docker

Relancez Docker :

systemctl start docker

 

Installation

Avant de commencer, sachez que le tutoriel se base sur la documentation suivante (btcpayserver/btcpayserver-docker). Elle est extrêmement complète et je vous invite à y jeter un œil pour toutes configurations sortant du cadre de ce tutoriel.

Clonez le projet Git :

git clone https://github.com/btcpayserver/btcpayserver-docker

cd btcpayserver-docker

Ici, il s’agira de définir les éléments de configuration à l’aide des variables suivantes :

export BTCPAY_HOST="a81e41ba-46ec-47e7-a6c9-4d3906ca8415.pub.cloud.scaleway.com"

export NBITCOIN_NETWORK="mainnet"

export BTCPAYGEN_CRYPTO1="btc"

export BTCPAYGEN_REVERSEPROXY="nginx"

export BTCPAYGEN_LIGHTNING="lnd"

export BTCPAYGEN_ADDITIONAL_FRAGMENTS="opt-save-storage-xs;opt-add-tor"

export LIGHTNING_ALIAS="a81e41ba-46ec-47e7-a6c9-4d3906ca8415.pub.cloud.scaleway.com"

export BTCPAY_ENABLE_SSH="true"

Cette configuration définit les éléments suivants :

  • BTCPAY_HOST : le nom DNS de l’instance web de BTCPay Server
  • NBITCOIN_NETWORK : le réseau Bitcoin (principal ou de test)
  • BTCPAYGEN_CRYPTO1 : la cryptomonnaie principale
  • BTCPAYGEN_REVERSEPROXY : le reverse proxy utilisé (utilisé pour publier BTCPay Server)
  • BTCPAYGEN_LIGHTNING : l’implémentation de Lightning utilisée
  • LIGHTNING_ALIAS : le nom DNS de l’instance lnd
  • BTCPAY_ENABLE_SSH : Permet de mettre à jour l'installation depuis le site web

La variable BTCPAYGEN_ADDITIONAL_FRAGMENTS est particulière, car elle permettra de paramétrer finement notre instance. Dans notre cas, les options suivantes seront définies :

  • opt-save-storage-xs : permet de limiter la taille du nœud Bitcoin à 25 Go
  • opt-add-tor : active TOR

Le lancement de la commande permettra de télécharger, installer et lancer les images Docker. Après quelques minutes, votre instance BTCpay est prête. 

Connectez-vous à votre instance en HTTPS à l’adresse configurée dans la variable BTCPAY_HOST. La page s’affiche.

 

interface de btcpay server

 

Vous remarquerez l’affichage de la fenêtre suivante. Elle indique simplement que votre nœud Bitcoin est en cours de synchronisation. Il faudra plusieurs jours selon votre connexion.

 

synchronisation du noeud bitcoin

 

Sans attendre la fin de la synchronisation avec le réseau, cliquez sur “Register” afin de vous créer votre compte administrateur.

 

création de compte administrateur

 

Identifiez-vous avec.

 

Création du premier store

Comme évoqué en introduction, la solution BTCPay Server est une solution non custodial. La création d’un store permet à un commerçant de définir les paramètres de paiement comme votre clef publique étendue et votre nœud Lightning Network.

 

Paiement on-chain

La clef publique étendue permet au commerçant de générer automatiquement des factures à l’adresse de son wallet. Dans ce tutoriel, nous utilisons le portefeuille hardware de Ledger. Ce dernier est intégré nativement et l’usage de ce portefeuille simplifie vraiment la création du store

Au préalable, je vous suggère de créer un nouveau compte sur Ledger Live.

Dans le menu Account, cliquez sur Add account.

 

interface de création de compte sur ledger live

 

Allez jusqu’à l’étape 3 et sélectionnez Segwit.

 

création de compte ledger

 

Une fois créé, sélectionnez votre nouveau compte et cliquez sur la clef à molette.

 

Accès avancé pour récupérer la clef publique étendue

 

Dans la nouvelle fenêtre, cliquez sur Advanced Logs afin d’afficher le chemin de dérivation.

 

Affichage du chemin de dérivation

 

Branchez votre Ledger Nano à votre ordinateur et lancez l’application Bitcoin.

Dans l’interface BTCPay Server, allez dans le menu Settings, cherchez la configuration Derivation Scheme et cliquez sur Modify. L’écran suivant s’affiche.

 

interface d'importation de la clef publique étendue

 

Cliquez sur Import from Hardware Device, sélectionnez Ledger Wallet et sélectionner le compte en se basant sur le chemin de dérivation obtenu dans Ledger Live (dans mon cas 49/0/1 correspondant à Account 1). Sur votre Nano, il vous sera demandé à plusieurs reprises d’exporter votre clef publique. Confirmez toutes les demandes.

 

sélection du compte dans l'interface d'importation de la clef publique étendue

 

Une fois cette opération réalisée, votre clef publique étendue est ajoutée dans l’interface web.

Allez à l’étape suivante. Cette dernière vous affiche les premières adresses de votre compte Ledger Live qu’il vous faut confirmer en générant une nouvelle adresse de réception sur l’application Ledger Live.

 

Résumé des adresses publiques du wallet

 

Confirmez cette dernière étape. 

 

Paiement par Lightning Network

 

Gestion du nœud

Avant de configurer le store, il est nécessaire de créer des canaux afin de fournir de la liquidité nécessaire au paiement. Il faut capitaliser suffisamment votre nœud sous peine de ne pas pouvoir recevoir les paiements.

La première chose à faire est d’apporter de la liquidité entrante. Rien de plus simple : rendez-vous directement sur LNBIG et cliquez sur “LND / C-lightning / Eclair”, puis cliquez sur Next.

 

Interface de demande de canal lightning network entrant

 

Identifiez les commandes sous “Commands for LND inside BTCPay” et collez-la en SSH dans le répertoire btcpayserver-docker de votre serveur. 

Après quelques secondes, LNBIG initie l’ouverture du canal. Cela peut prendre plusieurs heures pour qu’il soit effectif.

 

Configuration du magasin

Sans attendre la création effective de votre canal, allez dans l’interface BTCPay Server, menu “Settings”, cherchez la configuration “Lightning Network (experimental)” et cliquez sur “Modify”. 

L’écran suivant est affiché.

 

interface de configuration du noeud lightning network utilisé par le store

 

Nous allons configurer le magasin afin qu’il utilise le nœud Lightning Network de l’instance. Pour ce faire, cliquez sur “clicking here” afin de définir la méthode de connexion adéquat.

 

Auto configuration du noeud lightning networl

 

La ligne suivante doit s’afficher :

type=lnd-rest;server=http://lnd_bitcoin:8080/;macaroonfilepath=/etc/lnd_bitcoin/admin.macaroon;allowinsecure=true

Cliquez sur Submit pour valider.

 

Création d’un point de vente

Au sens BTCPay Server une ‘app’ peut être un point de vente (point of sale) ou un financement participatif. Dans le cas d’un point de vente, c’est ici qu’un commerçant peut créer l’affichage de sa boutique ainsi que les produits à mettre en vente.

Dans l’onglet App, cliquez sur ‘Create a new App’. Donnez-lui un nom, sélectionnez ‘PointOfSale’ et le store que vous avez créé plus haut.

 

création d'un nouveau point de vente

 

Cliquez sur Create. BTCPay Server crée un exemple éditable sur la base d’un magasin de vente de thé.

 

exemple de création de point de vente

exemple de magasin 2

 

Il serait difficile d’être exhaustif au regard du nombre de possibilités. Je vous invite à jeter un œil à la documentation du site (https://docs.btcpayserver.org/features/apps). Vous trouverez facilement de quoi paramétrer à votre convenance votre point de vente.

Notez qu’il est possible d’avoir une prévisualisation du rendu global en cliquant sur ‘View App’. En voici un exemple :

 

Exemple de point de vente

 

Pour terminer, voici deux exemples de paiement.

 

Paiement on chain

On-chain

 

paiement lightning network

Lightning Network

 

 

En supplément

En plus du présent tutoriel, voici quelques informations supplémentaires pour vous aider à prendre en main la solution.

 

Historiques des factures

BTCPay Server permet très facilement récupérer l’historique des factures. Il est même très facile de l’exporter en CSV ou en JSON.

Pour ce faire, allez dans le menu store et cliquez sur l’action “Invoices”.

 

Accès aux factures d'un store

 

L’écran suivant est affiché.

 

historique des factures

 

À l’aide de la fonction de recherche, il est possible de filtrer les résultats à l'aide de plusieurs critères.

Il est également possible d'afficher les détails des factures.

 

détails factures

 

Ces informations sont nécessaires en cas de litige.

 

Gestion du nœud Lightning

Il est possible de gérer son nœud de plusieurs manières.

La première consiste à utiliser l’interface web Ride The Lightning (RTL). Cliquez sur “Server Settings”, “Services” et enfin “See Information” du service Ride The Lightning server.

 

Accès à ride the lightning server

 

Ensuite, cliquez sur “clicking here” pour ouvrir la page d’administration de votre nœud.

 

Accès à ride the lightning server

 

La page suivante s’affiche.

 

affichage de l'interface de gestion de lnd

 

La seconde méthode passe par la commande ./bitcoin-lncli.sh accessible en SSH.

Ces outils vous serviront à gérer votre nœud et réaliser les actions suivantes :

  • Ouvrir et fermer vos canaux
  • Capitaliser vos nœuds
  • Vérifiez l’état de vos canaux et votre liquidité
  • L’historique des factures Lightning Network de votre nœud
  • La création de factures Lightning Network
  • Le paiement de factures Lightning Network

 

Capitalisation du nœud

En SSH, il suffit de lancer la commande suivante :

./bitcoin-lncli.sh newaddress np2wkh

Avec Ride The Lightning, cliquez sur “LND wallet” et “Send/Receive”.

 

récupération d'une adresse bitcoin pour capitaliser le noeud lightning

 

Sélectionnez “np2wkh” et cliquez sur Generate Address. Envoyez des fonds à cette adresse.

 

Création d’un canal sortant

En cas de nécessité, il est peut être intéressant de créer un canal avec de la liquidité sortante.

Avec Ride The Lightning, cliquez sur “Channels” et “Management”.

 

liste des canaux

 

Dans le champ “Alias”, ajoutez le nœud distant sous la forme id@adresse:port (par exemple : 02ad921d465e6ecfe493e90864275ffcf1b70c6050c76e6c33701b0c3686d687b9@ye4p5iq5jzc537ch6sk5t25fhhzawtrdhw4tkwsngohamzjl55byzgyd.onion:9735).

Ajoutez la quantité de satoshis à mettre sous séquestre et cliquez sur “Open”.

 

Fermeture d’un canal

La fermeture d’un canal permet de libérer les fonds. Deux possibilités peuvent se présenter :

  • Le nœud distant est en ligne : le canal est fermé rapidement et les fonds sont récupérés après confirmation de la transaction.
  • Le nœud distant ne répond pas : la fermeture du canal et la récupération des fonds peuvent prendre jusqu’à une semaine.

Avec Ride The Lightning, cliquez sur “Channels” et “Management”.

Cliquez sur l’icône correspondant au canal à fermer :

icône de fermeture d'un canal

 

 


 

jonathan fraga

Jonathan Fraga

De formation réseau et sécurité, je suis tombé en 2014 dans Bitcoin. J'ai vécu la popularisation des "technologies blockchains" avec l'émergence de Ethereum et survécu à l'euphorie de 2017. J'aime analyser Bitcoin à travers ses concepts et sa technologie. J'aime encore plus partager mes découvertes.

jonathan fraga twitter-jonathan fraga

 

A propos de l'auteur : Jonathan Fraga

twitter-soothsayerdatatwitter-soothsayerdataSite de Jonathan Fraga

De formation réseau et sécurité, je suis tombé en 2014 dans Bitcoin. J'ai vécu la popularisation des "technologies blockchains" avec l'émergence de Ethereum et survécu à l'euphorie de 2017. J'aime analyser Bitcoin à travers ses concepts et sa technologie. J'aime encore plus partager mes découvertes.
Tous les articles de Jonathan Fraga.

Partager cet article :

5
Poster un Commentaire

avatar
2 Comment threads
3 Thread replies
1 Followers
 
Most reacted comment
Hottest comment thread
4 Comment authors
Jonathan FragaCyrilJonathanJeanSosthene Recent comment authors
plus récents plus anciens
Cyril
Lecteur
Cyril

Merci pour le tuto.
De mon coté je n'ai jamais réussi a utiliser la fonctionnalité "import from ledger", pourtant tout semble OK (ledger et navigateur).
Du coup j'importe l'adresse xpub, mais les adresses affichées ne correspondent pas avec la première que le ledger me propose (et j'ai perdu un paiement BTC comme ça)

Sosthene
Lecteur
Sosthène

Excellent article, c'est rare d'avoir des tutos qui rentrent autant dans le détail ! Juste une petite précision concernant le support de Tor, dans le cas de BTCPay il ne s'agit en fait pas de confidentialité mais de simplifier la configuration réseau qui est un peu complexe dans certains cas, l'équipe avait écrit un article là-dessus quand il l'avait ajouté https://medium.com/@BtcpayServer/about-tor-and-btcpay-server-2ec1e4bd5e51
Enfin bon c'est vraiment un détail, mais je pense que c'est bon d'être conscient qu'activer tor ne rend pas notre serveur BTCPay invisible !