Comment déployer un noeud validateur Celestia : le tuto complet

Construit sur l’écosystème ATOM, Celestia et son modèle de blockchain modulaire s’est lancé sur le testnet dans le plus grand des calmes. L’occasion de réaliser que nous n’avions pas encore construit de guide pour permettre aux plus curieux d’entre vous d’expérimenter techniquement l’un des protocoles les plus novateurs du Web3. Si vous êtes un peu perdus face à ces multiples blockchains du Web3 qui espèrent toutes révolutionner la manière dont nous approchons les blockchains, pas de panique : je vous présente aujourd’hui un détail technique de Celestia. Prêts à mettre les mains dans le cambouis et lancer votre propre nœud validateur Celestia sur le tout récent testnet Mamaki ? C’est parti, je vous explique tout !

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

Le fonctionnement technique du réseau Celestia

Celestia présente une architecture bien spécifique. Traditionnellement, le modèle de conception des blockchains couple mécanisme de consensus et exécution des transactions. L’une des approches visant à améliorer la scalabilité de ces dernières repose sur le sharding, c’est-à-dire la fragmentation des données composant la chaîne principale.

Avec Celestia, les deux couches – consensus et exécution – sont séparées. Le rôle du mécanisme de consensus est seulement de s’assurer que les données des blocs sont disponibles. Pour ce faire, il utilise des preuves de la disponibilité des données (data availability proofs). Les transactions sont alors exécutées hors-chaîne : les nœuds n’ont plus besoin de les traiter pour s’assurer de la validité des blocs.

Les nœuds échantillonnent aléatoirement de petites portions des blocs de la chaîne. C’est assez semblable au partage de fichiers en pair-à-pair (BitTorrent) où les fichiers sont découpés entre les nœuds du réseau.

Une fois que la blockchain est entièrement échantillonnée, ont obtient les fameuses preuves de disponibilité desdites données.

Contrairement aux blockchains « traditionnelles », Celestia est conçue pour fournir des preuves de la disponibilité des données et du consensus, non pas l’exécution des transactions. Celestia repose donc sur un réseau de noeuds légers (permettant à tout un chacun de déployer un client en quelques minutes) et de noeuds complets d’archivage et de validation (le type de noeud que nous allons apprendre à déployer dans cet article).

Schéma du fonctionnement de la blockchain Celestia

Celestia fournit en définitive une couche modulaire de consensus et de disponibilité des données pour toutes les blockchains. Celestia n’impose pas la méthode de communication cross-chain utilisée.

Faire tourner votre noeud Celestia depuis un VPS

Pour commencer, et pour votre tranquillité, je vous conseille de vous prendre un VPS pour pouvoir opérer plus tranquillement. Mais qu’est-ce qu’un VPS, me direz-vous ? Simplement, il s’agit d’un réseau virtuel configuré sous le système d’exploitation de votre choix, disponible à la location.

Pourquoi passer par un VPS ? Pour deux raisons principales : d’abord pour pouvoir laisser tourner en continu votre noeud validateur (indépendamment de votre utilisation au quotidien de votre ordinateur classique), et ensuite pour suivre plus facilement des tutoriels standardisés en utilisant un système d’exploitation Linux classique (ici, Ubuntu).

Pour faire simple et fiable, vous pouvez aller regarder les offres disponibles du côté d’OVH (mais les tarifs proposés sont prohibitifs si vous souhaitez simplement vous essayez à des nodes testnet).

Tarifs des VPS chez OVH
Exemple de configuration et son tarif pour un VPS chez OVH

Si vous souhaitez simplement tester le présent tuto à prix plus raisonnable, vous pouvez vous orienter vers Contabo : le produit proposé est sur le principe convenable pour l’utilisation basique que nous en aurons dans nos tutos et bien moins cher que chez OVH…

Exemple des tarifs chez un autre fournisseur de VPS, comme Contabo

