Comment déployer un noeud validateur Mina et déléguer vos MINA : le tuto complet

Vous avez probablement entendu parler de Mina Protocol, le projet crypto pas comme les autres développé par la société 0(1) Labs, basée à San Francisco. La blockchain de Mina est la plus légère du marché, tout en cherchant à assurer protection et confidentialité des données sensibles de ses utilisateurs. Aujourd’hui, nous allons reprendre les bases du réseau Mina, apprendre ensemble à déléguer facilement vos jetons MINA à un nœud validateur du réseau… et finalement monter votre propre nœud validateur sur un VPS, si le cœur vous en dit !

Cet article n’est pas sponsorisé : il s’inscrit dans mes expérimentations spontanées dans le monde bizarre des projets blockchain naissants, menées de façon totalement degen.

Mina Protocol, les bases techniques

Malheureusement, les blockchains actuelles ont une taille très importante, de l’ordre de plusieurs centaines de gigaoctets. Cela accroît la centralisation, car il devient de plus en plus coûteux d’opérer un nœud complet. Le protocole Mina intègre un outil cryptographique complexe : les preuves à divulgation nulle de connaissance. Ce sont elles qui permettent de réduire drastiquement la taille de la blockchain. Ainsi, n’importe quel utilisateur peut maintenir un nœud complet, même en cas d’usage intensif du réseau.

Mina Protocol remplace donc les blocs des blockchains classiques par des preuves cryptographiques de taille constante et très réduite, appelées zk-SNARKs. Outre les avantages de la décentralisation, notamment une résistance accrue à la censure, cette architecture permet de proposer plusieurs fonctionnalités, axées sur la confidentialité des données des utilisateurs du réseau.

Dans ce réseau, plusieurs acteurs cohabitent, et plus particulièrement les snarkers et les stakers.

Les « snarkers » produisent les certificats SNARKS qui permettent de valider le réseau et de maintenir la taille de la chaîne à 22Ko. Ils les vendent aux producteurs de blocs. Les « stakers » ou producteurs de blocs récupèrent les Snarks et les incluent dans les blocs. Ils collectent des frais pour leur travail.

Détail du processus de validation de blocs sur la blockchain Mina

Comme les mineurs du réseau Bitcoin ou les stakers dans un réseau en PoS, ils sont chargés de collecter les transactions et de les inclure dans des blocs. Le protocole les récompense pour leur travail via l’inflation et la collecte des frais de transactions.

Les producteurs de blocs sélectionnent les transactions. Ils ont intérêt à privilégier celles qui présentent les frais les plus élevés, afin de maximiser leurs gains. Mais ils doivent également fournir des SNARK : la blockchain doit rester « succincte ».

Dans cet écosystème, les détenteurs de MINA peuvent soit être très aventureux et tenter de staker leurs propres MINA sur leur noeud validateur… soit plus simplement les déléguer aux validateurs de leur choix, afin de pouvoir contribuer à la validation du réseau tout en étant récompensés en MINA !

<< Redécouvrez notre détail technique complet pour tout savoir sur le protocole Mina >>

Maintenant que vous êtes à jour avec l’aspect technique du protocole Mina, passons à la pratique !

Comment déléguer facilement ses MINA et profiter de rendement en staking ?

Dans cet article, je vais vous présenter un tutoriel complet pour apprendre à faire tourner votre propre noeud validateur Mina dans le cloud, si l’envie vous en prend. Mais il est possible de faire bien plus simple directement, pour ceux d’entre vous qui n’êtes pas très fan de la bidouille en ligne de commande. En effet, il est tout simplement possible de déléguer vos tokens MINA depuis votre wallet non custodial (comme Auro Wallet, sur mobile).

Page d'accueil du wallet Auro Wallet, pour stocker et staker vos MINA

Installez le wallet Auro Wallet depuis votre store d’applications favori sur votre mobile, générez un nouveau wallet et déposez-y des MINA si en détenez. N’oubliez pas que la création d’une nouvelle adresse lors du premier dépôt de MINA coûte mécaniquement et automatiquement 1 MINA. Notez bien la passphrase qui vous est proposée, afin de pouvoir récupérer votre wallet et vos fonds en cas de problème avec votre mobile.

Ensuite, appuyez sur “Staking” pour accéder au menu dédié à la délégation de vos fonds.

Le premier écran pour staker et déléguer vos MINA sur mobile

Appuyez sur “Go to staking” pour passer à l’écran suivant. Vous pourrez alors soit choisir un des nodes validateurs référencés dans l’application, soit entrer l’adresse publique d’un autre validateur pour lui déléguer vos tokens. Par exemple, sachez que vous pouvez déléguer vos MINA sans en perdre le contrôle auprès de notre node, en les délégant à notre validateur .

