Une introduction à Geth et à l'exécution de nœuds Ethereum –
Dans cet article, nous verrons quels sont les nœuds d'Ethereum, et explorons l'un des plus populaires, appelé Geth.
Pour communiquer avec la blockchain, nous devons utiliser un client blockchain . Le client est un logiciel capable d'établir un canal de communication p2p avec d'autres clients, de signer et de diffuser des transactions, d'extraire, de déployer et d'interagir avec des contrats intelligents, etc. Le client est souvent appelé nœud .
La définition formelle de la fonctionnalité qu'un noeud Ethereum doit suivre est définie dans le papier jaune ethereum . Le papier jaune définit les fonctions requises des nœuds sur le réseau, l'algorithme d'exploration de données, la clé privée / publique ECDSA . Il définit l'ensemble des fonctionnalités qui rendent les nœuds entièrement compatibles avec les clients Ethereum
Sur la base du papier jaune, n'importe qui peut créer sa propre implémentation d'un nœud Ethereum dans la langue de son choix.
Liste complète des clients peut être vu ici .
Les clients les plus populaires jusqu'à présent sont Geth et Parité . Les implémentations diffèrent principalement par le langage de programmation de choix – où Geth utilise Golang et Parity utilise Rust.
Puisque Geth est l'implémentation client la plus populaire actuellement disponible, nous allons nous concentrer dessus pour le moment.
Types de nœuds [19659009] Lorsque vous rejoignez le réseau Ethereum, vous avez la possibilité d'exécuter
différents types de nœuds. Les options actuellement sont:- Nœud lumineux
- Nœud complet
- Nœud d'archivage
Un nœud d'archive est un cas particulier d'un nœud complet, donc nous n'entrerons pas dans les détails. L'un des meilleurs résumés sur les types de nœuds que j'ai trouvés est sur Stack Exchange :
En général, nous pouvons diviser le logiciel nœud en deux types: nœuds complets et nœuds légers. Les nœuds complets vérifient le bloc diffusé sur le réseau. C'est-à-dire, ils s'assurent que les transactions contenues dans les blocs (et les blocs eux-mêmes) suivent les règles définies dans les spécifications Ethereum. Ils conservent l'état actuel du réseau (tel que défini selon les spécifications Ethereum).
Les transactions et les blocs qui ne respectent pas les règles ne sont pas utilisés pour déterminer l'état actuel du réseau Ethereum. Par exemple, si A tente d'envoyer 100 ether à B mais que A a 0 éthers et qu'un bloc inclut cette transaction, les nœuds complets se rendront compte que cela ne suit pas les règles d'Ethereum et rejettera ce bloc comme invalide. En particulier, l'exécution de contrats intelligents est un exemple de transaction. Lorsqu'un contrat intelligent est utilisé dans une transaction (par exemple, l'envoi de jetons ERC-20), tous les nœuds complets doivent exécuter toutes les instructions pour s'assurer qu'ils arrivent à l'état correct et convenu de la blockchain.
Il y a plusieurs façons d'arriver au même état. Par exemple, si A avait 101 éther et en donnait une centaine à B en une transaction payant 1 éther pour le gaz, le résultat final serait le même que si A envoyait 100 transactions de 1 éther chacune à B en payant 0,01 éther par transaction ( ignorant qui a reçu les frais de transaction). Pour savoir si B est maintenant autorisé à envoyer 100 éther, il suffit de savoir quel est le solde actuel de B. Les nœuds complets qui conservent l'intégralité de l'historique des transactions sont appelés nœuds d'archivage complets. Ceux-ci doivent exister sur le réseau pour qu'il soit sain.
Les nœuds peuvent également choisir de se débarrasser des anciennes données; si B veut envoyer 100 éther à C, peu importe comment l'éther a été obtenu, seulement que le compte de B contient 100 éther. En revanche, les noeuds légers ne vérifient pas chaque bloc ou transaction et peuvent ne pas avoir une copie de l'état actuel de blockchain. Ils s'appuient sur des nœuds complets pour leur fournir des détails manquants (ou manquent simplement de fonctionnalités particulières). L'avantage des nœuds de lumière est qu'ils peuvent démarrer et fonctionner beaucoup plus rapidement, peuvent fonctionner sur des dispositifs plus computationnels / à mémoire limitée, et ne consomment pas autant de stockage. En revanche, il existe un élément de confiance dans les autres nœuds (il varie en fonction du client et des méthodes / heuristiques probabilistes peuvent être utilisées pour réduire les risques). Certains clients complets incluent des fonctionnalités pour une synchronisation plus rapide (par exemple, la synchronisation de Warp de Parity)
Installation de Geth
Les instructions d'installation de Geth sur différentes plateformes (Windows, macOS, Linux) peuvent être trouvées ici . La liste est assez complète et mise à jour, donc je ne reviendrai pas dessus dans l'article.
Running Geth
Pour créer un noeud de Geth, la seule chose que vous devez faire est d'aller à votre fenêtre de terminal et lancez geth
. Lorsque vous le faites, vous devriez obtenir une sortie similaire à celle-ci:
➜ ~ geth
INFO [06-03|11:03:13] Nombre maximal de pairs ETH = 25 LES = 0 total = 25
INFO [06-03|11:03:13] Démarrage d'une instance de noeud pair-à-pair = Geth / v1.8.10-stable / darwin-amd64 / go1.10.2
INFO [06-03|11:03:13] Le cache alloué et le fichier gère la base de données = / Users / mjvr / Bibliothèque / Ethereum / geth / chaindata cache = 768 handles = 128
INFO [06-03|11:03:13] Écriture du bloc de la genèse du réseau principal par défaut
INFO [06-03|11:03:14] Persisté trie de la mémoire des nœuds de la base de données = 12356 taille = 2.34mB temps = 48.31016ms gcnodes = 0 gcsize = 0.00B gctime = 0s livenodes = 1 vivre = 0.00B
INFO [06-03|11:03:14] Configuration de chaîne initialisée config = "{ChainID: 1 Homestead: 1150000 DAO: 1920000 DAOSupport: vrai EIP150: 2463000 EIP155: 2675000 EIP158: 2675000 Byzance: 4370000 Constantinople: Moteur: ethash}"
INFO [06-03|11:03:14] Stockage sur disque activé pour les caches ethash dir = / Utilisateurs / mjvr / Bibliothèque / Ethereum / geth / ethash count = 3
INFO [06-03|11:03:14] Stockage sur disque activé pour les DAG ethash dir = / Users / mjvr / .ethash count = 2
INFO [06-03|11:03:14] Initialisation du protocole Ethereum versions = "[63 62]" network = 1
INFO [06-03|11:03:14] Numéro d'en-tête local le plus récent = 0 hash = d4e567 ... cb8fa3 td = 17179869184
INFO [06-03|11:03:14] Numéro de bloc complet local le plus récent = 0 hash = d4e567 ... cb8fa3 td = 17179869184
INFO [06-03|11:03:14] Numéro de bloc rapide local le plus récent = 0 hash = d4e567 ... cb8fa3 td = 17179869184
INFO [06-03|11:03:14] Transactions de journal des transactions locales régénérées = 0 accounts = 0
INFO [06-03|11:03:14] Lancement du réseau P2P
INFO [06-03|11:03:16] UDP écouteur en haut self = enode: // a4cb08519bc2bceecb8ad421871c624d5212888653bbaee309fda960f3c87ca7aa9855ee14684d521836ae88ad1986b8ca944348e976760d2bd1247ed3ca7628 @ [::]: 30303
INFO [06-03|11:03:16] RLPx écouteur up = enode: // a4cb08519bc2bceecb8ad421871c624d5212888653bbaee309fda960f3c87ca7aa9855ee14684d521836ae88ad1986b8ca944348e976760d2bd1247ed3ca7628 @ [::]: 30303
INFO [06-03|11:03:16] Point de terminaison IPC ouvert url = / Users / mjvr / Library / Ethereum / geth.ipc
Après cela, vous devriez voir de nouvelles lignes apparaître périodiquement, où Geth dit "Importer un nouvel état" ou "Importer de nouveaux en-têtes de blocs" ou "Importer de nouveaux reçus". L'état, les en-têtes de blocs et les transactions font partie de L'arbre d'Ethereum essaie : ils doivent être téléchargés afin de synchroniser votre noeud avec la chaîne de blocs Ethereum.
C'est un processus qui peut prendre beaucoup de temps, donc l'une des options que vous avez est d'exécuter un noeud léger comme ceci;
geth --light
Ce que Geth doit faire maintenant, c'est seulement extraire les derniers en-têtes de bloc et compter sur d'autres nœuds complets pour valider les transactions grâce à l'utilisation de preuves de merkle
Accéder à une console Geth
vous avez créé un noeud, vous pouvez y accéder en ouvrant un nouvel onglet dans votre terminal et en exécutant ce qui suit:
geth attach
Ceci connectera une console Geth – qui est un environnement Javascript pour communiquer avec la blockchain – à votre nœud en cours d'exécution. Cela peut être fait à la fois en mode client complet et en mode léger.
Après avoir ouvert la console, tapez ceci:
web3.eth.blockNumber
Vous devriez obtenir une sortie sous forme de nombre (par exemple 5631487) qui représente le numéro de bloc actuel du réseau Ethereum
Créer un nouveau compte
Pour utiliser la blockchain, vous devez avoir un compte. Avec Geth, vous pouvez le faire en lançant ce qui suit dans votre terminal:
geth account new
Après l'avoir fait, il vous demandera le mot de passe dont vous aurez besoin pour protéger votre compte. Assurez-vous d'utiliser un mot de passe sécurisé et de le stocker en toute sécurité.
Ce que fait Geth quand vous lancez geth account new
c'est mettre à jour un fichier dans le répertoire Geth (répertoire où Geth stocke toutes les données nécessaires , y compris les blocs et les en-têtes). Les emplacements sont (par plate-forme):
- macOS:
~ / Bibliothèque / Ethereum
- Linux:
~ / .ethereum
- Windows:
% APPDATA% Ethereum
Accès à Geth à partir d'autres clients
Lorsque vous démarrez Geth, le client démarre automatiquement un serveur RPC sur le port 8545
. Vous pouvez accéder au serveur RPC et à ses méthodes sur ce port en vous connectant à localhost: 8545
avec une bibliothèque comme web3js
ou web3j
ou appelez-le manuellement avec curl
ou wget
.
Pour en savoir plus sur la connexion avec des outils externes tels que ceux d'une instance Geth (soit privée lors du lancement de votre propre blockchain, soit public comme dans les instructions ci-dessus) voir ce post .
Conclusion
Dans cette courte introduction nous avons couvert Geth, les types de nœuds Ethereum, et leur but. Vous pouvez maintenant exécuter votre propre noeud Geth et l'améliorer avec des outils tiers. Dans les prochains articles, nous couvrirons les réseaux privés (votre propre blockchain Ethereum avec Geth) et bien plus encore.