Mais attention : la qualité de l’infrastructure proposée n’est clairement pas la même, avec de possibles soucis d’accès à votre VPS ou des passages intempestifs hors ligne parfois très longs. Vous voilà donc prévenus : il faudra faire un choix, en connaissance de cause 😉

Pour vous lancer dans le déploiement d’un noeud testnet de Celestia, commencez par vous connecter à votre serveur VPS une fois qu’il est créé et configuré (comptez une heure de délai chez OVH en semaine, et une à trois heures chez Contabo). Pour ce faire, ouvrez un terminal de commande, et lancez 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. Dans mon cas par exemple, j’ai dû taper la commande suivante :

ssh [email protected]
Connexion au VPS loué en ligne de commande avec votre terminal de commande

Maintenant, attaquons-nous au vif du sujet, nous allons pouvoir commencer !

Récupérer les utilitaires nécessaires avant de se lancer

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

Les messages de mises à jour du VPS 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 Celestia, 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 !

Message de mise à jour dans le terminal qu'il faut valider

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.

Second message dans le terminal concernant les mises à jour, à valider aussi

Maintenant que vous êtes prévenus, attelons-nous à la tâche !

Installer les utilitaires principaux sur votre VPS

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 Celestia :

sudo apt update && sudo apt upgrade -y
sudo apt install curl tar wget 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
Mises à jour successives sur le VPS

Lançons-nous maintenant dans l’écosystème Celestia à proprement parler ! Pour lancer un noeud Celestia, il va vous falloir installer l’applicatif Celestia (Celestia App), déployer le back-end du node (Celestia-node), et organiser les liaisons entre ces deux utilitaires (avec le Celestia Bridge).

Installation de l’app Celestia

Commençons par l’application Celestia principale. Lancez la commande suivante dans votre terminal, connecté à votre VPS :

cd $HOME
rm -rf celestia-app
git clone https://github.com/celestiaorg/celestia-app.git
cd celestia-app/
APP_VERSION=$(curl -s \
https://api.github.com/repos/celestiaorg/celestia-app/releases/latest \
| jq -r ".tag_name")
git checkout tags/$APP_VERSION -b $APP_VERSION
make install
installation de l'applicatif Celestia

Attendez que le VPS mouline, et laissez-lui le temps d’installer l’application. Quand tout le bazar est terminé, vous pouvez vérifier la bonne installation avec la commande :

celestia-appd --help

Créer un wallet Celestia

Maintenant, pour pouvoir tester à proprement parler le réseau Celestia, il va être bien utile de générer un wallet directement en ligne de commande. Pour créer un wallet (et donc une clé privée et une clé publique), lancez la commande suivante :

celestia-appd config keyring-backend test

Créez un wallet à proprement parler en utilisant la commande suivante :

celestia-appd keys add NomDeVotreWallet
Création d'un wallet testnet Celestia en ligne de commande

Vous obtiendrez l’affichage d’une adresse publique de réception (address), du nom de votre wallet (name, dans mon cas jdc), d’une d’une clé publique (pubkey) et d’une clé privée, ainsi que d’une suite de mots servant de phrase mnémonique pour le testnet de Celestia.

Vérifiez les wallets existants si vous en créez plusieurs à l’aide de la commande :

celestia-appd keys list

Récupérer des Celestia testnet de développeur pour la suite de vos aventures

Maintenant, il est temps de récupérer des testnet Celestia depuis le Discord officiel du projet. Rendez-vous sur le Discord Celestia, et envoyez un message dans le canal du Faucet :

$request celestia1(VotreAdressePubliqueCelestia)

Ce qui, dans mon cas, donnera :

$request celestia1v7lpm45k3zwp0kzjaf4sfcx6hxu8xw32w49ra2 
Récupération de tokens développeur sur le wallet depuis le Discord du projet