Copiez-collez l’adresse dans le menu “Block Producer List” et choisissez “Manual input BP node address”, puis validez avec “Yes”.

Ajout manuel de l'adresse du block producer Mina

Copiez-collez encore l’adresse de notre noeud validateur, ajoutez un petit Memo “JDC” pour vous souvenir facilement qu’il s’agit de notre validateur, choisissez les fees par défaut… et validez !

Fin de l'ajout du bloc Producer Mina Node Guardians

Une fois la dernière opération de staking confirmée, tous les fonds que vous laisserez sur votre wallet seront porteurs des intérêts du réseau Mina (entre 10 à 15% à l’année, sans bonding period), au fur et à mesure que nous validerons des blocs du réseau Mina pour vous.

Validation de la délégation au validateur Mina de Node Guardians

Petit bonus, et pas des moindres : à la différence des solutions proposées par les géants centralisés du secteur (comme Kraken ou Binance), en plus de rester totalement maîtres de vos fonds, une fois cette manip réalisée une fois tous les MINA que vous déposerez sur votre wallet Auro seront automatiquement considérés comme stakés ! 🙂

MINA : comment déployer votre noeud validateur sur un VPS ?

Aujourd’hui, nous allons apprendre à monter un nœud validateur Mina sur un VPS. Pour cela, à l’image du précédent épisode de notre série dédié aux nœuds validateurs consacré à la blockchain Celestia, je vous conseille de choisir un serveur VPS auprès d’un prestataire dédié, comme OVH ou Contabo (moins cher, mais de moins bonne qualité). Dans mon cas, pour cette installation, je vais réinstaller mon VPS OVH sous Debian 11, mais vous pouvez procéder à la même installation de node en utilisant par exemple la dernière version d’Ubuntu.

Installation d'un VPS sous Debian 11 pour installer le node Mina

Lancez ensuite votre terminal si vous êtes sur Mac, ou lancez l’utilitaire PuTTY si vous êtes sous Windows. Une fois le terminal ouvert, utilisez la commande suivante :

ssh login@adresseIPduVPS

L’adresse de connexion et le login à renseigner dépendent de l’hébergeur. L’identifiant, l’adresse de connexion et le mot de passe rattaché sont communiqués par votre hébergeur dans un mail récapitulatif.

Etape 1 : Installer les pré-requis et dépendances utiles avant de commencer

Pour bien démarrer, récupérerons et installons les différents outils qui nous serons utiles.

Les messages de mises à jour lors de l’installation de certains utilitaires

Petit avertissement pour commencer : au fil de l’installation des utilitaires et des packages nécessaires au déploiement de votre noeud Mina, le VPS que vous utiliserez pourra vous prévenir que le noyau du système d’installation (kernel) n’est pas à jour. Ce n’est pas un drame !

Update de kernel sur le VPS

Validez simplement les deux écrans qui vous seront présentés pour pour poursuivre vos installations, laissant le VPS redémarrer les services concernés.

Validation de l'update de kernel sur le VPS

Maintenant que vous êtes prévenus, attelons-nous à la tâche ! Exécutez la commande suivante dans votre terminal pour mettre jour votre installation, et récupérer les utilitaires de bases dont vous aurez besoin pour votre noeud Mina :

sudo apt update && sudo apt upgrade -y
sudo apt install curl tar wget jq clang pkg-config libssl-dev jq build-essential git make ncdu -y

Ensuite, installez go :

ver=“1.18.2”
cd $HOME
wget https://golang.org/dl/go$ver.linux-amd64.tar.gz
sudo rm -rf /usr/local/go
sudo tar -C /usr/local -xzf "go$ver.linux-amd64.tar.gz"
rm "go$ver.linux-amd64.tar.gz"

Puis adaptez l’environnement d’office :

echo "export PATH=$PATH:/usr/local/go/bin:$HOME/go/bin" >> $HOME/.bash_profile
source $HOME/.bash_profile

Et vérifiez que l’installation s’est bien passée :

go version

Ensuite, installons quelques dépendances spécifiques qui seront nécessaires à la bonne compilation du client mina, et qui ne sont pas nécessairement incluses d’office dans le système installé sur votre VPS.

