Comment synchroniser un nœud Ethereum sans faire les erreurs que j'ai faites

Lorsque j'ai commencé à développer sur la plate-forme Ethereum, la synchronisation d'un nœud était l'une des premières choses que j'ai faites. Sans personne pour me tenir la main et nulle part où consolider toutes les erreurs courantes que j'ai rencontrées, j'ai perdu des semaines à synchroniser un nœud. C'était un tel mal de tête que j'ai presque abandonné.

Ne pas connaître la terminologie ne faisait que rendre les choses plus difficiles.

Et donc, dans cet article, je souhaite consolider toutes les erreurs courantes que vous pourriez rencontrer et expliquer les raisons de chaque étape lors de la synchronisation d'un nœud. J'espère que vous n'aurez pas une expérience aussi désagréable que moi.

Une introduction rapide

Dans Ethereum, les développeurs créent des éléments d'une application qui s'exécutent sur le réseau. Ce sont des contrats intelligents . Bien que vous puissiez les déployer manuellement sans synchroniser avec un nœud Ethereum, à long terme, il est plus pratique pour le processus de développement de se synchroniser (en particulier lorsque nous voulons utiliser des cadres de développement comme Truffle).

Pour synchroniser un nœud Ethereum, nous aurons besoin du logiciel suivant:

  • Geth - Client pour un nœud Ethereum.
  • Ethereum Wallet - Interface utilisateur pour un nœud Ethereum.

Commençons.

Installez Geth

Pour télécharger Geth, rendez-vous ici pour les utilisateurs Windows. Cliquez ensuite sur le bouton «Geth pour Windows».

Pour les utilisateurs de MacOS, je vous recommande de télécharger en utilisant homebrew. Vous pouvez le faire avec les commandes suivantes:

brew tap ethereum/ethereumbrew install ethereum

Reportez-vous aux instructions de Geth pour plus de détails.

Vérifiez que Geth est correctement installé en tapant geth versionle terminal (MacOS) ou PowerShell (Windows).

Installez le portefeuille Ethereum

Nous appelons l'interface graphique qui interagit avec le réseau le «portefeuille». Vous pouvez trouver de nombreux portefeuilles différents pour Ethereum avec une recherche rapide sur Google (tels que Parity, Jaxx et MyEtherWallet). J'aime personnellement utiliser Ethereum Wallet. Il a une interface conviviale, et je suis également un peu biaisé car il est développé par Ethereum lui-même.

Vous pouvez trouver le programme d'installation ici.

Remarque: je préfère Ethereum Wallet à Mist . Mist est essentiellement un navigateur qui rend des applications décentralisées (dApps) et des sites Web.

Pour le développement d'un contrat intelligent, nous n'aurons besoin que du portefeuille Ethereum.

Mainnet vs Testnet

Dans Ethereum, il existe deux réseaux principaux: le réseau principal et le réseau de test.

Le réseau principal est utilisé pour effectuer des transactions avec de l'éther réel. La valeur de l'Ether est liée à la monnaie fiduciaire réelle via des échanges de crypto-monnaie.

En tant que développeurs, nous ne voulons pas exécuter de tests d'application avec de l'argent réel. C'est à cela que sert le testnet.

Nous appelons le testnet Ropsten .

Exécutez le portefeuille Geth et Ethereum

Lorsque vous développez un contrat intelligent, vous devez d'abord synchroniser le testnet. Nous n'aurons besoin de synchroniser le réseau principal que lorsque nous serons prêts à déployer.

Vous aurez besoin d'environ 30 Go d'espace de stockage pour synchroniser un testnet. Comme il y a plus de transactions sur le réseau principal, vous aurez besoin d'environ 100 Go pour synchroniser un réseau principal.

Remarque: certains disent que vous avez besoin d'un stockage SSD pour une écriture rapide afin que la synchronisation puisse rattraper le dernier bloc. Personnellement, je trouve que le stockage sur disque dur est correct. Cependant, si j'avais le choix, j'utiliserais certainement le stockage SSD.

Pour les utilisateurs Windows

