Qu’est-ce qu’un nœud Bitcoin ?

Un nœud bitcoin est une machine qui fait fonctionner un programme qui stocke, au fur et à mesure, l’ensemble du blockchain Bitcoin et donc l’ensemble des transactions depuis sa création. Chacun des nœuds est capable de vérifier de manière autonome l’ensemble des transactions et l’ensemble des blocs qu’il reçoit depuis le réseau.

Pour en savoir plus sur le fonctionnement de Bitcoin, je vous invite à lire mon introduction au bitcoin.

Pourquoi monter un nœud Bitcoin ?

Le réseau Bitcoin est constitué de machines connectées entre elles en peer to peer ce qui signifie que toutes les machines qui y participent ne sont pas plus spéciales les unes que les autres. Il n’y a pas de serveur central, pas d’autorité et pas de hiérarchie.

La solidité, la rapidité et la sécurité du réseau dépend donc du nombre de machines honnêtes qui maintiennent le blockchain, valident et propagent les transactions.

Monter un nœud, c’est donc participer au bon fonctionnement du Bitcoin.

Si vous désirez faire du minage, je vous invite à lire mon tutorial sur comment miner des bitcoins même si ce n’est plus trop rentable à l’heure actuelle.

Matériel et système d’exploitation.

A partir du moment où vous ne souhaitez pas faire de minage, n’importe quel ordinateur “classique” suffit. Il faut juste disposer d’un peu d’espace disque car le blockchain fait, à l’heure où j’écris ces lignes, plus de 40 GO.

Pour le système d’exploitation, j’ai choisi d’utiliser une Debian Jessie (installation basique sans interface graphique et juste un service SSH) mais vous pouvez choisir n’importe quelle distribution.

Installation des paquets nécessaires.

Nous allons maintenant installer l’ensemble des packages nécessaires à la récupération des sources de bitcoin core et à sa compilation :

apt-get install build-essential autoconf libssl-dev libboost-dev libboost-chrono-dev libboost-filesystem-dev libboost-program-options-dev libboost-system-dev libboost-test-dev libboost-thread-dev git libtool shtool autogen pkg-config vim libevent-dev

Récupération des sources et compilation.

La raison principale pour laquelle j’ai décidé de compiler ma propre version de bitcoin core est que cela me permet d’avoir toujours accès à la dernière version. Si, par exemple, un problème de sécurité apparaissait, je n’aurai pas besoin d’attendre que quelqu’un fabrique une version compatible avec ma Debian, je pourrai instantanément construire ma version et la mettre en place rapidement.

Nous allons donc récupérer les sources de la branche 0.11 de bitcoin core depuis Github. Si vous souhaitez installer une autre version, vous trouverez la liste des branches ici : https://github.com/bitcoin/bitcoin/branches.

cd /root

git clone -b 0.13 https://github.com/bitcoin/bitcoin.git

Une fois les sources téléchargées, nous allons lancer la compilation et l’installation grâce aux commandes suivantes :

cd /root/bitcoin

./autogen.sh

./configure --without-gui --disable-wallet

make && make install

Création d’un utilisateur système.

Nous allons faire fonctionner bitcoin en service (daemon), ce sera donc un programme qui sera lancé au démarrage et s’exécutera en arrière-plan.

Pour se faire, nous allons créer un utilisateur système “bitcoind” qui ne pourra pas se loguer mais qui sera propriétaire du processus Bitcoind et qui aura un répertoire home “/home/bitcoin” qui stockera la configuration, les fichiers utiles et le blockchain :

useradd -s /usr/sbin/nologin -r -m -d /home/bitcoin bitcoind

Configuration du daemon.

La configuration du nœud Bitcoin se fait via un fichier “bitcoin.conf” dont vous pouvez trouver une version complète ici. Dans ce tutorial, nous allons nous contenter de mettre la configuration minimum nécessaire, c’est à dire l’identifiant et le mot de passe :

mkdir /home/bitcoin/.bitcoin

echo rpcuser=bitcoinrpc > /home/bitcoin/.bitcoin/bitcoin.conf

echo rpcpassword=JRkDy3tgCYdmCEqY1VdfdfhTswiRva >> /home/bitcoin/.bitcoin/bitcoin.conf

echo txindex=1 >> /home/bitcoin/.bitcoin/bitcoin.conf

note : je vous invite à choisir un autre mot de passe que celui inscrit ci-dessus.

Paramétrage du service.

Nous allons maintenant créer le fichier “/etc/init.d/bitcoind” qui est le script de démarrage, d’arrêt et de rechargement du service :

/etc/init.d/bitcoind

Vous devez ensuite rendre ce script exécutable avec la commande :

chmod +x /etc/init.d/bitcoind

et enfin le rajouter comme script d’initialisation du système :

update-rc.d bitcoind defaults

Vérification.

Afin de vérifier que tout fonctionne parfaitement, nous allons redémarrer le système avec la commande :

shutdown -r now

Une fois redémarré, nous allons vérifier que le service bitcoin est bien en activité grâce à la commande :

bitcoin-cli -datadir=/home/bitcoin/ -conf=/home/bitcoin/.bitcoin/bitcoin.conf getinfo

Vous devriez avoir une réponse du système qui ressemble à ça :

bitcoin-cli getinfo

{

“version” : 110200,

“protocolversion” : 70002,

“walletversion” : 60000,

“balance” : 0.00000000,

“blocks” : 1504,

“timeoffset” : 0,

“connections” : 2,

“proxy” : “”,

“difficulty” : 1.00000000,

“testnet” : false,

“keypoololdest” : 1448293929,

“keypoolsize” : 101,

“paytxfee” : 0.00000000,

“relayfee” : 0.00005000,

“errors” : “”

}

Parmi les résultats, la ligne “blocks” indique combien de blocks ont été récupéré jusqu’à présent.

Pour savoir précisément où vous en êtes, la commande suivante permet de comparer le nombre de blocks que votre serveur a récupéré avec le nombre de blocks existants actuellement :

echo `bitcoin-cli -datadir=/home/bitcoin/ -conf=/home/bitcoin/.bitcoin/bitcoin.conf getblockcount 2>&1` / `wget -O - http://blockchain.info/q/getblockcount 2>/dev/null`

Si après le redémarrage de votre serveur le service n’est pas lancé vous pouvez consulter les fichiers “/var/log/daemon.log” et “/home/bitcoin/debug.log” pour chercher d’où vient le problème.

Monitoring

Le problème des services Linux est que si ils tombent en panne, on ne s’en rend pas vraiment compte. Il y a bien sûr des outils pour traiter cette problématique mais pour faire simple, j’utilise https://bitnodes.21.co/.

Il s’agit d’une plateforme qui essaye d’estimer la taille du réseau bitcoin. Vous pouvez y ajouter votre nœud et ensuite vous abonner au monitoring de celui-ci. Vous recevrez désormais un email indiquant chaque changement de statut (up, down, stalled…) de votre serveur.

Page qui présente le statut de votre serveur

Conclusion.

Une fois votre serveur lancé, il faudra être patient car la récupération/vérification de l’ensemble des blocks du blockchain peut prendre plusieurs jours mais ensuite, vous aurez le plaisir de faire parti de ces bénévoles qui font que bitcoin fonctionne :)