Au cours de l’automne 2022, le réseau Ethereum est passé du Proof-of-Work (Preuve de travail) au Proof-of-Stake (Preuve d’enjeu). C’est à dire que le réseau Ethereum ne valide plus les transactions par des mineurs mais par des serveurs validateurs.
Ce tutoriel vous explique de A à Z comment monter votre propre validateur Ethereum pour staker vos Ether.
ATTENTION: La mis en oeuvre d’un validateur Ethereum est une opération complexe demandant un investissment et une maintenance pointue. Nous ne sommes en aucun cas responsable de la mauvaise mise en oeuvre de votre noeud et/ou de la perte de vos actifs.
Si toute fois vous voulez monter votre propre validateur, nous vous conseillons fortement de commencer par les reseaux de Testnet avant de passer sur le Mainnet
Pour investir serainement dans un validateur Ethereum rendez vous sur bitgen.com
Sommaire du tutoriel
Pré-requis
Avant de commencer ce tutoriel, veuillez lire attentivement les pré-requis suivants :
La transition de la preuve de travail (PoW) à la preuve d’enjeu (PoS) mieux connue sous le nom de “The Merge” est le plus grand changement de l’histoire d’Ethereum. Cette transition change fondamentalement la façon dont le réseau est sécurisé et pose les bases de la prochaine phase d’améliorations.
Un client d’éxecution, est une implémentation d’Ethereum qui vérifie l’ensemble des transactions de chaque bloc, garantissant la sécurité du réseau et l’exactitude des données.
Le changement le plus notable de cette mise à jour d’Ethereum est l’ajout de la chaîne Beacon qui a été lancée le 1er décembre 2020 et qui remplace aujourd’hui le minage Proof-of-Work. Cette couche coordonne et sélectionne de manière pseudo-aléatoire les producteurs de blocs d’une manière qui rend extrêmement difficile pour les validateurs de coordonner des attaques sur le réseau.
Tous les clients suivants implémentent les spécification de base d’Ethereum et sont donc interchangeable
Il existe quatre clients d’éxécution (client EL):
Il existe quatre clients de consensus (client CL):
Nous nous attarderons ici sur les déploiements GETH/PRYSM & NETHERMIND/PRYSM
Pour plus d’implémentation, n’hésitez pas à nous contacter à blog@bitgen.com !
Une fois le serveur provisionné et les pré-requis configurés nous allons ajouter trois nouvelles règles au firewall et récupérer le répertoire GIT.
Connecter vous en SSH au serveur
30303
(pour la couche éxecution) > sudo ufw allow 30303
13000 TCP
(pour la couche consensus) > sudo ufw allow 13000/tcp
12000 UDP
(pour la couche consensus) > sudo ufw allow 12000/udp
> sudo ufw enable
> sudo ufw status verbose
Le terminal devrait afficher les lignes suivantes :
Status: active
Logging: on (low)
Default: deny (incoming), allow (outgoing), deny (routed)
New profiles: skip
To Action From
-- ------ ----
22123/tcp ALLOW IN Anywhere
30303 ALLOW IN Anywhere
13000/tcp ALLOW IN Anywhere
12000/udp ALLOW IN Anywhere
22123/tcp (v6) ALLOW IN Anywhere (v6)
30303 (v6) ALLOW IN Anywhere (v6)
13000/tcp (v6) ALLOW IN Anywhere (v6)
12000/udp (v6) ALLOW IN Anywhere (v6)
> sudo mkdir /validator && cd /validator
> sudo git clone https://github.com/bitgenplatform/staking-eth2.git src
Les sources pour configurer et démarrer votre validateur Ethereum se trouvent maintenant ici : /validator/src
Connecter vous en SSH au serveur
staking-deposit-cli
officiel de la fondation Ethereum qui contient tous les outils nécessaires et se rendre à l’intérieur du dossier : > sudo git clone https://github.com/ethereum/staking-deposit-cli.git /validator/staking-deposit-cli && cd /validator/staking-deposit-cli
> sudo apt-get update -y && apt-get install -y make
> sudo make build_docker
> sudo docker run -it --rm -v /validator/src/launchpad/validator_keys:/app/validator_keys ethereum/staking-deposit-cli new-mnemonic --mnemonic_language=english --num_validators=1 --eth1_withdrawal_address="0x548cB5Beac043173Ea38b20156E6f6E2aD03f007" --chain=mainnet
--mnemonic_language
vous permet de choisir la langue dans laquelle les 24 mots du portefeuille seront édités--num_validators
doit renseigner le nombre de validateur que vous souhaiter supporter avec cette clés, ici 1--eth1_withdrawal_address
doit renseigner l’adresse Ethereum qui recevra les récompenses. Attention cette adresse doit être DIFFERENTE de la configuration FEE_RECIPIENT
et être sous votre entière contrôle! Une fois enregistrée, vous ne pourrez plus la modifier !!--chain
vous permet de selectionner la chain cible, mainnet
pour la production et goerli
pour le réseau de testLors du lancement du container, un parcours client démarrera. Il vous demandera de choisir la langue dans laquelle il vous affichera les question (en anglais par défaut). Validez avec la touche entrée.
Please choose your language ['1. العربية', '2. ελληνικά', '3. English', '4. Français', '5. Bahasa melayu', '6. Italiano', '7. 日本語', '8. 한국어', '9. Português do Brasil', '10. român', '11. 简体中文']: [English]:
A la question suivante choisissez le mot de passe pour vos clés de validateur : (notez-le lieu sur ou soyez certain de vous en souvenir)
Create a password that secures your validator keystore(s). You will need to re-enter this to decrypt them when you setup your Ethereum validators.:
Une fois le mot de passe choisi et validé, votre phrase de récupération de portefeuille de 24 mots s’affiche :
This is your mnemonic (seed phrase). Write it down and store it safely. It is the ONLY way to retrieve your deposit.
join input elegant congress lamp laptop youth margin worry slide weird attract surround age marriage prosper romance draw mix where deposit right industry produce
Press any key when you have written down your mnemonic.
Notez ces 24 mots et conservez-les précieusement dans un endroit en sécurité !
ATTENTION : Nous vous conseillons de ne jamais copier/coller ces mots sur votre ordinateur ou de les enregistrer en ligne, mais bien de les noter sur un support physique à l’aide d’un stylo !
L’étape suivante vous demandera de re-saisir ces mots dans l’ordre afin de s’assurer que vous n’avez pas fait d’erreur durant la copie :
Please type your mnemonic (separated by spaces) to confirm you have written it down. Note: you only need to enter the first 4 letters of each word if you'd prefer.
Une fois les 24 mots re-saisis correctement et validés, le programme générera vos clés.
##### #####
## ##### ##
### ## ####### #########################
## ## ##### ## ##
## ##### ## ##
## ## ## ###
######## ## ####
## ## ### ##### #####
# ## # #####
# # # #####
## ## ##
## ## ##
## ### ## ##
############### ## ##
### ## ##
############################# ##
## ###
####### ################# ###
## ## ## ## ## ###
############## #############
Creating your keys.
Creating your keystores: [####################################] 1/1
Verifying your keystores: [####################################] 1/1
Verifying your deposits: [####################################] 1/1
Success!
Your keys can be found at: /app/validator_keys
Press any key.
Pour vérifier le bon déroulement de l’opération, listez les fichiers présents dans le dossier :
> cd /validator/src/launchpad/validator_keys && ls -l
Vous devriez voir s’afficher une liste de fichiers comparable à celle-ci :
-r--r----- 1 root root 706 Jun 19 18:41 deposit_data-1655656906.json
-r--r----- 1 root root 710 Jun 19 18:41 keystore-m_12381_3600_0_0_0-1655656906.json
Vos clés de validateur sont maintenant générées !
Passons au dépôt et à la validation de votre collatéral de 32 ETH.
Pour se faire, rendez-vous sur le launchpad Ethereum: https://launchpad.ethereum.org/en/overview
Note : Vous avez la possibilité dans le menu en haut à droite, de changer la langue en français
Suivez le questionnaire (10 questions) en validant avec le bouton CONTINUE ou I ACCEPT
Une fois les 10 questions passées, à l’écran Choose execution client, cliquez sur GETH, puis descendez un peu la page pour valider.
Une fois les 10 questions passées, à l’écran Choose execution client, cliquez sur NETHERMIND, puis descendez un peu la page pour valider.
A l’écran Choose consensus client, cliquez sur Prysm
A l’écran Generate key pairs saisissez 1 validateur dans le champs et cochez la case I am keeping my key(s) safe and have written down my mnemonic phrase puis validez.
L’écran suivant va vous demander d’uploader votre clé de validation.
Pour se faire, créez sur votre ordinateur un fichier deposit_data-[timestamp].json
qui correspond au fichier présent dans votre répertoire de clés sur le serveur
> ls -l /validator/src/launchpad/validator_keys/
-r--r----- 1 root root 706 Jun 19 18:41 deposit_data-1655656906.json
-r--r----- 1 root root 710 Jun 19 18:41 keystore-m_12381_3600_0_0_0-1655656906.json
Ici : deposit_data-1655656906.json
Copier/coller le contenu du fichier de votre serveur dans celui de votre ordinateur :
> sudo cat /validator/src/launchpad/validator_keys/deposit_data-1655656906.json
Sauvegardez ensuite votre fichier puis transférez-le sur le site :
Sur l’écran suivant, Connect wallet, sélectionnez le portefeuille contenant les 32 ETH
Sur l’écran Summary, cochez toutes les case puis cliquez sur CONTINUE
Sur l’écran Transaction cliquez sur SEND DEPOSIT pour effectuer la transaction avec le Smart-Contract qui va collatéraliser vos Ethereum
Le transfert terminé, cliquez sur CONTINUE et si tout s’est bien déroulé, vous devriez avoir l’écran suivant:
Connecter vous en SSH au serveur
.env
> cd /validator/src/ && sudo nano .env
Modifier la ligne (seulement si vous êtes sur le réseau Testnet)
ETH_NETWORK=mainnet
par
ETH_NETWORK=goerli
la ligne (seulement si vous êtes sur le réseau Testnet)
TARGET_CHAIN=mainnet
par
TARGET_CHAIN=goerli
la ligne
FEE_RECIPIENT=0x87566dad4Dce9138b8f9D31f486B5dea7a044dd7
par
FEE_RECIPIENT=votre_adresse_ethereum
la ligne
PUBLIC_IP=0.0.0.0
par
PUBLIC_IP=ip_du_serveur
L’option FEE_RECIPIENT vous permet d’ajouter une adresse Ethereum de votre choix. Lorsque vous participerez à la création de nouveaux blocs, les fees seront envoyé à cette adresse et ainsi vous augmenterez vos récompenses de validations.
Pour sauvegarder avec nano: Ctrl+x et validez par la touche
y
puis la toucheentrée
> sudo sh -c 'openssl rand -hex 32 | tr -d "\n" > /validator/src/auth/jwt.hex'
/validator/src/launchpad/wallet-password
> cd /validator/src/launchpad && sudo nano wallet-password
Remplacer la ligne
your_server_wallet_password
Par
le mot de passe que vous avez choisi lors de la création des clés
Pour sauvegarder avec nano: Ctrl+x et validez par la touche
y
puis la toucheentrée
GETH est le client d’éxecution qui va faire le lien avec la chain d’Ethereum
PRYSM est le client de consensus qui va faire le lien avec la chain 2.0 d’Ethereum (beacon-chain) sur laquelle se situe les validateurs en Proof-Of-Stake
La commande suivante va démarrer les 2 clients: GETH étant dépendent de PRYSM, le container beacon va aussi démarrer le container geth
> cd /validator/src/ && sudo docker compose -f run-geth_prysm.yml up -d beacon
Pour avoir un visuel sur le déroulement des opérations de GETH :
> cd /validator/src/ && sudo docker compose -f run-geth_prysm.yml logs --tail 50 -f geth
Pour avoir un visuel sur le déroulement des opérations de PRYSM :
> cd /validator/src/ && sudo docker compose -f run-geth_prysm.yml logs --tail 50 -f beacon
Pour accèder à la console GETH Mainnet :
> sudo docker exec -it geth geth attach ipc://root/.ethereum/geth.ipc
Pour accèder à la console GETH Goerli :
> sudo docker exec -it geth geth attach ipc://root/.ethereum/goerli/geth.ipc
NOTE : Cette opération peut prendre un certain temps (~3 à ~4 jours).
NETHERMIND est le client d’éxecution qui va faire le lien avec la chain d’Ethereum
PRYSM est le client de consensus qui va faire le lien avec la chain 2.0 d’Ethereum (beacon-chain) sur laquelle se situe les validateurs en Proof-Of-Stake
La commande suivante va démarrer les 2 clients: NETHERMIND étant dépendent de PRYSM, le container beacon va aussi démarrer le container nethermind
> cd /validator/src/ && sudo docker compose -f run-nethermind_prysm.yml up -d beacon
Pour avoir un visuel sur le déroulement des opérations de NETHERMIND :
> cd /validator/src/ && sudo docker compose -f run-nethermind_prysm.yml logs --tail 50 -f nethermind
Pour avoir un visuel sur le déroulement des opérations de PRYSM :
> cd /validator/src/ && sudo docker compose -f run-nethermind_prysm.yml logs --tail 50 -f beacon
NOTE : Cette opération peut prendre un certain temps (~8 à ~24 heures).
Les clients vont en effet télécharger une partie de la chaine Ethereum ! Il faut compter aujourd’hui pas loin de 1200Go d’espace de stockage pour un noeud opérationnel !
Avant de démarrer votre validateur nous allons devoir lui attacher le collateral de 32 ETH que nous avons déposé précédemment dans un smart-contract depuis le site du launchpad d’Ethereum.
ATTENTION : La synchronisation de la Beacon-Chain doit être terminée avant de valider votre collatéral ! Si vous attachez le collatéral avant la fin de la synchronisation de la beacon-chain vous serez pénalisé et vous perdrez du collateral !
Pour vérifier que la Beacon-Chain est bien synchronisée:
> curl http://localhost:3500/eth/v1alpha1/node/syncing
Si la chaine est totalement synchronisée, vous devriez voir s’afficher :
{"syncing":false}
Vérifiez aussi que les deux clés se situes bien dans le répertoire /validator/src/launchpad/validator_keys
> cd /validator/src/launchpad/validator_keys && ls -l
Vous devriez voir s’afficher une liste de fichiers comparable à celle-ci :
-r--r----- 1 root root 706 Jun 19 18:41 deposit_data-1655656906.json
-r--r----- 1 root root 710 Jun 19 18:41 keystore-m_12381_3600_0_0_0-1655656906.json
Si tout est en ordre, il suffit simplement de lancer la commande :
> cd /validator/src && sudo docker compose -f manage-account-prysm.yml run validator-import-launchpad
Le terminal vous demandera le mot de passe que vous avez choisi lors de la création des clés
[2022-06-25 15:20:27] WARN flags: Running on the Mainnet
[2022-06-25 15:20:27] INFO accounts: Successfully created new wallet wallet-path=/data/wallets
Enter the password for your imported accounts:
Importing accounts, this may take a while...
Importing accounts... 100% [==========================================] [1s:0s]
Successfully imported 1 accounts, view all of them by running `accounts list`
Pour vérifier que votre collatéral a bien été pris en compte :
> cd /validator/src && sudo docker compose -f manage-account-prysm.yml run validator-list-accounts
Vous devriez voir quelque chose de ce type :
[2022-06-25 15:24:09] WARN flags: Running on the Mainnet
[2022-06-25 15:24:09] WARN validator: You are using an insecure gRPC connection. If you are running your beacon node and validator on the same machines, you can ignore this message. If you want to know how to enable secure connections, see: https://docs.prylabs.network/docs/prysm-usage/secure-grpc
(keymanager kind) local wallet
Showing 1 validator account
View the eth1 deposit transaction data for your accounts by running `validator accounts list --show-deposit-data`
Account 0 | largely-relieved-koala
[validating public key] 0x8c1b209f842221a8f9e65fe100524cac137974543145c13ceca61c50d71e870e26d85333772107f3a8502c67e9edf290
Cette dernière ligne vous indiquera la clé public de votre collateral.
Notez-la, nous en aurons besoin pour la suite sur le site beaconscan.com
Nous arrivons enfin à l’ultime étape de la mise en place d’un validateur Ethereum !
La prcohaine commande va demarrer votre validateur !
> cd /validator/src && sudo docker compose -f run-geth_prysm.yml up -d
Pour avoir un visuel sur le déroulement des opérations de votre validateur :
> cd /validator/src && sudo docker compose -f run-geth_prysm.yml logs --tail 50 -f validator
> cd /validator/src && sudo docker compose -f run-nethermind_prysm.yml up -d
Pour avoir un visuel sur le déroulement des opérations de votre validateur :
> cd /validator/src && sudo docker compose -f run-nethermind_prysm.yml logs --tail 50 -f validator
Et Voilà ! Votre validateur est maintenant prêt à valider ses premières transactions !
Cependant votre validateur peut mettre un certain temps à démarrer. En effet il est placé dans une file d’attente (se comptant en EPOC) et sera réellement actif une fois la file d’attente terminée.
Lisez la suite de ce tutoriel pour apprendre comment monitorer votre validateur ainsi que vos rewards
Connecter vous en SSH au serveur
.env
> cd /validator/src/ && sudo nano .env
Modifier la ligne
PUB_KEY=""
par
PUB_KEY="%public_key%"
%public_key% est la cléf public de votre validateur récupéré lors des étapes précédentes (4.3 Attacher le collateral)
Pour sauvegarder avec nano: Ctrl+x et validez par la touche
y
puis la toucheentrée
Ensuite lancez la ligne de commande
> cd /validator/src && sudo docker compose -f manage-account-prysm.yml run validator-exit
Vous devriez voir sur la console les lignes suivantes confirmant le bon déroulé des opérations:
validator-exit | time="2023-04-19T16:58:32Z" level=warning msg="Running on the Mainnet" prefix=flags
validator-exit | time="2023-04-19T16:58:32Z" level=warning msg="You are using an insecure gRPC connection. If you are running your beacon node and validator on the same machines, you can ignore this message. If you want to know how to enable secure connections, see: https://docs.prylabs.network/docs/prysm-usage/secure-grpc" prefix=validator
validator-exit | time="2023-04-19T16:58:32Z" level=info msg="Voluntary exit was successful for the accounts listed"
Le site beaconscan.com va vous permettre de monitorer simplement votre validateur ETH2.
Entrer l’adresse https://beaconscan.com/validator/%public_key% dans votre navigateur internet
%public_key% est la cléf public de votre validateur récupéré lors des étapes précédentes (4.3 Attacher le collateral)
Si vous possedez plusieurs validateurs, vous avez la possibilité de créer un compte gratuit pour accèder à un tableau de bord récapitulatif regroupant vos noeuds.
GETH => https://geth.ethereum.org/docs
NETHERMIND => https://docs.nethermind.io
PRYSM => https://docs.prylabs.network
Utilisez le code promo: STAKING-BLOG-2023 pour profiter de 10% de réduction sur votre prochain achat, valable sur les masternodes / staking / livrets épargnes.
Pour profiter de la promotion, rendez-vous sur le site de https://bitgen.com