Pour un accès facile, je vous recommande de créer un dossier pour stocker la blockchain. Par exemple, «C: \ EthereumTestnet».

Après avoir créé le dossier, essayez d'exécuter la commande suivante:

geth — testnet — data-dir=”C:\EthereumTestnet” — rpc — rpcapi eth,web3,net,personal

Edit: Il semble que certains arguments aient changé. Si vous rencontrez une telle erreur «indicateur fourni mais non défini: -data-dir», essayez de remplacer le nom de l'argument par - datadir par data-dir.

L'argument --testnetspécifie que nous voulons synchroniser avec le réseau Ropsten. Ainsi, pour synchroniser le réseau principal, il vous suffit de supprimer l'argument --testnetet de modifier le répertoire de données. Par exemple:

geth — data-dir=”C:\EthereumMainnet” — rpc — rpcapi eth,web3,net,personal

L' --rpcargument active le serveur HTTP-RPC. Cela nous permet d'utiliser certains services, tels que ce qui est indiqué dans --rpcapi eth,web3,net,personal.

Après avoir entré la commande, vous devriez voir quelque chose comme ceci:

Afin de ne pas corrompre la blockchain, en particulier après de nombreuses heures de synchronisation, vous ne devez PAS fermer l'invite de commande brusquement. Arrêtez toujours la synchronisation en appuyant sur Ctrl + C et attendez que Geth arrête le programme pour vous.

Cependant, il est difficile de se souvenir de tous les services de commande et de RPC dont vous avez besoin. C'est pourquoi je suggère de créer un raccourci ou un fichier batch pour vous aider.

