Ce guide est une traduction libre et légèrement modifiée de la documentation officielle pour le déploiement d’un nœud Dusk, plus communément appelé node provisioner.
Chaque commande peut être copiée/collée directement depuis cet article vers la console (il y a une icône qui apparait en haut à droite de chaque bloc de code quand la souris passe dessus). Quand il y a une partie de la commande a modifier manuellement :
je le préciserai en amont ;
la légende du bloc de code contiendra l’émoji ✍️ ;
la/les ligne en question sera surlignée.
Astuce
Afin de vérifier qu’une commande se soit terminée avec succès, la dernière ligne affichée dans la console, après l’avoir exécutée, devra être « OK ». Si ce n’est pas le cas, il y a eu une erreur.
Lorsque le serveur sera opérationnel et que son adresse IP sera connue, configurons l’accès SSH sur le PC (remplacer ADRESSE_IP par l’adresse IP du serveur) :
Il est vivement recommandé de désactiver l’accès SSH par mot de passe pour favoriser l’utilisation d’une clé. Un mini guide est disponible ici : Comment paramétrer SSH pour un accès par clé.
Time.is est un service en ligne qui permet de trouver le nom du fuseau horaire d’une ville donnée. Dans le champ de recherche, entrer « Paris », par exemple, puis valider en appuyant sur Entrée. Dans la page résultante, rechercher le texte « The IANA time zone identifier » ; en l’occurrence ça donne « The IANA time zone identifier for Paris is Europe/Paris ». Le fuseau horaire est Europe/Paris, et voici comment spécifier cette valeur au serveur :
C’est la dernière étape pour pouvoir créer des blocs et participer au réseau.
Prudence
À chaque fois que des tokens sont ajoutés en staking, le nœud sera incorporé à la blockchain2 époques plus tard (c’est-à-dire 4 320 blocs), cette opération n’est pas immédiate.
Pendant cette période d’attente, il est toutefois possible d’augmenter le nombre de tokens en stakingsans pénalité.
Augmenter le nombre de tokens « à la volée » donnera lieu à une pénalité (soft slashing en anglais) de 10% : soit 10% du montant sera bloqué et récupérable seulement quand la commande unstake sera utilisée.
Voici la procédure pour staker plus de tokens avec soft slashing (remplacer AMOUNT par le nombre de tokens) :
Lorsque le nœud est sélectionné pour générer un bloc : récupération de 70% des tokens émis + une part variable suivant le nombre de voteurs inclus (non modifiable).
Lorsque le nœud est sélectionné en tant que voteur et inclus dans le bloc généré : récupération d’une fraction des 10% des tokens réservés aux voteurs.
Le slashing est un système de protection qui pénalise les mauvais comportements. Quand ça arrive au nœud, une partie des récompenses est perdue, et s’il n’y en a pas, alors la participation au réseau est stoppée jusqu’à l’époque suivante. Plus d’information sur Slashing mechanism.
Peut être ignoré si exceptionnel. Cela veut dire que le nœud a temporairement pris du retard dans la synchronisation. Peut donner lieu à un soft slash si le nœud est sélectionné tout en état en retard à plusieurs reprises :
Correction du code de l’alias generated pour trier correctement les fichiers de log.
2025-01-08
Suppression de l’alias accepted. La notion de blocs générés versus blocs acceptés était erronée, il n’y a en réalité que des blocs générés. Dans le cas ou le bloc généré est à une itération supérieure à zéro, il s’agit d’une action permettant de proposer un bloc quand l’autre nœud sélectionné n’arriverait pas à fournir le bloc à temps.
Simplification des alias blocks et generated.
Amélioration de l’alias generated pour trier par numéro de bloc.
2025-01-05
Mise à jour de la version du script d’installation de Dusk (0.5.2 → 0.5.3) pour le kick-off du mainnet !
Mise à jour de la version du script d’installation de Dusk (0.5.0 → 0.5.1).
Simplification de la commande d’installation de Dusk.
2024-12-27
Mise à jour de la version du script d’installation de Dusk (0.4.0 → 0.5.0) pour la migration depuis le testnet « Nocturne » vers le premier dry-run du mainnet.
Correction de la commande d’installation de Dusk (sh → bash).
Suppression du lien vers le fausset du testnet.
2024-12-15
Ajout de l’avertissement quant à l’utilisation d’un mot de passe pour accéder au serveur via SSH.
2024-12-12
Mise à jour de la version du script d’installation de Dusk (0.3.5 → 0.4.0).
Changement du système d’exploitation du serveur VPS pour supporter la nouvelle version de Dusk (Debian12 → Ubuntu24.04).
2024-10-21
Mise à jour de la version du script d’installation de Dusk (0.3.2 → 0.3.5).
Correction du lien vers le fausset (https://docs.dusk.network/itn/testnet-faucet/ → https://docs.dusk.network/operator/nocturne/testnet-faucet/).
Comment déployer un nœud Dusk ?¶
Site web : dusk.network¶
Ce guide est une traduction libre et légèrement modifiée de la documentation officielle pour le déploiement d’un nœud Dusk, plus communément appelé node provisioner.
Astuce
VKZpBrNtEeTobMgYkkdcGiZn8fK2Ve2yez429yRXrH4nUUDTuvr7Tv74xFA2DKNVegtF6jaom2uacZMm8Z2Lg2J
🔗 Liens Utiles¶
Node Dashboard
Explorateur de blocs
Run a Provisioner on Dusk
Economic Protocol Design
Staking on Dusk
Slashing mechanism
Succinct Attestation Consensus
✅ Configuration Requise¶
Système d’exploitation : Ubuntu 24.04
Architecture : x86-64
Espace disque : 50 Gio NVMe
Mémoire : 4 Gio de RAM
🪧 Avant-propos¶
Les futures commandes à taper dans une console sont précédées par une légende pour indiquer sur quel environnement elles doivent être exécutées.
Exemple avec une commande qui devra être tapée dans la console de l’ordinateur (PC) :
echo 'Coucou depuis le PC !'
Et une commande qui devra être tapée dans la console du serveur (VPS, pour Virtual Private Server) sur lequel le nœud sera déployé :
echo 'Coucou depuis le serveur !'
Astuce
Chaque commande peut être copiée/collée directement depuis cet article vers la console (il y a une icône qui apparait en haut à droite de chaque bloc de code quand la souris passe dessus). Quand il y a une partie de la commande a modifier manuellement :
je le préciserai en amont ;
la légende du bloc de code contiendra l’émoji ✍️ ;
la/les ligne en question sera surlignée.
Astuce
Afin de vérifier qu’une commande se soit terminée avec succès, la dernière ligne affichée dans la console, après l’avoir exécutée, devra être « OK ». Si ce n’est pas le cas, il y a eu une erreur.
🪪 Créer un Compte¶
Rendez-vous sur le wallet Dusk pour créer un compte.
Prudence
Bien garder les 12 mots de la seed phrase quelque part en sécurité.
🏪 Hébergement¶
La documentation officielle traite de Digital Ocean, et il est possible d’utiliser Hetzner ou encore Vultr. Ici, nous parlerons de ce dernier.
Créé un compte sur Vultr et déployer un nouveau produit avec ces caractéristiques :
Type : Shared CPU ‣ High Performance ‣ vhp-2c-4gb-intel (Intel, 2 vCPU, 4 GB RAM, 100 GB NVMe)
Location : selon les préférences
Operating System: Ubuntu 24.04 x64
Configuration SSH¶
Lorsque le serveur sera opérationnel et que son adresse IP sera connue, configurons l’accès SSH sur le PC (remplacer
ADRESSE_IP
par l’adresse IP du serveur) :Connexion¶
Se connecter en SSH au serveur (utiliser le mot de passe fourni sur Vultr) :
ssh dusk
Important
Il est vivement recommandé de désactiver l’accès SSH par mot de passe pour favoriser l’utilisation d’une clé. Un mini guide est disponible ici : Comment paramétrer SSH pour un accès par clé.
🛠️ Installation¶
Mise à Jour¶
Mettre à jour le système d’exploitation, puis redémarrer :
Patienter quelques secondes et se reconnecter au serveur.
Pare-feu¶
Installer et configurer le pare-feu pour autoriser seulement les connexions entrantes sur les ports SSH et du nœud :
Serveur NTP¶
Pour être compétitif, le nœud doit rester synchronisé par rapport à ses pairs. Voyons comment faire en sorte d’utiliser un service NTP efficace.
D’abord, vérifier que le fuseau horaire est correct :
timedatectl
Exemple de sortie
Si le fuseau horaire est incorrect…
Time.is est un service en ligne qui permet de trouver le nom du fuseau horaire d’une ville donnée. Dans le champ de recherche, entrer « Paris », par exemple, puis valider en appuyant sur Entrée. Dans la page résultante, rechercher le texte « The IANA time zone identifier » ; en l’occurrence ça donne « The IANA time zone identifier for Paris is Europe/Paris ». Le fuseau horaire est Europe/Paris, et voici comment spécifier cette valeur au serveur :
timedatectl set-timezone Europe/Paris
Puis, installer le service NTP :
Et vérifier qu’il est fonctionnel :
chronyc tracking
Exemple de sortie
📍 Dusk¶
Télécharger et exécuter le script d’installation automatique pour Dusk :
curl -sL https://github.com/dusk-network/node-installer/releases/latest/download/node-installer.sh | bash
🎛️ Commandes¶
Ces commandes seront pratiques de déterminer l’état du nœud :
Charger les commandes :
source ~/.profile
balance
¶Affiche le nombre de DUSK disponible sur le wallet.
logs
¶Affiche les logs pour suivre l’avancée de la synchronisation du nœud.
rewards
¶Connaître le montant des récompenses accumulées.
stake-info
¶Affiche le nombre de tokens en staking.
ruskquery block-height
¶Affiche le dernier bloc synchronisé.
ruskquery peers
¶Affiche le nombre de connexions à d’autres nœuds.
⚙️ Configuration¶
Mot de Passe¶
Stocker le mot de passe du wallet Dusk afin de ne plus avoir à la taper pour toutes les futures commandes
rusk-wallet …
(source) :Tester que le mot de passe est visible (il devrait s’afficher, suivi de « OK ») :
Importer le Compte¶
Attention
Les 12 mots de la seed phrase doivent être entrés en minuscule, chacun séparé par un espace.
rusk-wallet restore
Exporter les Clefs de Consensus¶
🚀 Exécution¶
Pour démarrer le nœud :
service rusk start
🪙 Staking¶
C’est la dernière étape pour pouvoir créer des blocs et participer au réseau.
Prudence
À chaque fois que des tokens sont ajoutés en staking, le nœud sera incorporé à la blockchain 2 époques plus tard (c’est-à-dire 4 320 blocs), cette opération n’est pas immédiate.
Pendant cette période d’attente, il est toutefois possible d’augmenter le nombre de tokens en staking sans pénalité.
Stake¶
Pour l’exemple, plaçons 1 000 DUSK en staking (c’est le minimum requis) :
rusk-wallet stake --amt 1000
Astuce
Plus il y a de tokens en staking, plus il y a de chances d’être sélectionné.
Stake More¶
Une fois que des tokens sont en staking, il est possible d’en rajouter de deux manières.☁️ Serveur (VPS) ✍️¶ ☁️ Serveur (VPS) ✍️¶
Avec Pénalité¶
Augmenter le nombre de tokens « à la volée » donnera lieu à une pénalité (soft slashing en anglais) de 10% : soit 10% du montant sera bloqué et récupérable seulement quand la commande
unstake
sera utilisée.Voici la procédure pour staker plus de tokens avec soft slashing (remplacer
AMOUNT
par le nombre de tokens) :rusk-wallet stake --amt AMOUNT
Sans Pénalité¶
Voici la procédure pour staker plus de tokens sans soft slashing (remplacer
AMOUNT
par le nombre de tokens) :💰 Récompenses¶
Il y a deux moyens de récupérer des récompenses :
Lorsque le nœud est sélectionné pour générer un bloc : récupération de 70% des tokens émis + une part variable suivant le nombre de voteurs inclus (non modifiable).
Lorsque le nœud est sélectionné en tant que voteur et inclus dans le bloc généré : récupération d’une fraction des 10% des tokens réservés aux voteurs.
Pour des informations techniques complètes, lire Economic Protocol Design (section Incentives goals) et le code source.
Prudence
Afin de pouvoir retirer ses récompenses, il faut qu’il y ait des tokens en staking.
La commande suivante permet de récupérer les récompenses (remplacer
AMOUNT
par le nombre de tokens, en option) :rusk-wallet withdraw [--amt AMOUNT]
Slashing¶
Le slashing est un système de protection qui pénalise les mauvais comportements. Quand ça arrive au nœud, une partie des récompenses est perdue, et s’il n’y en a pas, alors la participation au réseau est stoppée jusqu’à l’époque suivante. Plus d’information sur Slashing mechanism.
🌡️ Supervision¶
Il existe plusieurs projets permettant de suivre l’état du nœud, voici celui que j’utilise : BoboTiG/dusk-monitor.
🐛 Débogage¶
Section pour les cas où le système ne fonctionne pas comme prévu.☁️ Serveur (VPS)¶ ☁️ Serveur (VPS)¶ ☁️ Serveur (VPS)¶
☁️ Serveur (VPS)¶
Block Mode Error¶
Relancer la commande pour exporter les clefs de consensus.
Repartir de Zéro¶
Si nécessaire, repartir de zéro :
Règles du Pare-feu¶
Liste des règles actives :
ufw status verbose
Voici la sortie attendue :
Avertissements dans les logs¶
Pour les trouver, utiliser cette commande :
zgrep WARN /var/log/rusk*.log
Avertissements connus :
Cet avertissement n’est pas important et peut être ignoré :
2025-01-22T23:07:33.710209Z WARN node::databroker: error on handling msg: could not find locator block
Peut être ignoré si exceptionnel. Cela veut dire que le nœud a temporairement pris du retard dans la synchronisation. Peut donner lieu à un soft slash si le nœud est sélectionné tout en état en retard à plusieurs reprises :
2025-01-22T23:26:14.069521Z WARN node::chain::acceptor: event="missed iteration" height=133665 iter=0 generator="REDACTED"
Erreurs dans les logs¶
Pour les trouver, utiliser cette commande :
zgrep ERROR /var/log/rusk*.log
Erreurs connues :
Cette erreur n’est pas importante et peut être ignorée :
2025-01-13T11:01:23.140197Z ERROR kadcast::handling: Invalid Id Header { binary_id: BinaryID { bytes: [173, 236, 205, 149, 2, 31, 24, 69, 160, 37, 18, 19, 190, 133, 175, 232], nonce: [118, 0, 0, 0] }, sender_port: 9000, network_id: 1, reserved: [0, 0] } - from REDACTED
Cette erreur n’est pas importante et peut être ignorée (elle sera bientôt de l’histoire ancienne) :
2025-01-22T00:13:52.189187Z ERROR main{round=125324 iter=0 name=Ratification pk="REDACTED"}: dusk_consensus::execution_ctx: phase handler err: VoteAlreadyCollected
📜 Historique¶
Historique complet
Mise à jour définitive de la version du script d’installation de Dusk (
0.5.4
→latest
).Mise à jour de la version du script d’installation de Dusk (
0.5.3
→0.5.4
).Correction des chiffres liés aux récompenses.
Suppression des alias
blocks
etgenerated
. Ils n’étaient plus vraiment pertinents depuis l’arrivée des outils de supervision (f03701d).Ajout des commandes
ruskquery block-height
etruskquery peers
.Ajout du projet DuskMan dans la section Supervision.
Ajout de la section Avertissements dans les logs.
Ajout de la section Erreurs dans les logs.
Ajout de la section Supervision.
Correction du code de l’alias generated pour trier correctement les fichiers de log.
Suppression de l’alias
accepted
. La notion de blocs générés versus blocs acceptés était erronée, il n’y a en réalité que des blocs générés. Dans le cas ou le bloc généré est à une itération supérieure à zéro, il s’agit d’une action permettant de proposer un bloc quand l’autre nœud sélectionné n’arriverait pas à fournir le bloc à temps.Simplification des alias
blocks
etgenerated
.Amélioration de l’alias
generated
pour trier par numéro de bloc.Mise à jour de la version du script d’installation de Dusk (
0.5.2
→0.5.3
) pour le kick-off du mainnet !Ajout des alias
accepted
etgenerated
.L’alias
blocks
affiche désormais toutes les informations utiles pour connaître les statisriques du nœud.Suppression des alias
chosen
,current
etlatest
.Ajout de la section Stake More.
Mise à jour de la version du script d’installation de Dusk (
0.5.1
→0.5.2
) pour le second dry-run du mainnet.Suppression de l’ouverture du port 8080/TCP (utile seulement pour les nœuds de type archive).
Simplification de l’alias
latest
.L’alias
latest
utilise désormais une requête HTTP vers l’URL officielle du nœud plutôt que le nœud local (59d594e).Changement d’hébergeur pour cause de mauvaises performances (Contabo → Vultr).
Ajout de la section Récompenses.
Amélioration de l’alias
chosen
(0907b14 → 53f84d7).Mise à jour de la version du script d’installation de Dusk (
0.5.0
→0.5.1
).Simplification de la commande d’installation de Dusk.
Mise à jour de la version du script d’installation de Dusk (
0.4.0
→0.5.0
) pour la migration depuis le testnet « Nocturne » vers le premier dry-run du mainnet.Correction de la commande d’installation de Dusk (
sh
→bash
).Suppression du lien vers le fausset du testnet.
Ajout de l’avertissement quant à l’utilisation d’un mot de passe pour accéder au serveur via SSH.
Mise à jour de la version du script d’installation de Dusk (
0.3.5
→0.4.0
).Changement du système d’exploitation du serveur VPS pour supporter la nouvelle version de Dusk (
Debian 12
→Ubuntu 24.04
).Mise à jour de la version du script d’installation de Dusk (
0.3.2
→0.3.5
).Correction du lien vers le fausset (
https://docs.dusk.network/itn/testnet-faucet/
→https://docs.dusk.network/operator/nocturne/testnet-faucet/
).Simplification de la commande pour Repartir de Zéro.
Mise à jour de la version du script d’installation de Dusk (
0.2.0
→0.3.2
).Mise à jour de la version du script d’installation de Dusk (
0.1.9
→0.2.0
) pour la migration depuis l’ITN vers le testnet « Nocturne ».Mise à jour de la version du script d’installation de Dusk (
0.1.8
→0.1.9
).Tri alphabétique des commandes.
Mise à jour de la version du script d’installation de Dusk (
0.1.7
→0.1.8
).Amélioration de la commande
chosen
pour prendre en compte les fichiers de log archivés.Ajout de la section Commandes.
Mise à jour de la version du script d’installation de Dusk (
0.1.6
→0.1.7
).Installation de
unattended-upgrades
pour garder le système d’exploitation à jour et réduire le temps de maintenance.Mise à jour de la version du script d’installation de Dusk (
0.1.5
→0.1.6
).Changement de région pour le serveur (European Union (Germany) → United Kingdom) pour pallier les soucis de DNS.
Mise à jour de la version du script d’installation de Dusk (
0.1.4
→0.1.5
).Mise à jour de la version du script d’installation de Dusk (
0.1.2
→0.1.3
).Mise à jour de la version du script d’installation de Dusk (
0.1.3
→0.1.4
).Mise à jour de la version du script d’installation de Dusk (
0.1.1
→0.1.2
).Mise à jour de la version du script d’installation de Dusk (
0.1.0
→0.1.1
).Règle SSH du pare-feu plus protectrice.
Premier jet.