cd
mkdir -p  #deps
cd deps
sudo apt update
wget http://de.archive.ubuntu.com/ubuntu/pool/main/libf/libffi/libffi6_3.2.1-8_amd64.deb
wget http://de.archive.ubuntu.com/ubuntu/pool/universe/j/jemalloc/libjemalloc1_3.6.0-11_amd64.deb
wget http://archive.ubuntu.com/ubuntu/pool/main/p/procps/libprocps6_3.3.12-3ubuntu1_amd64.deb
sudo dpkg -i *.deb
cd
rm -rf deps

Etape 2 : Installer le client et les utilitaires Mina

Poursuivez en installant le package mina-mainnet :

sudo apt update
sudo apt-get install -y curl unzip mina-mainnet=1.1.5-a42bdee
Installation du client Mina Mainnet sur le VPS

Puis installez l’utilitaire de génération de wallet Mina :

sudo apt-get install mina-generate-keypair=1.1.5-a42bdee
Installation de l'utilitaire de génération de clés cryptographiques de Mina

Pour créer un wallet (et donc une clé privée et une clé publique), lancez la commande suivante :

mina-generate-keypair -privkey-path ~/keys/my-wallet

Le terminal va vous demander de lui attacher un mot de passe : choisissez-le bien et surtout notez-le correctement quelque part !

Réglez les droits rattachés aux clés générées :

chmod 700 $HOME/keys 
chmod 600 $HOME/keys/my-wallet

Vérifiez le mot de passe que vous avez noté (c’est important !) :

mina-validate-keypair -privkey-path ~/keys/my-wallet
Fin de l'installation des utilitaires et génération d'un wallet Mina

Enfin, adaptez l’environnement d’office :

echo 'export KEYPATH=$HOME/keys/my-wallet' >> $HOME/.bashrc
echo 'export MINA_PUBLIC_KEY=$(cat $HOME/keys/my-wallet.pub)' >> $HOME/.bashrc
source ~/.bashrc

Etape 3 : Installer le pare-feu (firewall)

Maintenant, configurons le pare-feu de votre VPS, en installant ufw :

sudo apt-get install ufw

Ensuite, configurez les règles utiles pour les ports utilisés par Mina :

sudo ufw allow 22 \
&& sudo ufw allow 8302 \
&& sudo ufw allow 8303 \
&& yes | sudo ufw enable
installation des pare-feux avec uff

Vérifiez tranquillement que le tout fonctionne avec la commande suivante :

sudo ufw status

Etape 4 : Installer et configurer l’environnement Mina

Passons désormais à l’installation de Mina à proprement parler. Pour commencer, supprimons les éventuelles précédentes versions d’une installation précédemment ratée :

sudo apt-get remove -y coda-testnet-postake-medium-curves

Créons un fichier de configuration pour Mina, avec la commande suivante :

mkdir .mina-config

Et téléchargeons depuis 01 Labs les packages qui nous seront utiles :

sudo apt-get remove -y mina-testnet-postake-medium-curves
echo "deb [trusted=yes] http://packages.o1test.net release main" | sudo tee /etc/apt/sources.list.d/mina.list
sudo apt-get update
sudo apt-get install -y curl unzip mina-mainnet=1.1.7-d5ff5aa

Récupérons les pairs auprès desquels notre noeud validateur se connectera pour télécharger la blockchain Mina, et ensuite la valider en continu :

curl https://storage.googleapis.com/mina-seed-lists/mainnet_seeds.txt > ~/peers.txt
Récupération des peers auxquels se connecter pour télécharger et valider la blockchain Mina

Enfin faisons quelques réglages de démarrage sur le fichier de l’environnement de Mina :

nano .mina-env
CODA_PRIVKEY_PASS="VotreMotDePasseDeClé"
EXTRA_FLAGS=" -file-log-level Debug"
Edition du fichier d'environnement de Mina

Sauvegardez le tout et quittez, en faisant CTRL+S puis CTRL+X.

Etape 5 : Démarrer votre noeud validateur Mina en tache de fond avec SystemD

Pour être tranquille et ne pas avoir à gérer à l’avenir le démarrage et le redémarrage de votre noeud Mina, intégrez directement l’application dans un service systemd. Utilisez la commande suivante :

systemctl --user daemon-reload
systemctl --user start mina
systemctl --user enable mina
sudo loginctl enable-linger

Vérifiez les logs pour être certains que le client a démarré :

journalctl --user-unit mina -n 1000 -f
Logs du service Mina

Au départ, vous devriez obtenir des messages d’erreur divers, notamment des erreurs RPC.

Début de la synchronisation de la blockchain Mina

Cela est normal pendant un certain temps (qui peut être un peu long) : votre node démarre, et il finira normalement par commencer à télécharger et valider son premier exemplaire de la blockchain Mina (Bootstrap).

Suite de la synchronisation de la blockchain Mina

