Installer un portefeuille Bitcoin et effectuer un paiement

Linux Pratique n° 104 | novembre 2017 | Simon Descarpentries
Creative Commons
  • Actuellement 0 sur 5 étoiles
0
Merci d'avoir participé !
Vous avez déjà noté cette page, vous ne pouvez la noter qu'une fois !
Votre note a été changée, merci de votre participation !
Effectuer un paiement en Bitcoin est une opération appelée à devenir courante vu le succès des monnaies numériques par chiffrement. Toutefois, ce n’est, sur le principe, pas tout à fait aussi simple qu’envoyer un courriel, et encore, en considérant ici leur version chiffrée… Nous allons donc consacrer ce tutoriel à regarder les différentes étapes de ce processus d’un peu plus près.

Outil utilisé : bitcoincore 0.14.2

Étape 1 : Instructions d'installation

Pour commencer, il faut disposer d’un portefeuille Bitcoin. Plus d’une dizaine de logiciels existent en la matière (comme on peut s’en convaincre à l’adresse suivante : https://en.bitcoin.it/wiki/Clients), et on ne compte plus les sites web proposant ce service, toutefois, dans le cadre de ce tutoriel, nous allons nous concentrer sur la solution de base : le portefeuille officiel Bitcoin Core (au lieu d’une version certes simplifiée, mais incomplète du coup, ou plus sophistiquée et donc plus compliquée). Parler de « portefeuille » dans ce cas est d’ailleurs un poil réducteur dans la mesure où le logiciel Bitcoin Core est en fait un nœud Bitcoin complet, capable non seulement de recevoir et de renvoyer des Bitcoins, mais également d’en miner (avec votre CPU, donc plutôt en théorie…), et de valider des transactions. Notons que face à une liste de clients Bitcoin, il est naturel de chercher à différencier les options (souvent avec un commentaire rapide, repris du site officiel de la solution en question), tous les fournisseurs de solutions alternatives ont alors beau jeu de critiquer la solution « par défaut » retenue ici (il en va de la justification de leur travail et bien souvent de la simple promotion de leur offre commerciale). Toutefois, il faut reconnaître que disposer d’un nœud Bitcoin complet et fonctionnel implique de le faire tourner plusieurs heures par jour pour qu’il se synchronise, et donc de disposer d’une connectivité à Internet adéquate, avec au moins 50ko/s de débit ascendant. Enfin, l’utilisation du Bitcoin est tout simplement illégale dans certains pays comme le Bangladesh, la Bolivie, l’Équateur ou le Kirghizistan (cf. https://bitcoin.org/en/full-node#costs-and-warnings).

J’imagine que ces dernières considérations n’ont pas même égratigné votre enthousiasme, et que vous êtes au contraire impatient de commencer par le téléchargement de l’une des versions précompilées de Bitcoin Core proposées sur Bitcoin.org : https://bitcoin.org/fr/telecharger.

Il faut ensuite décompresser l’archive et se déplacer dans le dossier bin/ ainsi créé pour y lancer la commande :

./bitcoind

Cette dernière se charge alors automatiquement de créer un portefeuille et de télécharger la blockchain du Bitcoin afin de pouvoir à son tour émettre des transactions (à la suite des précédentes dans l’historique mondial). Cette dernière opération se révèle de plus en plus problématique, car cela représente fin 2017 un téléchargement d’environ 150Go (et cela ne fera qu’augmenter). C’est donc long, puis encombrant, mais c’est le prix de la liberté (vous ne dépendrez ainsi d’aucun autre fournisseur de service).

Le résultat du lancement du démon Bitcoin Core (bitcoind) se matérialise dans le dossier caché ~/.bitcoin/. situé à la racine de votre répertoire utilisateur (dont le chemin est symbolisé ici par un tilde, comme votre interpréteur de commandes le comprend). Dans ce dossier, on trouvera principalement deux choses intéressantes :

- un fichier de configuration bitcoin.conf qui permet d’affiner le comportement de notre nœud Bitcoin ;

- un ensemble de fichiers constituant la blockchain (pour un total d’environ 150Go fin 2017).

Enfin, lancer bitcoind c’est bien, mais le lancer à chaque démarrage c’est mieux. Il est ainsi envisageable de créer un service systemd ou une instruction cron qui se chargerait de démarrer le logiciel avec votre ordinateur. Pour les ordinateurs personnels, une solution peut consister à ajouter une tâche au démarrage de Xfce (ou de votre environnement de bureau préféré) pour lancer bitcoind. Notez de plus qu’il existe une version graphique du client officiel Bitcoin Core, livrée dans l’archive que vous avez décompressée et nommée : bitcoin-qt (Figure 1). Cette version est pratique pour effectuer les opérations courantes à la souris, mais encombre votre mémoire RAM pour rien le reste du temps. Je la cite ici, car elle propose une case à cocher libellée : Lancer automatiquement au démarrage, mais cette fonctionnalité n’a d’effet que sous Microsoft Windows (ce qui est plutôt rassurant pour un logiciel lancé depuis un simple utilisateur de votre système).

Figure 1

Étape 2 : Premiers pas

Si vous avez bien suivi ce tutoriel, vous vous retrouvez avec une console occupée, où les messages du journal d’exécution de Bitcoin Core défilent au rythme des téléchargements de portions de blockchain. En partant de là, vous pourriez récupérer la main sur votre console en effectuant la combinaison de touches [CTRL]+[Z] pour suspendre le processus en cours d’exécution et retrouver une invite de commande, puis lancer la commande bg pour que le processus ainsi suspendu reprenne son cours, mais en arrière-plan, vous laissant la main dans le terminal. Cette manipulation peut vous tirer d’affaire chaque fois que vous avez oublié de mettre un & à la fin d’une commande qui garde la main trop longtemps à votre goût. Toutefois, dans notre cas, une fois revenu à la vie, bitcoind va continuer à polluer votre console avec son journal d’exécution… Lancer un deuxième terminal est donc préférable pour continuer à jouer (pour un prochain lancement, essayez donc l’option -daemon de bitcoind).

Dans ce deuxième terminal, nous allons afficher l’adresse qui a été créée pour vous, à l’aide de la commande suivante :

./bitcoin-cli listreceivedbyaddress 0 true

Cette dernière vous retournera les quelques lignes de texte représentant un tableau JSON contenant des objets dont les entrées sont les suivantes :

- adresse ;

- compte ;

- montant ;

- confirmations.

On s’attend ici à trouver un seul objet, avec votre nouvelle adresse et un montant associé de 0 BTC.

La commande :

./bitcoin-cli newaddress

Vous permettra, à tout moment, de disposer directement d’une nouvelle adresse. Comme nous l’avons vu dans l’article principal, toute transaction en Bitcoin est publique et l’historique d’une adresse est facilement retrouvable sur le Web. De ce point de vue, être capable de générer rapidement une nouvelle adresse se révèle intéressant. Par exemple chaque interlocuteur peut ainsi être cloisonné avec une nouvelle adresse, voire même chaque nouvelle entrée d’argent. Vous n’être propriétaire d’une adresse que si vous en connaissez sa clé secrète, et ça, tant que vous n’en avez pas fait un usage révélateur, ça reste discret.

Étape 3 : Protéger son portefeuille numérique

Il ne serait pas sérieux d’aller plus loin dans ce tutoriel sans prendre le temps de chiffrer son portefeuille Bitcoin à l’aide d’une clé privée elle-même déverrouillable par mot de passe, lui-même plus sérieusement dénommé phrase de passe. Pour ce faire, il convient donc d’élaborer une phrase de passe décente (c’est-à-dire de plus de douze caractères, avec de la ponctuation et des chiffres). Mon truc sur la question, c’est de lancer plusieurs fois la commande mkpasswd dans un terminal (en saisissant une nouvelle série de caractères aléatoires au clavier en guise de sel ou graine d’aléa à chaque exécution), et d’assembler plusieurs résultats (mais pas tous) dans mon gestionnaire de mots de passe (type keypassx). Cette manipulation ne protège pas de tout, mais elle éviterait certains désagréments liés à une découverte future de failles dans l’algorithme de hachage mis en œuvre par défaut dans mkpasswd.

Une fois qu’on a décidé d’une bonne passphrase, on peut chiffrer son portefeuille avec la commande :

./bitcoin-cli encryptwallet <passphrase>

Une fois l’opération réussie, une petite sauvegarde de portefeuille s’impose… Elle prendra la forme d’un simple fichier binaire, qui pourra être utilisé pour rétablir votre portefeuille sur une nouvelle machine. L’objectif étant de faire en sorte que cette copie du portefeuille ne disparaisse pas avec votre ordinateur principal en cas de gros crash, de vol ou d’autodestruction complète. Il vous faudra donc copier ce fichier sur plusieurs autres supports physiques, si possible pas tous stockés chez vous, car un incendie pourrait encore venir à bout de l’ensemble des copies, que l’on peut par contre disséminer chez des amis, dans son téléphone, dans le grenier de sa grand-mère, dans la bibliothèque du bureau du boulot, etc. (même si ce dernier concept est en train de disparaître entre openspace temporaire de pépinière d’entreprises et travail à domicile…).

./bitcoin-cli backup <path>

Voici donc la commande qui copiera un wallet.dat au bout du chemin passé en argument. Après c’est à vous de jouer…

Étape 4 : Effectuer une transaction

Faisons maintenant un bond en avant dans le temps et considérons que votre nœud Bitcoin a fini de se synchroniser avec le réseau et qu’il valide joyeusement des transactions pour vous (vous rapportant peut être quelques satoshis au passage… Satoshis ? C’est le nom donné à la plus petite unité de valeur de Bitcoin, le dix-millionième, soit : 0,000 000 01 BTC). Considérons également que vous disposez en plus d’un solde positif pour l’une de vos adresses, ce que nous allons commencer par vérifier avec la commande suivante (et nous jetterons un voile pudique sur tout ce qu’il vous aura fallu faire pour parvenir à cette fin, notamment sur le nombre vertigineux de CAPTCHA qu’il vous aura fallu résoudre auprès de dizaines de faucets, ces robinets à satochis en libre service sur le Web. Après en avoir trouvé qui honorent vraiment leurs promesses, on est considérablement enrichi, car d’une part on a acquis quelques fractions de Bitcoin, mais surtout on s’est souvenu d’à quel point son temps est précieux, chaque instant perdu ne se représentant plus… Et dire que c’est aujourd’hui un métier à part entière (en Chine) de résoudre des CAPTCHA pour les autres. Car oui, on trouve plusieurs offres sérieuses à ce sujet sur le Web, puisque les centimes des uns font vivre les familles des autres et qu’il n’y a semble-t-il que Thorgal et moi qui refusent d’avoir un maître, comme d’en être un) :

./bitcoin-cli getwalletinfo

La sortie obtenue sur la console devrait alors entre autres comporter une valeur nommée balance, résumant votre solde, toutes adresses confondues.

Voici un exemple de résultat :

{

    "walletversion" : 60000,

    "balance" : 0.00200000,

    "txcount" : 17,

    "keypoololdest" : 1398809500,

    "keypoolsize" : 196,

    "unlocked_until" : 0

}

Notons au passage qu’il est possible de regrouper plusieurs adresses au sein d’un même compte, et de disposer de plusieurs comptes dans son portefeuille. Ce niveau intermédiaire (les comptes) vient donc surcharger bon nombre de commandes d’arguments optionnels, et a même été récemment supprimé pour certaines monnaies dérivées, comme le Gridcoin. L’idée d’avoir plusieurs adresses pour un même compte (disons pour un même cas d’usage) n’étant pourtant pas tout à fait dénuée de sens comme nous l’avons vu concernant la mis en place d’un minimum de vie privée à l’usage du Bitcoin.

À partir de là, il est possible de transférer vos 0,002 BTC à quelqu’un d’autre, en utilisant la commande suivante :

./bitcoin-cli sendtoaddress <bitcoinaddress> <montant> [commentaire] [commentaire-dest]

Les deux arguments à fournir impérativement sont l’adresse Bitcoin du destinataire et le montant. Ce dernier ne doit pas comporter plus de 8 décimales, marquées par un point (et non une virgule) à la monde anglaise donc. Les deux champs de commentaire correspondent à ce qui apparaîtra dans votre historique, et celui du destinataire, pour documenter la transaction.

Si vous avez bien suivi toutes les étapes, le logiciel doit vous renvoyer un message d’erreur, arguant du fait que vous n’avez pas préalablement déverrouillé votre portefeuille, et que les opérations importantes sont donc refusées. En effet, pour pouvoir dépenser vos Bitcoins, il faut indiquer au portefeuille que c’est bien le propriétaire qui est à l’initiative, en saisissant la passphrase pour obtenir temporairement les privilèges adéquats (fonctionnement qui n’est pas sans rappeler le déverrouillage d’une clé PGP par exemple).

./bitcoin-cli walletpassphrase <passphrase> <durée>

Vous disposerez alors de la durée exprimée en seconde pour réaliser votre transaction. Si vous indiquez 3600 secondes, et que vous souhaitez reverrouiller votre portefeuille au bout de quelques minutes, la commande suivante est faite pour vous :

./bitcoin-cli walletlock

Une fois votre transaction lancée, Bitcoin Core vous répond avec object JSON comme il est de coutume, et entre autres valeurs un txid ou numéro de transaction. Ce numéro vous permet ensuite de suivre l’avancée des opérations via la commande :

./bitcoin-cli gettransaction <txid>

On suivra notamment ici, et avec avidité, l’arrivée des premières confirmations de la transaction (dans le listing JSON retourné) par les autres nœuds Bitcoin complets du réseau scellant la destinée de cette transaction. La plupart des marchands en ligne attendent en effet 3 à 5 confirmations avant de considérer une transaction comme réelle et complètement effectuée.

Note

Aller plus loin

L’interface de commande de Bitcoin Core permet bien d’autres opérations, comme les paiements à multiples destinataires, le réglage des frais de transaction (ajustés à la valeur courante sinon), et le suivi de nombreux paramètres du réseau. Pour creuser un peu les possibilités de cette interface, voici deux pistes :

- https://en.bitcoin.it/wiki/Original_Bitcoin_client/API_calls_list

- https://bitcoin.org/en/developer-reference

D’autres opérations méritent sinon votre attention, comme les transactions à multi-signature, ou les transactions dites hors ligne, qui s’appuient sur un couple de portefeuilles : l’un plénipotentiaire, mais caché sur une machine hors ligne, séparée de toute connectivité dans l’idéal, et l’autre connecté, mais incapable de valider une transaction, de sorte qu’aucune escalade de privilège depuis l’Internet sur votre machine connectée ne puisse déboucher sur une dépense ; certains portefeuilles se sont spécialisés dans cette démarche de sécurité, mais ça, je vous laisse le découvrir en ligne.