Créez simplement un fichier à l'aide de n'importe quel éditeur de texte et enregistrez-le en tant que fichier .bat . Par exemple, RunGethTestnet.bat (le nom n'est pas important). Copiez et collez la commande dans le fichier et enregistrez-le. La prochaine fois que vous devrez exécuter Geth pour Ropsten, double-cliquez simplement sur le fichier.

Après avoir exécuté Geth, nous devons exécuter le portefeuille Ethereum. Comme nous voulons que l'interface localise l'emplacement exact où nous avons synchronisé nos fichiers à l'aide de Geth, nous l'exécutons depuis la console.

Semblable à Geth, j'ai enregistré un fichier de commandes pour celui-ci également avec un exemple de commande, comme celui ci-dessous:

Notez que votre commande peut sembler un peu différente de la mienne, car vous pourriez stocker votre application dans un répertoire différent.

Vous pouvez également ajouter l'application à votre chemin.

L'argument --node-datadir="C:\EthereumTestnet"indique où j'ai stocké ma chaindata, qui est exactement la même que celle spécifiée pour Geth.

Pour les utilisateurs Mac

C'est légèrement plus simple pour MacOS, car les chaindata sont téléchargées automatiquement dans la bibliothèque et ne nous sont pas cachées. Donc, nous n'avons pas besoin de spécifier le répertoire de données.

Néanmoins, je recommande de créer un fichier de script pour faciliter l'exécution de Geth et Ethereum Wallet.

Remarque: Geth doit fonctionner avant Ethereum Wallet .

Exécuter Ethereum Wallet seul lancera automatiquement le processus de synchronisation car il exécutera automatiquement un client Geth en arrière-plan. Ceci est convivial, mais n'active pas les services RPC que nous voulons utiliser. Ainsi, nous voulons nous assurer que RPC est activé à la fois dans l'exécution de notre portefeuille Geth et Ethereum.

Quelques notes

  1. Le processus de synchronisation est très long et peut prendre jusqu'à 2 à 3 jours. Soyez patient et envisagez de laisser votre ordinateur allumé pendant la nuit.
  2. La vitesse de synchronisation dépend de votre vitesse Internet, du nombre de vos pairs et de la vitesse d'écriture de votre lecteur de stockage.
  3. Comme les données sont stockées dans des blocs et liées entre elles, la corruption dans un bloc peut corrompre l'ensemble des données chaindata. Cela peut potentiellement gaspiller vos efforts en attendant que le nœud se synchronise. Par conséquent, il est très important d'arrêter correctement votre Geth. Dans certains cas, vous souhaiterez peut-être revenir en arrière. Mais il vaut mieux prévenir que guérir ici.
  4. La barre de progression de votre portefeuille Ethereum n'est PAS précise. S'y fier vous donnera beaucoup d'anxiété et de frustration.
  5. Geth fonctionne sur le port 30303 pour une écoute externe.
  6. Le port par défaut utilisé pour la communication interne, par exemple entre votre portefeuille et Geth, est 8545.

Assurez-vous que votre port vers le client Geth est ouvert

Il est vraiment important de s'assurer que la connexion à votre client Geth n'est pas limitée. Un énorme mal de tête que j'ai rencontré était de laisser mon pare-feu limiter le nombre de connexions que je pouvais avoir via le client Geth.

Vous pouvez repérer ce problème en regardant le nombre de pairs . S'il reste constamment bas à environ 1 à 3 pairs (pendant au moins une demi-heure), il y a de fortes chances que votre connexion soit limitée. Une fourchette saine se situe au-dessus de 5 pairs.

Utilisateurs de MacOS

Lorsque vous exécutez Geth, une notification vous invite à autoriser la connexion. Eh bien, bien sûr, cliquez sur «Autoriser.

Pour vérifier, allez dans Préférences système> Système et confidentialité.

Sous l' onglet Pare-feu , cliquez sur Options du pare-feu .

Utilisateurs Windows

Pour ouvrir votre port, accédez à Panneau de configuration> Système et sécurité> Pare-feu Windows Defender.

Cliquez sur Paramètres avancés . Sur le panneau latéral, cliquez sur Règles entrantes .

Les ports entrants que vous souhaitez ouvrir sont TCP et UDP 30303. J'ai donc créé une règle pour TCP 30303 et une autre pour UDP 30303.

Vous devrez peut-être également ouvrir vos ports sortants pour TCP 30303.

Notez que tout pare-feu / antivirus tiers peut également limiter vos connexions, alors assurez-vous de le configurer en conséquence.

Joindre à Geth

Pour récupérer plus d'informations sur votre nœud, vous pouvez vous attacher au client Geth et exécuter des commandes avec lui à l'aide des services RPC.

Voici un moyen simple de vérifier l'état de votre synchronisation: connectez-vous au client en entrant la commande suivante sur un terminal / console séparé.

geth attach //127.0.0.1:8545

Encore une fois, vous voudrez peut-être le stocker dans un fichier batch / script pour votre propre convenance.

Après avoir exécuté la commande, vous devriez voir quelque chose comme ça.

Tapez web3.ethet vous devriez voir beaucoup d'informations. Pour récupérer des informations spécifiques sur la synchronisation, saisissez web3.eth.syncingplutôt.

Comme vous pouvez le voir, la barre de progression située en haut du portefeuille Ethereum est simplement une comparaison entre le bloc le plus élevé et le bloc actuel . Comme le bloc le plus élevé connu de votre ordinateur n'est peut-être pas le bloc le plus élevé, la barre de progression peut ne pas refléter la progression réelle.

En fait, le plus haut bloc et les états connus continueront d'augmenter à mesure que vous synchronisez vos nœuds.

Quelques derniers points

Comme la technologie évolue rapidement, utilisez toujours la version stable du client et du portefeuille pour éviter de vous donner plus de maux de tête.

Notez également qu'il existe toujours une solution de contournement pour tous les problèmes que vous rencontrez. Lorsque vous rencontrez un problème de synchronisation, vous pouvez essayer de rechercher des solutions car vous n'êtes probablement pas le premier à faire face au même problème.

Et rappelez-vous toujours que vous n'avez pas besoin de synchroniser un nœud pour développer un contrat intelligent. Cela ne fait que faciliter votre compréhension de l'environnement ainsi que votre processus de développement. Alors, ne vous en faites pas si vous rencontrez des problèmes si tôt dans le processus de développement.

Pour plus d'articles de ce type, suivez-moi ou visitez mon site - Le point de vue d'un développeur.