Au bout d’un moment, les logs commenceront à afficher l’état actuel de la blockchain, notamment les blocs récents que votre node validera.

Blockchain Mina en validation en continu par le node VPS

Sortez des lots en faisant CTRL+C et maintenant vérifiez l’état du client Mina et les différentes données du réseau directement récupérées par votre noeud Mina :

mina client status

Patientez quelques instants car la commande ne vous renvoie pas une réponse immédiate.

Vérification de la commande mina status

Et voilà, vous pourrez trouver le numéro de blocs existants sur toute la blockchain Mina (Max observed block height) ainsi que là où vous en êtes du côté de votre propre node (Block height). Vous pourrez également savoir si votre noeud a fini de se synchroniser et de récupérer et valider toute la blockchain Mina : pour cela, il vous suffira de regarder la ligne Sync status : pendant la première synchronisation elle vous affichera Catchup, une fois la synchronisation terminée elle affichera “Synchronised”.

Etape 6 : Installer une horloge portable pour votre node

Les équipes de Mina conseillent d’installer une horloge portable pour une meilleure fiabilité de votre node. Nous installerons donc l’utilitaire NTP. Le maintien précis du temps est très utile pour diverses raisons lors de l’administration d’un serveur. Même si dans notre cas précis, ce tutoriel n’est pas destiné à vous faire déposer des sommes conséquentes en MINA sur votre wallet en ligne de commande, nous l’installerons pour aller au bout de l’expérimentation. Utilisez les commandes suivantes :

sudo apt-get update
sudo apt-get install ntp
Installation des utilitaires d'horloge portable pour le node Mina

Puis les commandes suivantes :

sudo systemctl restart ntp
sudo systemctl status ntp
installation de NTP, NTPD et autre

Enfin installons puis configurons ntpdate, une autre composante de notre horloge portable :

sudo apt-get install ntpdate
sudo nano /etc/ntp.conf

Dans ce fichier de configuration, ajoutez la ligne :

server 10.1.1.1 prefer iburst
Edition du fichier de configuration de NTP

Puis sauvegardez et quittez, en faisant CTRL+S puis CTRL+X. Enfin, redémarrer ntp :

sudo systemctl restart ntp

Et pour finir, vérifiez que tout fonctionne en affichant les logs, avec la commande :

ntpq -p
Affichage live de ntpq -p

Staker du MINA directement sur son node et tenter de valider des blocs

