Infos blockchain, cryptos & NFT en français pour les Sysadmins GNU/Linux francophones et autres crypto enthousiastes. SysAdmInCrypto

Infos blockchain, cryptos & NFT en français pour les Sysadmins GNU/Linux francophones et autres crypto enthousiastes.

5 December 2021

Configurer une node de test merge eth2

Tester le merge avec Linux (Ubuntu) et Docker.

Prérequis

Attention ; il se peut que le lancement de docker-compose ne fonctionne pas sous Windows et Mac à cause de l’option docker-compose network_mode: host. Non testé.
Cf Documentation Docker

Installer docker + docker-compose

Détails...

Docker

sudo apt-get update
 sudo apt-get install \
    ca-certificates \
    curl \
    gnupg \
    lsb-release

curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
echo \
  "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu \
  $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io

Doc officielle

Docker compose

sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
# si besoin :
sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose

Doc officielle

Droits

Seul root et les utilisateurs appartenant au groupe docker peuvent exécuter des commandes docker.

sudo usermod -aG docker nom_du_user

Puis reconnecter l’utilisateur.

Configurer et lancer les nodes

Récupérer et configurer l’environnement

Depuis votre répertoire de travail, lancer les commandes suivantes :

git clone https://github.com/parithosh/consensus-deployment-ansible 
cd consensus-deployment-ansible/scripts/quick-run/merge-devnets
mkdir -p execution_data beacon_data

Éditer merge-devnet-2.vars pour y mettre son IP externe en ligne 2, IP_ADDRESS=.
Votre adresse visible depuis internet peut être récupérée comme suit :

curl ifconfig.me

Ou se rendre sur ce site

Lancer les nodes

Plusieurs execution engines sont disponibles, nous utiliserons geth dans cet exemple.

docker-compose --env-file merge-devnet-2.vars -f docker-compose.geth.yml up -d

Plusieurs consensus engines sont disponibles, nous utiliserons lighthouse dans cet exemple.

docker-compose --env-file merge-devnet-2.vars -f docker-compose.lighthouse.yml up -d

Vérifier les logs

docker logs lighthouse_beacon -f --tail=20
docker logs geth -f --tail=20

Les logs des nodes synchronisées devraient respectivement ressembler à :

Dec 06 14:30:12.258 INFO New block received                      root: 0x19506f6b601f5e82a5948ee1092dc881690d9eca878acedab560edf680cd59ab, slot: 42726
Dec 06 14:30:18.000 INFO Synced                                  slot: 42726, block: 0x1950…59ab, epoch: 1335, finalized_epoch: 1333, finalized_root: 0x7968…ad41, exec_hash: 0xd0c3…9072 (verified), peers: 4, service: slot_notifier
INFO [12-06|14:26:36.162] Setting head                             head=f38846..e837e5
INFO [12-06|14:26:36.162] Set the chain head                       number=39101 hash=f38846..e837e5

Il faut patienter le temps que les nodes se synchronisent, nous pouvons observer les derniers numéros de block sur cet explorateur

Source

Configuration de Metamask

Network Name Devnet-2
New RPC URL http://127.0.0.1:8545
Chain ID 1337502

Source

Astuce : si la machine hébergeant docker n’est pas la machine depuis laquelle nous utilisons Metamask, ouvrir un tunnel depuis le poste de travail :

ssh user@serveur_docker -v -N -L 8545:127.0.0.1:8545

Merci à canbo pour cette astuce.
Attention, il a été reporté un problème empêchant de finaliser la configuration dans certains cas. Could not fetch chain ID. Is your RPC URL correct?
Mes essais montrent que : Metamask 10.1.0 dans Firefox == KO
Metamask 10.6.4 dans Brave == Ok

Récupérer des ethers de test

Sur le faucet.
N’Utiliser Que des Adresses de Test. Tester l’envoi d’ethers.

Staking

Pour staker, il faut utiliser la fonction Deposit() du DepositContract.

  1. Se connecter au container Lighthouse
    docker exec -it lighthouse_beacon bash
    
  2. Créer un compte
    lighthouse --testnet-dir=/custom_config_data account wallet create
    

    Suivre la procédure, bien conserver les informations fournies (wallet name, mot de passe saisi, seed phrase, UUID).

  3. Générer les données du validateur
    lighthouse --testnet-dir=/custom_config_data account validator create --count 1
    

Suivre la procédure :

[...]
Enter wallet name:
mon_wallet

Enter your wallet's password: mon_password

1/1	0x940e9c65ca3c7fe17ea8977994aeb5a336a545b4197e67612c14ac6c4957ace2e43c1353d19d1ab6780705094189a0d2

La chaîne 0x940...a0d2 correspond à mon numéro unique de validateur. Les données dont nous avons besoin pour continuer se trouvent dans le fichier eth1-deposit-data.rlp. Adapter et lancer la commande suivante :

cat /root/.lighthouse/custom/validators/0x940e*/eth1-deposit-data.rlp ; echo

Et récupérer le résultat qui ressemble à ceci (c’est une information publique) :

0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000000000000000000000000000000000000000012093dfec8329de953f5fb4ccb88bfe22318da461d17d17176f79239c92814ee1880000000000000000000000000000000000000000000000000000000000000030940e9c65ca3c7fe17ea8977994aeb5a336a545b4197e67612c14ac6c4957ace2e43c1353d19d1ab6780705094189a0d2000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020006727b930b61d84fee4feba93d0ffd01c067f35f0a2c73b901650756f6f3240000000000000000000000000000000000000000000000000000000000000006095b8dead6a5111e36258e0a88feb680dd74a5647947af8f7ebef1c27a3040d8bcf734b259b5946270b65d7e5f32211ff11ae86f0645e148212355dc1bb1090deb16d1373b8465732a302e16381718eb821c9da9c236f225862f0a7b9bcf32a85

Cela contient, encodé, l’appel de fonction Deposit() avec les paramètres qui nous concernent pour activer le smart contract.
Nous pouvons maintenant envoyer 32 Ethers au smartcontract 0x424242… , en ajoutant dans le champ HexData la longue ligne du fichier eth1-deposit-data.rlp copiée depuis le terminal.

Suivi

Vous devriez voir votre transaction dans l’explorateur de blocks.
Coller son numéro de validateur (0x940… dans mon exemple) dans le Beacon Chain Explorer. Rapidement nous devrions voir notre entrée, mais, contrairement à ce qui est indiqué, il faudra plusieurs heures pour être un validateur validé ;-)

Categories: ethereum - node - docker