Le canal Discord va alors vous envoyer quelques jetons développeur. Vérifiez la bonne réception de ces jetons en explorant votre adresse publique Celestia avec un explorateur de blockchain, comme celui-ci.

Vérification de la réception des tokens développeur sur un explorateur Celestia

Vous voilà parés à poursuivre l’installation du noeud complet Celestia, dans le but d’essayer de devenir validateur testnet du réseau. Petite précision d’importance : Celestia ne permet pas à tout le monde d’être validateur. En effet, son mécanisme de validation repose sur un ensemble de « meilleurs » validateurs, c’est-à-dire ceux possédant le plus de jetons. A l’heure actuelle et au vu de l’avancement du testnet, vous ne récupérerez par le Faucet pas assez de jetons pour devenir validateur véritable. Le but de cet article est donc très principalement pédagogique.

Installer le node Celestia

Déployer le node Celestia

Installez le coeur nucléaire du noeud Celestia à proprement parler avec cette commande :

cd $HOME rm -rf celestia-node git clone https://github.com/celestiaorg/celestia-node.git cd celestia-node/ git checkout tags/v0.3.0-rc2 make install

Laissez le temps au VPS pour télécharger les données, les compiler et les installer.

Déployer le réseau P2P de Celestia

Faites la même chose pour le réseau P2P de Celestia. Revenez dans votre menu principal, nettoyez les répertoires utiles et installez les réseaux utiles pour Celestia avec la commande :

cd $HOME
rm -rf networks
git clone https://github.com/celestiaorg/networks.git

Maintenant, initialisez le node en tapant :

celestia-appd init "NomDeVotreNode" --chain-id mamaki

Plus précisément, vous pouvez alors choisir un nom pour votre node, et la commande en profite pour préciser au client Celestia que vous souhaitez utiliser le testnet Mamaki.

Ensuite, attaquons-nous à la configuration de l’application, en s’adressant aux fichiers de configurations utiles :

cp $HOME/networks/mamaki/genesis.json $HOME/.celestia-app/config

Initialisez les connections qui permettront de se raccorder à d’autres opérateurs de noeuds, afin de récupérer et échanger les datas de la blockchain Celestia :