Vous avez maintenant en théorie un noeud qui fonctionne et qui est prêt à valider des blocs. Vous pouvez aussi le rendre fonctionnel pour produire des snarks (c’est-à-dire participer à la compression des données de la blockchain Mina, pour lui permettre de conserver sa taille cible maximale de 22ko.

Comment installer les outils nécessaires à la production de Snarks sur Mina

Configurez votre client Mina pour qu’il vous permette de staker :

mina client set-staking --public-key VotreAdressePubliqueMina

Vérifiez qu’un compte de staking est disponible avec la commande :

mina client status
Repérage de l'adresse publique de votre validateur avec la commande mina status

Lancez le Snark Worker sur votre node en toile de fond

Modifiez le fichier de configuration d’environnement de Mina avec :

sudo nano .mina-env

Puis ajoutez cette ligne :

EXTRA_FLAGS=” -snark-worker-fee 0.025 -run-snark-worker VotreAdressePubliqueMina -work-selection seq -file-log-level Debug ”

Ce qui dans mon cas a donné :

EXTRA_FLAGS=” -snark-worker-fee 0.025 -run-snark-worker B62qqY3FqNrmPTmHx8ADB3W9Xqrxr57pfcQkyKFRSXgAsZcGFRhU7T1 -work-selection seq -file-log-level Debug ”
Modification de l'Extra Flags pour faire fonctionner le Snark Worker

Puis sauvegardez et quittez, en faisant CTRL+S puis CTRL+X.

Installer le gestionnaire de sessions dédiées TMUX

Pour éviter une surcharge des capacités opérationnelles de votre node (lequel pourrait ne pas trop apprécier de devoir à la fois produire des blocs et produire des snarks), vous devriez installer tmux. Utilisez la commande suivante :

sudo apt install tmux -y
Installation du client tmux

Testez le lancement d’une session de fond, avec :

tmux new -s session1
Exemple de session tmux

Puis sortez-en avec CTRL+B puis la touche D.

Enfin, pour tuer la session :

tmux kill-session -t session1

Installer un Snark-Stopper pour éviter la saturation de votre node

Une fois ce gestionnaire tmux installé, vous pourrez configurer un snark-stopper, une sorte de soupape de sécurité qui coupera votre production de snarks si elle venait à impacter la bonne tenue de votre noeud validateur de blocs Mina.

sudo apt-get update \
&& sudo apt-get install python3-venv tmux git -y \
&& git clone https://github.com/c29r3/mina-snark-stopper.git \
&& cd mina-snark-stopper \
&& python3 -m venv venv \
&& source ./venv/bin/activate \
&& pip3 install -r requirements.txt
Compilation du Snark Stopper

Editez le fichier de config avec les infos de votre node, avec la commande suivante :

sudo nano $HOME/mina-snark-stopper/config.yml
Configuration du Snark Stopper

Adaptez la WORKER_PUB_KEY avec votre adresse publique de validateur que vous avez précédemment récupérée (avec la commande mina client status), et baissez les WORKER_FEE à 0,025.

Enfin, lancez le Snark Stopper avec la commande suivante :

tmux new -s snark-stopper -d venv/bin/python3 snark-stopper.py

Staker vos MINA sur votre node en ligne de commande

Si vous avez déposé quelques MINA sur votre wallet en ligne de commande créé à l’occasion de ce tuto, vous pouvez maintenant activer le staking de MINA. N’oubliez pas qu’il y a des frais de création de wallet de 1 MINA au premier dépôt, tout de même. Lancez la commande suivante :

mina account unlock --public-key VotreAdressePubliqueMina

Puis pour vous déléguer automatiquement les fonds dispos sur votre wallet, lancez :

mina client delegate-stake \\
    --receiver <DELEGATE-PUBLIC-KEY> \\
    --sender $MINA_PUBLIC_KEY \\
    --fee 0.1

Déléguer vos MINA vers un autre validateur Mina en ligne de commande

Si vous désirez déléguer les fonds détenus sur votre wallet en ligne de commande à un autre validateur, repérez l’adresse de Bloc Producer de ce validateur et utilisez les commandes suivantes :

mina account unlock --public-key VotreAdressePubliqueMina
Puis déléguez les fonds dispos sur votre wallet vers un autre Wallet :
mina client delegate-stake \\
    --receiver <CléPubliqueDuValidateurChoisi> \\
    --sender $MINA_PUBLIC_KEY \\
    --fee 0.1

Par exemple, sachez que vous pouvez déléguer vos MINA sans en perdre le contrôle auprès de notre node, en les délégant à notre validateur

Envoyez des MINA depuis votre node vers un autre wallet Mina (comme Auro Wallet)

Enfin, si vous souhaitez retirer de fonds de votre wallet en ligne de commande (même si je vous répète pour la forme de ne pas y déposer d’importantes sommes en MINA par sécurité), utilisez la commande suivante :

mina accounts unlock --public-key VotreAdressePubliqueMina

Puis utilisez cette commande adaptée à votre adresse de réception de fonds :

mina client send-payment \
  --amount 1.5 \
  --receiver AdressePubliqueDeReceptionDesFonds \
  --fee 0.1 \
  --sender VotreAdressePublique

Comment mettre à jour son Producteur de Blocs Mina

Pour terminer, vous pourrez mettre à jour votre noeud validateur avec la suite de commandes suivantes. Avant de les enclencher, veillez par sécurité à avoir récupéré vos MINA sur un wallet externe, pour parer à tout éventualité 🙂

systemctl --user stop mina
sudo apt-get remove mina-testnet-postake-medium-curves
echo "deb [trusted=yes] http://packages.o1test.net release main" | 
sudo tee /etc/apt/sources.list.d/mina.list 
sudo apt-get update 
sudo apt-get install -y
curl unzip mina-mainnet=NuméroDeLaDernièreRelease
wget -O ~/peers.txt https://storage.googleapis.com/mina-seed-lists/mainnet_seeds.txt

Et pour conclure, relancez les différents clients, tout en affichant les logs pour vérifier que tout va bien :

systemctl --user daemon-reload
systemctl --user restart mina
journalctl --user-unit mina -n 1000 -f

Vous voilà fin prêts pour explorer plus avant les entrailles techniques de la blockchain Mina ! Pour les plus curieux qui seraient arrivés jusqu’au bout de ce tutoriel, vous pouvez vous permettre une dernière commande – df -h – pour constater la taille ridicule que Mina occupe sur votre VPS. Quand Mina se présente comme la blockchain la plus légère, on peut constater que c’est un qualificatif qu’elle n’usurpe pas !

Ressources

Grégory Mohet-Guittard

Je fais des trucs au JDC depuis 2018. En ce moment, souvent en podcast et la tête dans le nuage.