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.
Table des matières
- Le fonctionnement technique du réseau Celestia
- Faire tourner votre noeud Celestia depuis un VPS
- Récupérer les utilitaires nécessaires avant de se lancer
- Installation de l’app Celestia
- Créer un wallet Celestia
- Installer le node Celestia
- Configurer l’app Celestia
- Déployer le bridge Celestia
- Déléguer à son propre noeud validateur Celestia
- Suivre le bon fonctionnement de son noeud Celestia
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).
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).
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…
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]
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 !
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.
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
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
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
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
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.
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/
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
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.
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
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
Puis faites à nouveau « Echap » pour valider. Ensuite, tapez :e
et validez pour sauvegarder les modifs, puis tapez :q
et validez pour quitter l’éditeur.
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
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
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
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 ».
Vous pourrez vérifier la réussite de l’opération sur l’explorateur 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
Confirmez la transaction, et vérifiez cette transaction et sa validation sur l’explorateur Celestia :
Suivre le bon fonctionnement de son noeud Celestia
Et voilà, le plus difficile est fait, votre noeud Celestia est en ligne et fonctionne !
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
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 !