BOOTSTRAP_PEERS=$(curl -sL https://raw.githubusercontent.com/celestiaorg/networks/master/mamaki/bootstrap-peers.txt | tr -d '\n') echo $BOOTSTRAP_PEERS sed -i.bak -e "s/^bootstrap-peers =./bootstrap-peers = \"$BOOTSTRAP_PEERS\"/" $HOME/.celestia-app/config/config.toml

Configurer le mode élagué et le mode validateur pour votre noeud Celestia

Pour ne pas dévorer intégralement et très rapidement l’espace de stockage disponible sur votre VPS, configurons l’élagage de la blockchain en question : le pruning vous permettra de consommer moins de bande passante et de stockage, en conservant une version de la blockchain d’une taille globalement réduite au long cours. Utilisez cette commande :

PRUNING="custom" PRUNING_KEEP_RECENT="100" PRUNING_INTERVAL="10"
sed -i -e "s/^pruning =./pruning = \"$PRUNING\"/" $HOME/.celestia-app/config/app.toml sed -i -e "s/^pruning-keep-recent =./pruning-keep-recent = \ \"$PRUNING_KEEP_RECENT\"/" $HOME/.celestia-app/config/app.toml sed -i -e "s/^pruning-interval =./pruning-interval = \ \"$PRUNING_INTERVAL\"/" $HOME/.celestia-app/config/app.toml

Ensuite, passez en mode validateur :

sed -i.bak -e "s/^mode =./mode = \"validator\"/" $HOME/.celestia-app/config/config.toml

Enfin, mettez le le node à jour directement en téléchargeant un snapshot de la blockchain. Cette photo à un moment t de l’état de la blockchain va vous faire gagner beaucoup de temps : très rapidement récupéré depuis votre terminal de commande, il permettra à votre installation de reconstituer la blockchain bien plus rapidement que s’il vous fallait la télécharger et la vérifier indépendamment tout seul, de zéro. Utilisez la commande suivante :

cd $HOME 
rm -rf ~/.celestia-app/data 
mkdir -p ~/.celestia-app/data 
SNAP_NAME=$(curl -s https://snaps.qubelabs.io/celestia/ | \ egrep -o ">mamaki.*tar" | tr -d ">") 
wget -O - https://snaps.qubelabs.io/celestia/${SNAP_NAME} | tar xf - \ -C ~/.celestia-app/data/
Récupération du snapshot de la blockchain pour aller plus vite, en ligne de commande

Configurer le service Celestia App avec systemd

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

sudo tee <<EOF >/dev/null /etc/systemd/system/celestia-appd.service
[Unit]
Description=celestia-appd Cosmos daemon
After=network-online.target
[Service]
User=$USER
ExecStart=$HOME/go/bin/celestia-appd start
Restart=on-failure
RestartSec=3
LimitNOFILE=4096
[Install]
WantedBy=multi-user.target
EOF

Vérifiez l’état du service :

cat /etc/systemd/system/celestia-appd.service
Logs du service Celestia App déployé avec systemd en arrière plan

Puis entrez la commande suivante :

curl -s localhost:26657/status | jq .result | jq .sync_info

Et vérifiez dans la liste qui s’affiche que « catching_up : » est bien en « false » : cela voudra dire que vous êtes bien à jour sur l’avancée de la blockchain.

Vérification du statut : si cathing-up est en false, ça veut dire que l'import de blockchain a fonctionné et que tout va bien

Maintenant, revenons à la racine de votre VPS pour poursuivre l’installation des autres parties de votre node :

cd $HOME

Configurer l’app Celestia

Passons maintenant à la configuration de l’application Celestia. Ouvrez le fichier de configuration de l’app, avec un éditeur visuel (vi), avec cette commande :

vi ./.celestia-app/config/config.toml
Editez le fichier de configuration pour une utilisation optimale du node Celestia

Pressez la touche R + majuscule, pour passer en replace mode. Cela vous permettra d’apporter des modifications directement dans le document.

Faites les différentes modifications suivantes dans le document :

  • use-legacy = true
  • max-num-inbound-peers must be = “180”
  • max-num-outbound-peers must be = “70”
  • max-connections must be = “250”
  • timeout-propose must be = “3s”
  • timeout-commit must be = “25s”
  • skip-timeout-commit must be = “false”

Faites « Echap » pour valider.

Pressez ensuite la touche i + majuscule pour passer en insertion mode. Allez chercher dans le document la part consacrée aux persistents peers et copiez-collez cette commande :

[email protected]:43656,[email protected]:26656,[email protected]:36656,[email protected]:26676,[email protected]:26666,[email protected]:49656,[email protected]:26656,[email protected]:26656,[email protected]:26656,[email protected]:26656,[email protected]:26656,[email protected]:26656,[email protected]:26656,[email protected]:26656,[email protected]:20356,[email protected]:26656,[email protected]:26656,[email protected]:26656,[email protected]:26656,[email protected]:36656,[email protected]:26656,[email protected]:26656,[email protected]:26656,[email protected]:26656,[email protected]:26656,[email protected]:26656,[email protected]:26656,[email protected]:43656,[email protected]:43656,[email protected]:22656,[email protected]:26656,[email protected]:26656
Imposez une liste de pairs auxquels se connecter forcément (les plus efficaces du réseau testnet).

Puis faites à nouveau « Echap » pour valider. Ensuite, tapez :e et validez pour sauvegarder les modifs, puis tapez :q et validez pour quitter l’éditeur.

Sortez de l'éditeur du fichier de configuration en ayant tout sauvegardé.

Redémarrez le tout :

sudo systemctl restart celestia-appd.service

Et vérifiez que ça tourne bien :

curl -s localhost:26657/status | jq .result | jq .sync_info

Déployer le bridge Celestia

Comment déployer le bridge Celestia ?

Connectons les applications qui doivent l’être en lançant le bridge Celestia : ce bridge permettra lier deux couches du réseau, la couche des datas à proprement parler et la couche de consensus. Lancez le bridge avec la commande suivante :

celestia bridge init --core.remote <http://localhost:26657> \\--core.grpchttp://localhost:26657
celestia bridge start
Logs du bridge Celestia pour connecter votre noeud au réseau P2P précédemment configuré et déployé.

Configurer le service Bridge Celestia avec systemd

De la même manière qu’avec l’application Celestia, utilisez systemd pour faire tourner le service du bridge de façon permanente sur votre VPS :

sudo tee <<EOF >/dev/null /etc/systemd/system/celestia-bridge.service
[Unit]
Description=celestia-bridge Cosmos daemon
After=network-online.target[Service]
User=$USER
ExecStart=$HOME/go/bin/celestia bridge start
Restart=on-failure
RestartSec=3
LimitNOFILE=4096[Install]
WantedBy=multi-user.target
EOF

Vérifiez que tout va bien :

cat /etc/systemd/system/celestia-bridge.service

Enfin, lancez le service celestia-bridge :

systemctl enable celestia-bridge
systemctl start celestia-bridge && journalctl -u \celestia-bridge.service -f
Vérification et redémarrage des différents services déployés en tache de fond avec systemd

Déléguer à son propre noeud validateur Celestia

Enfin, et pour finir, nous allons activer votre validateur, même si ce sera purement pour la forme, comme nous l’avons précisé plus haut.

Activer son validateur Celestia on chain

Pour activer votre validateur Celestia on chain, il va falloir récupérer quelques informations, et émettre quelques transactions. Dans votre terminal, précisez votre wallet Celestia (VALIDATOR_WALLET=), puis récupérer votre identifiant celestiavaloper.

VALIDATOR_WALLET=VotreAdressePubliqueCelestia

celestia-appd keys show VotreAdressePubliqueCelestia --bech val -a

Dans mon cas, cela donnera :

VALIDATOR_WALLET=celestia1v7lpm45k3zwp0kzjaf4sfcx6hxu8xw32w49ra2
celestia-appd keys show celestia1v7lpm45k3zwp0kzjaf4sfcx6hxu8xw32w49ra2 --bech val -a
Identifiant unique de validateur à bien noter pour la suite des opérations

Enregistrez quelque part la valeur retournée. Dans mon cas, j’obtiens par exemple celestiavaloper1v7lpm45k3zwp0kzjaf4sfcx6hxu8xw32t286tv.

Maintenant, activons votre validateur. Pour ça, entrez la commande suivante, adaptée à vos propres données :

MONIKER=LeNomDeVotreNode 
VALIDATOR_WALLET=VotreAdressePubliqueDeCelestia 
celestia-appd tx staking create-validator \\ 
--amount=1000000utia \\ 
--pubkey=$(celestia-appd tendermint show-validator) \\ 
--moniker=$MONIKER \\ 
--chain-id=mamaki \\ 
--commission-rate=0.1 \\ 
--commission-max-rate=0.2 \\ 
--commission-max-change-rate=0.01 \\ 
--min-self-delegation=1000000 \\ 
--from=$VALIDATOR_WALLET \\ 
--keyring-backend=test

Ce qui dans mon cas donnera :

MONIKER=Node-JDC
VALIDATOR_WALLET=celestia1v7lpm45k3zwp0kzjaf4sfcx6hxu8xw32w49ra2
celestia-appd tx staking create-validator \\
--amount=1000000utia \\
--pubkey=$(celestia-appd tendermint show-validator) \\
--moniker=$MONIKER \\
--chain-id=mamaki \\
--commission-rate=0.1 \\
--commission-max-rate=0.2 \\
--commission-max-change-rate=0.01 \\
--min-self-delegation=1000000 \\
--from=$VALIDATOR_WALLET \\
--keyring-backend=test

Si vous rencontrez des difficultés, avec par exemple un message d’erreur concernant un RPC dysfonctionnel, ou un refus de connexion, il peut être utile d’ajouter au cas par cas --node https://rpc-mamaki.pops.one pour s’assurer un relai RPC fonctionnel (ou n’importe quel autre RPC fonctionnel pour Celestia).

Il vous sera demandé de confirmer, faites « yes ».

Validation de la première transaction d'activation du validateur

Vous pourrez vérifier la réussite de l’opération sur l’explorateur Celestia :

Vérification de la création du validateur sur un explorateur testnet de Celestia

Finaliser la délégation on chain sur Celestia

Pour conclure, déléguez des jetons développeur avec la commande suivante, en l’adaptant à votre wallet et votre node :

celestia-appd tx staking delegate \\VotreIDdeCelestiavaloper 9000000utia \\--from=$VALIDATOR_WALLET --chain-id=mamaki

Dans mon cas, cela donnera :

celestia-appd tx staking delegate \\celestiavaloper1v7lpm45k3zwp0kzjaf4sfcx6hxu8xw32t286tv 9000000utia \\--from=**celestia1v7lpm45k3zwp0kzjaf4sfcx6hxu8xw32w49ra2** --chain-id=mamaki
Validation de la transaction de délégations à votre propre noeud validateur Celestia

Confirmez la transaction, et vérifiez cette transaction et sa validation sur l’explorateur Celestia :

Vérification de la réussite de la délégation sur Celestia

Suivre le bon fonctionnement de son noeud Celestia

Et voilà, le plus difficile est fait, votre noeud Celestia est en ligne et fonctionne !

Le rappel des noeuds validants et non validants sur Celestia

Pour vérifier le statut de votre validateur, vous pouvez utiliser cette commande :

celestia-appd q staking validator celestiavaloper1v7lpm45k3zwp0kzjaf4sfcx6hxu8xw32t286tv

Enfin, pour redémarrer au besoin tout ce que vous avez installé et déployé depuis le début de cet article, vous pouvez utiliser les services systemd, à l’aide de la commande suivante :

sudo systemctl enable celestia-bridge sudo systemctl daemon-reload sudo systemctl restart celestia-bridge && journalctl -u celestia-bridge -o cat -f

Utilisez ensuite CTRL+C pour quitter les logs, lorsque vous en aurez vu assez 🙂

Certaines erreurs peuvent apparaître, par exemple des failed negotiated peuvent s’afficher : dans ce cas, c’est que certains autres nodes n’arrivent pas à se connecter à vous, mais on peut laisser le temps au temps, cela doit normalement se régler tout seul.

Si vous souhaitez vérifier la place disponible sur le disque dur de votre VPS, vous pouvez également lancer la commande suivante (bien pratique !) :

df -h
Comment vérifier l'espace disponible sur votre VPS

Pour tout supprimer si vous souhaitez vider votre VPS, en vue de lancer d’autres nodes par exemple si vous manquez de place, le plus simple restera de réinitialiser votre VPS directement depuis le menu de configuration offert par l’hébergeur que vous aurez choisi.

L’équipe de Celestia s’est donc attachée à tenter de proposer une petite révolution dans le monde de la blockchain : l’écosystème a accepté depuis un petit moment que son futur serait multi-chain ou ne serait pas… Mais et si la vraie question était plutôt « to be modular or not to be ? »

Que les apprentis développeurs fanas du Web3 se rassurent : les horizons novateurs offerts par cette architecture solide et originale seront probablement porteurs de grandes évolutions dans les prochains mois… et ce sera l’occasion d’en parler en détails dans les colonnes de votre canard favori !

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.