On va voir ensemble comment monter un forger node, un validateur sur l’EVM d’Horizen : EON et comment fonctionne le staking Horizen EON !
Prérequis matériels
On commence par vérifier les prérequis sur la page de la documentation :
–> https://docs.horizen.io/horizen_eon/staking/forger_node
Au niveau stockage, on devra avoir un full node pour la mainchain Horizen et un full node pour la sidechain EON. Lors de l’écriture de ce tutoriel, il fallait déjà plus de 100Go, donc prévoir large !
Il manque également un prérequis très important au niveau du CPU. Ce dernier doit prendre en charge adx et bmi2. On les retrouve dans la ligne flags de la sortie de la commande cat /proc/cpuinfo
sous linux.
Reste à trouver un serveur qui correspond à tous ces prérequis. A titre indicatif, j’ai monté mon node sur un serveur de la gamme éco chez OVH : le SYS-5-SSD-32.
Installation du serveur
Ce tutoriel s’appuie sur une base Ubuntu 22.04
Prérequis logiciels
Une fois connecté en tant qu’utilisateur ubuntu, on installe les prérequis logiciels :
sudo apt install jq docker docker-compose-v2 pwgen
S’autoriser Docker
La manière la plus simple d’installer les nodes consiste à utiliser docker. On ajoute donc l’utilisateur ubuntu au groupe docker :
sudo adduser ubuntu docker
Il faudra se déconnecter puis se reconnecter à l’utilisateur ubuntu pour que la modification soit prise en compte.
Clonage du projet & configuration
On clone le projet compose-evm-simplified du github Horizen en local :
https://github.com/HorizenOfficial/compose-evm-simplified/
git clone https://github.com/HorizenOfficial/compose-evm-simplified.git
Cela crée un répertoire compose-evm-simplified qui va nous permettre de lancer nos nodes.
On se déplace dans le répertoire compose-evm-simplified.
cd compose-evm-simplified
Et on initialise le projet pour un forger node sur EON :
./scripts/init.sh
Si vous obtenez l’erreur ci-dessous :
=== Checking all the requirements ===
verify_required_commands Error: 'docker compose' v2 is required to run this script, see installation instructions at 'https://docs.docker.com/compose/install/'.
Assurez vous que vous avez bien installé docker compose v2 :
$ docker compose version
Docker Compose version 2.20.2+ds1-0ubuntu1~22.04.1
Si c’est bien le cas, alors vous pouvez supprimer ou commenter la ligne 17 du script scripts/utils.sh :
(docker compose version 2>&1 | grep -q v2) || fn_die "${FUNCNAME[0]} Error: 'docker compose' v2 is required to run this script, see installation instructions at 'https://docs.docker.com/compose/install/'."
Et vous pourrez alors relancer le scipt.
$ ./scripts/init.sh
=== Checking all the requirements ===
What kind of node type would you like to run:
1) rpc
2) forger
#? 2
You have selected: forger
What network would you like to setup 'eon' (mainnet) or 'gobi' (testnet):
1) eon
2) gobi
#? 1
En réponse aux questions du script, choisir forger puis eon.
Si c’est une première installation, répondez no à « Do you want to import an already existing seed phrase for your wallet »
Le script génère alors une clé, à conserver en lieu sûr ! Donc, on l’enregistre et on valide en répondant yes à la question « Do you confirm you safely stored your Wallet Seed Phrase ? (‘yes’) »
Répondez également no aux questions suivantes :
- Do you want to change the user (please answer ‘no’ if you don’t know what you are doing) ? (‘yes’ or ‘no’)
- Do you want to change the datadir (please answer ‘no’ if you don’t know what you are doing) ? (‘yes’ or ‘no’)
Le script se termine alors en indiquant les étapes suivantes :
Zend
On commence par lancer zend, le node de la mainchain.
docker compose -f /home/ubuntu/compose-evm-simplified/deployments/forger/eon/docker-compose.yml up -d zend
Et on doit ensuite attendre qu’il soit totalement synchronisé. C’est à dire que la blockheight locale soit synchronisée avec la blockheight de la mainchain.
On retrouve la valeur locale avec la commande suivante :
$ docker exec zend gosu user zen-cli getblockcount
12640
La valeur de la mainchain est indiquée sur l’explorer : https://explorer.horizen.io/
Voilà, on a quelques heures devant nous !
Une fois que les 2 valeurs sont identiques, on peut lancer le node EON, le bien nommé evmapp.
EVMApp
La commande pour lancer le node EON est la suivante :
docker compose -f /home/ubuntu/compose-evm-simplified/deployments/forger/eon/docker-compose.yml up -d
On doit attendre un petit moment après le retour de la commande que les clés soient générées avant que le node se mette vraiment à synchroniser.
On peut vérifier où il en est grâce à la commande suivante :
docker logs --tail 20 evmapp
Une fois que c’est le cas, on utilise la commande suivante pour connaître l’avancement de la synchronisation :
$ docker exec evmapp gosu user bash -c 'curl -sXPOST "http://127.0.0.1:9545/block/best" -H "accept: application/json" | jq '.result.height''
14607
Et maintenant, c’est la sidechain EON que l’on doit synchroniser. Le dernier bloc étant disponible sur l’explorer EON : https://eon-explorer.horizenlabs.io/
Voilà, tu as (à nouveau) quelques heures devant toi …
Génération des clés pour le staking
Une fois le node synchronisé avec EON, on peut générer les clés qui seront nécessaires pour le staking et pour accéder aux récompenses :
./scripts/forger/generate_keys.sh
Le script demande pour quelle chain on souhaite générer des clés puis affiche des informations à conserver précieusement !!
$ ./scripts/forger/generate_keys.sh
=== Checking all the requirements ===
What network would you like to generate the keys on 'eon' (mainnet) or 'gobi' (testnet):
1) eon
2) gobi
#? 1
You have selected: eon
Checking if the node is reachable...
Generated VRF Key Pair.
VRF Public Key : 077a630643a7962c4cac0e6eb9ec5b1e6c105b182ec1d45ca942a75150d8e70d00
VRF Private Key : 03b3a5a6091266dead46f45a30d821646959ca286c0c3b2700f55e0c7577bffa16077a630643a7962c4cac0e6eb9ec5b1e6c105b182ec1d45ca942a75150d8e70d00
Generated Block Sign Key Pair.
Block Sign Public Key : 1299365076853fc2ea837f03cd58e78f6ca2603f2b32b88551f7dee105a9ce54
Block Sign Private Key : 00e8f760c0cf4c21b9fda240112833abe2d6f09071a9025a88547e457a14c606aa1299365076853fc2ea837f03cd58e78f6ca2603f2b32b88551f7dee105a9ce54
Generated Ethereum Address Key Pair.
Ethereum Address : 0x504205be49b1920af14f5cd505e6ec1b889ac06c
Ethereum Private Key : 05a665b8558711816ce79f8ee8eac7487292b24ce3b493a2ed631e3b79c293c1d5
Ethereum Private Key for MetaMask : 0xa665b8558711816ce79f8ee8eac7487292b24ce3b493a2ed631e3b79c293c1d5
=== STORE ALL THESE VALUES IN A SAFE PLACE ===```
Pour le staking, on aura besoin des 2 clés VRF Public Key et Block Sign Public Key.
Ethereum Address indique l’adresse sur laquelle seront versés les revenus du forger node.
Pour gérer ce wallet, on doit en importer la clé privée donnée plus bas. Si on choisit de gérer les revenus du node via metamask, dans cet exemple on importera la clé 0xa665b8558711816ce79f8ee8eac7487292b24ce3b493a2ed631e3b79c293c1d5 pour avoir accès à l’adresse 0x504205be49b1920af14f5cd505e6ec1b889ac06c.
Le node est à présent opérationnel et prêt à recevoir ses stakes.
Le staking
Horizen fournit des outils facilitant le staking en 2 versions. Une version remix destinée à être uploadée et utilisée dans l’éditeur web Remix et une version js destinée à être utilisée avec NodeJS en local.
Pour creer des scripts et automatisations, on utilisera plutôt la version js, mais pour faire stake de temps en temps, la version remix est parfaite.
Le code est disponible ici : https://github.com/HorizenOfficial/eon-smart-contract-tools/
On télécharge un ZIP, on le décompresse et on uploade le contenu du dossier remix dans un wordkspace vierge sur Remix
Dans l’onglet Deploy and run transactions, on doit sélectionner « Injected Provider – Metamask » pour envoyer les transactions avec Metamask.
Note sur les frais
Le calcul des frais est erroné. Il est possible de forcer la valeur ou accepter celle proposée, les frais effectifs sont de toutes façons actuellement toujours inférieurs à 0.01 $ZEN comme on peut le voir sur la page du smart contract de staking sur l’explorer : https://eon-explorer.horizenlabs.io/address/0x0000000000000000000022222222222222222222
Fonctionnement des scripts Remix
Le plus simple des scripts pour vérifier que tout va bien est stakeOf.js qui retourne le nombre de $ZEN stakés pour l’adresse appelante. Il ne nécessite aucune modification. Clic droit sur le nom du fichier et Run :
Allez, on stake maintenant !
On y va ! On va utiliser le script delegate.js. Avant de l’exécuter, on doit modifier 3 lignes dans le script :
Ici, on mets le montant en $ZEN à staker :
const AMOUNT = "42";
Pour les 2 valeurs, on récupère les infos fournies par le script generate_keys.sh de tout à l’heure. Elles sont différentes pour tous les nodes. Utilisez les votres, bien sûr …
const YOUR_BLOCK_SIGN_PUBKEY = "1299365076853fc2ea837f03cd58e78f6ca2603f2b32b88551f7dee105a9ce54";
const YOUR_VRF_PUBKEY = "077a630643a7962c4cac0e6eb9ec5b1e6c105b182ec1d45ca942a75150d8e70d00";
Une fois les 3 valeurs modifiées, on enregistre le script et Run
On obtient en réponse des infos dans un json dont une, notamment, est très importante, c’est le stakeId. Qui sera nécessaire (dans cette version du staking) pour unstake. Notez là donc avec soin.
A noter : Ce stakeId peut être retrouvé grâce au script getPagedForgersStakesByUser.js qui liste l’intégralité des stakes d’une adresse :
Unstaking
A noter que dans la version actuellement en production du staking au moment de la rédaction de ce tuto, on devait activer eth_sign dans Metamask pour pouvoir utiliser les fonctions de unstaking. Pour l’activer, dans les Paramètres, suivre Paramètres avancés et activer Requêtes Eth_sign le temps de faire les opérations de unstaking.
Pour unstaker, on utilise le script withdraw.js en modifiant la variable STAKE_ID :
const STAKE_ID = "0x28bff643e1d1141ac24c0835837b584f9975617fbbb3714e86fbcab5a578ce5f";
Une signature et une transaction plus tard, c’est de retour dans le wallet.
Conclusion
Voila ce tutoriel de découverte des Forger nodes et du staking sur Horizen EON est maintenant terminé. Si tu as eu un souci à le suivre, tu peux me contacter sur twitter (euh X, pardon) et sur le Discord Horizen !
Liens
- Portail Horizen EON : https://eon.horizen.io/
- Plus de contenu Horizen sur Mes Cryptos : https://mescryptos.fr/tag/horizen/