Ethereum

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 :

0.1 Introduction à ETH2: The merge

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.

La couche éxecution

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.

La couche consensus

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.

Les différents clients

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

  • GETH (developpé en GO)
  • NETHERMIND (developpé en .NET)
  • BESU (developpé en Java)
  • ERIGO (developpé en GO)

Il existe quatre clients de consensus (client CL):

  • PRYSM (developpé en GO)
  • LIGHTHOUSE (developpé en Rust)
  • NIMBUS (developpé en Nim)
  • TEKU (developpé en Java)

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 !


1. Configuration du serveur

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

1.1 Ajouter les règles au firewall
  1. Ajouter le port 30303 (pour la couche éxecution)
  > sudo ufw allow 30303
  1. Ajouter le port 13000 TCP (pour la couche consensus)
  > sudo ufw allow 13000/tcp
  1. Ajouter le port 12000 UDP (pour la couche consensus)
  > sudo ufw allow 12000/udp
  1. Valider la configuration avec :
  > sudo ufw enable
  1. Vérifiez que les règles sont bien appliquées :
  > 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)
1.2 Récupérer le répertoire GIT de BITGEN
  1. Créer le répertoire de base et se rendre à l’intérieur :
  > sudo mkdir /validator && cd /validator
  1. Cloner le répertoire GIT:
  > 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


2. Création des clés du validateur

Connecter vous en SSH au serveur

  1. Cloner le repertoire GIT 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
  1. Compiler l’image Docker:
  > sudo apt-get update -y && apt-get install -y make
  > sudo make build_docker
  1. Lancer le programme de création des clés :
  > 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
  • L’option --mnemonic_language vous permet de choisir la langue dans laquelle les 24 mots du portefeuille seront édités
  • L’option --num_validators doit renseigner le nombre de validateur que vous souhaiter supporter avec cette clés, ici 1
  • L’option --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 !!
  • L’option --chain vous permet de selectionner la chain cible, mainnet pour la production et goerli pour le réseau de test
  • Pour plus d’option, Lire la documentation officielle

Lors 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 !


3. Validation du dépôt sur le launchpad Ethereum

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

ou https://goerli.launchpad.ethereum.org/en/overview si vous utilisez le Testnet goerli

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.

geth

Une fois les 10 questions passées, à l’écran Choose execution client, cliquez sur NETHERMIND, puis descendez un peu la page pour valider.

nethermind

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:


4. Configuration et démarrage du masternode

Connecter vous en SSH au serveur

4.1 Editer l'environnement
  1. Editez le fichier .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 touche entrée

  1. Maintenant nous allons générer une clé pour l’authentification JWT entre nos différents conteneurs de services
  > sudo sh -c 'openssl rand -hex 32 | tr -d "\n" > /validator/src/auth/jwt.hex'
  1. Editez ensuite le fichier /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 touche entrée

4.2 Démarrer les clients (couche execution et consensus)

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 !

4.3 Attacher le collateral

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

4.4 Démarrer le validateur

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


5. Arrêter le validateur

Connecter vous en SSH au serveur

  1. Editez le fichier .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 touche entré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"

6. Aller plus loin

6.1 Le site beaconscan.com

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.

6.2 Documentations officielles des clients (GETH / NETHERMIND / PRYSM)

GETH => https://geth.ethereum.org/docs

NETHERMIND => https://docs.nethermind.io

PRYSM => https://docs.prylabs.network

6.3 Code promo BITGEN

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