Exécution d'un nœud complet Ethereum sur un RaspberryPi 4 (modèle B) – Ethereum comment trader

  • Seymour Duncan SH-1B-G4C - 59 Model Chevalet Gold
    59 Model Sh-1B-G4C- Applications : Country, Jazz, Blues, Funk, Classic Rock Et Heavy Rock.- Position : Chevalet- Aimant : Alnico V- Split : Oui- Actif : Non- Nombre Conducteurs : 4- Résistance : 8.13 K- Pic: 6 Khz- Finition : Gold- Autres : Anti Interférences
  • Seymour Duncan SH-1B-N4C - 59 Model - Chevalet 4 Cond Nickel
    59 Model SH-1B-N4C- Applications : Country, jazz, blues, funk, classic rock et heavy rock.- Position : Chevalet- Aimant : Alnico V- Split : Oui- Actif : Non- Nombre conducteurs : 4- Résistance : 8.13 k- Pic: 6 KHz- Finition : Nickel- Autres : An
  • Seymour Duncan SH-1B-Z4C - 59 Model Chevalet Zebra
    59 Model Sh-1B-Z4C- Applications : Country, Jazz, Blues, Funk, Classic Rock Et Heavy Rock.- Position : Chevalet- Aimant : Alnico V- Split : Oui- Actif : Non- Nombre Conducteurs : 4- Résistance : 8.13 K- Pic: 6 Khz- Finition : Zebra- Autres : Anti Interférences
?>

introduction

Ma femme m'a récemment offert le dernier Raspberry Pi 4 (modèle B) 4 Go. J'étais donc très heureux d'essayer d'en synchroniser un Ethereum hoche la tête sur la carte unique (SBC) d'un ordinateur.

La synchronisation d'Ethereum a toujours été pénible pour de nombreuses personnes, car il s'agit d'un processus complexe avec plusieurs options, y compris différents modes d'authentification qui nécessitent des paramètres différents qui peuvent coûter beaucoup d'argent et prendre des semaines à synchroniser.

Voici un résumé des différentes options disponibles pour synchroniser la blockchain Ethereum avec Geth (Go-Ethereum):

Bloquer le mode de synchronisation de chaîne[[[[--syncmode]:

  • plein synchroniser: La synchronisation complète télécharge toutes les données (têtes de bloc et organes de bloc), traite l'ensemble de la blockchain un lien à la fois et remplace toutes les transactions qui se sont jamais produites dans l'histoire (traitement des transactions et vérification PoW). Cette méthode est la plus traditionnelle et la plus stable mais peut prendre très longtemps (jusqu'à quelques semaines) et nécessite une machine plus puissante. À la fin du processus, le nœud est un nœud complet.

  • vite synchroniser: La synchronisation rapide récupère également toutes les données (têtes de bloc et moyens de bloc) mais échange la puissance de traitement pour l'utilisation de la bande passante. Au lieu de traiter toutes les transactions qui se sont déjà produites, une synchronisation rapide récupère tous les reçus de transaction et l'intégralité de la base de données de pointe et effectue une vérification PoW.
    Lorsque la chaîne atteint un état ultérieur (tête – 1024 blocs), le geth passe en mode de synchronisation complète, importe les blocs restants et les traite comme dans la synchronisation classique (complète) pour obtenir un nœud complet.

  • lumière synchroniser: Le mode Light est synchronisé directement avec les derniers blocs, ne stocke pas la blockchain entière dans la base de données. Contrairement à complet et rapide, ce n'est pas un nœud complet car il ne stocke pas l'intégralité de la blockchain mais uniquement les en-têtes, et cela dépend de l'ensemble des nœuds. Mais cette approche, moins sécurisée et plus adaptée à l'IoT / mobile, n'utilise que 100 Mo d'espace.

Mode d'ajustement du spam Blockchain[[[[--gcmode]:
La collecte des déchets est utilisée pour éliminer les anciennes expériences et économiser de l'espace.

  • - gcmode plein signifie que la récupération de place ne peut se souvenir que des 128 dernières tentatives. Cela économise beaucoup d'espace et il faut moins de 200 Go à ce stade (septembre 2019) pour exécuter un nœud complet dans cette installation.

  • - archive gcmode désactive la collecte des déchets et conserve tous les blocs de données d'état historiques après les blocs d'Ethereum depuis Genesis. (rappelez-vous qu'il faut plus de 2,3 To d'espace). Mais très peu de gens (comme Block Explorers) ont besoin d'un nœud d'archive.

Dans ce guide, nous allons suivre le deuxième mode de synchronisation, vite (avec plein garbage collection), pour exécuter un nœud complet sur un RaspberryPi 4. Certaines personnes pourraient se demander quels sont les avantages de l'exécution de votre propre nœud. Voici quelques exemples:

  • Vous posséderez une pile Ethereum fiable sur laquelle vous pouvez compter pour gérer vos actifs et envoyer des transactions au réseau lui-même (les nœuds distants sont généralement fiables mais contrôlés par des tiers et généralement plus lourds).
  • Vous pouvez aider à sécuriser le réseau; plus il y a de nœuds indépendants, plus il y a de copies de blockchain et plus elle est résistante.
  • Vous souhaitez rendre le réseau plus rapide et plus sécurisé; plus il y a de nœuds, plus la latence des blocs de division est faible et plus il y a de copies de la blockchain.
  • C'est amusant!

Matériel

Nous commençons par un exemple d'installation utilisant un Raspberry Pi 4, un SSD et tous les composants nécessaires. Mais vous pouvez essayer des solutions alternatives et équivalentes qui devraient fonctionner en fonction des exigences suivantes:

  • Mémoire: 4 Go de RAM DDR3
  • SSD rapide (recommandé d'utiliser le SSD NVME si la carte a une interface PCIe – ce n'est pas le cas avec RPi4)
  • Internet haut débit
Planche

Comme mentionné, la carte est la dernière Raspberry 4 (modèle B) – 4 Go avec les spécifications suivantes:

Image de l'article

Image de l'article

Prix ​​conseillé: 55 $ US

carte SD

Pour héberger le système d'exploitation, j'utilise un microSD SanDisk 16 Go Ultra

Image de l'article

Prix ​​conseillé: 5 $

Disque SSD

Pour stocker la grande base de données d'état Ethereum, qui nécessite des performances d'E / S disque très élevées, nous connectons un Samsung SSD T5 (500 Go) à la carte via USB3.0.

Image de l'article

Il est recommandé d'utiliser au moins un SSD de 500 Go car la taille réelle du réseau principal Ethereum après une synchronisation rapide est d'environ 200 Go. Cela devrait vous prendre quelques années avant de reconstruire le tout sur un disque plus grand.

Prix ​​conseillé: 90 $

source de courant

Enfin, nous utilisons une alimentation USB-C de 3,5 A pour activer SBC.

Prix ​​conseillé: 10 $

  • Si vous souhaitez vous connecter à Internet via Ethernet, vous avez besoin d'un câble Ethernet

  • L'installation sans tête peut être difficile pour les débutants, il est donc une fois plus facile de connecter le Pi à un moniteur via HDMI (mini) et un clavier.

  • Un dissipateur thermique est recommandé pour garder le processeur au frais et réduire le risque de panne matérielle due à une surchauffe.

  • Un étui pour protéger la planche.

Coût total

Le coût total de cette installation est 160 $ avec un coût récurrent annuel estimé à 10 $ / an pour l'électricité.

ComposantCoût
Raspberry Pi 4 (modèle B) 4 Go55 $ US
MicroSD SanDisk Ultra Class 10 16 Go5 $
Samsung SSD T5 (500 Go)90 $
Alimentation USB-C 3,5 A10 $
160 $

Image de l'article

Résultat de l'installation matérielle

Installation

Installer et configurer le système d'exploitation

Dans la première partie de l'installation, nous installerons Raspbian Système d'exploitation Linux et configurez-le de manière fiable et sécurisée.

1. Téléchargez la dernière version de Raspbian Linux OS pour RaspberryPi

Accédez à la page de téléchargement et téléchargez Raspbian Buster Lite.

  • Raspbian est un système d'exploitation informatique basé sur Debian pour Raspberry Pi.
  • Buster Lite est une version minimale de Raspbian qui ne contient aucun ordinateur de bureau ou logiciel recommandé. On peut commencer par une installation très propre, légère et fraîche avec cette version.

2. Déballez l'archive pour obtenir l'image 2019/07/10-raspbian-buster lite.img

3. Connectez une carte SD (au moins 8 Go) à votre ordinateur portable

4. Utilisez Etcher et flashez l'image sur la carte SD

Téléchargez Etcher pour flasher les images du système d'exploitation sur des cartes SD et des lecteurs USB, en toute sécurité et facilement.

Lancez Etcher, sélectionnez d'abord l'image extraite de Raspbian, sélectionnez Média (carte SD) et cliquez sur Flash.

Image de l'article

Image de l'article

5. Après avoir clignoté, accédez au dossier /démarrage de la carte SD et créer un fichier vierge SSH

$ cd /Médias/<pi>/démarrage
$ touch ssh

6. Déconnectez la carte SD de votre ordinateur portable et connectez-la au Raspberry Pi

7. Connectez l'alimentation au Raspberry Pi et à un câble Ethernet

8. Déterminez son adresse IP (le nom de la valeur par défaut de la machine est Tarte aux framboises)

Votre routeur réseau doit fournir la liste de tous les appareils connectés via Ethernet et WIFI.

Image de l'article

Exemple – VirginMedia Hub

9. Connectez-vous via SSH avec l'utilisateur par défaut pi et entrez le mot de passe par défaut framboise

Nous avons activé ssh par défaut lors de l'étape 5, il est donc possible de se connecter à distance via SSH à partir d'un terminal Linux (ou d'utiliser Putty si vous utilisez Windows) au système.

$ ssh pi @192.1680,00,38
pi@192.1680,00,38mot de passe: framboise
Linux raspberrypi 4.190,57-v7l+ #1244 SMP Jeudi Noël 4 18:48:07 BST 2019 armv7l

Les programmes inclus avec Debian GNOU/Le système Linux est un logiciel libre;
les conditions exactes de distribution pour chaque programme est décrit dans le
fichiers individuels dans /usr/partager/doc

10. Modifiez le mot de passe par défaut de l'utilisateur pi

Le mot de passe par défaut configuré par Raspbian est bien connu, il est donc fortement recommandé de le changer pour autre chose:

$ passwd
Changer le mot de passe pour pi.
Mot de passe actuel: framboise
Nouveau mot de passe: $3Cret
Récrire Nouveau Mot de passe: $3Cret
passwd: le mot de passe a été mis à jour

11. Installez VIM en tant qu'éditeur de ligne de commande

$ sudo apt install vim

11. Modifiez le nom d'hôte

Le nom d'hôte par défaut attribué à Raspbian est Tarte aux framboises, cela peut prêter à confusion si vous avez plusieurs périphériques, il est donc recommandé de renommer la machine avec un nom d'hôte plus spécifique lié à son objectif.

Ouvrez le dossier / Etc / hostname et remplacez le contenu par Geth:

$ sudo vi /etc/nom d'hôte

Puis changez / etc / hosts et remplacer la ligne 127.0.1.1 raspberrypi passé 127.0.1.1 geth

$ sudo vi /etc/hôtes

12. Mettez à niveau le système d'exploitation

Mettez à niveau le système pour obtenir les derniers correctifs.

$ sudo apt-avoir mise à jour && sudo apt-avoir améliorer

13. Configurer une IP statique

Nous allons maintenant configurer l'adresse IP statique 192.168.0.24 de sorte que le routeur n'attribue pas d'IP différente à chaque redémarrage du Raspberry PI.
Vous pouvez le faire via la configuration DHCP de votre routeur ou directement dans la configuration réseau de la machine ou même les deux.

Attribuer une adresse IP statique au Raspberry Pi avec un routeur

Accédez à la console de votre routeur réseau et configurez l'adresse IP statique dans la section DHCP.

Image de l'article

Exemple – VirginMedia Hub

b. Attribuez une adresse IP statique à Raspberry Pi avec dhcpcd

Modifier le fichier /etc/dhcpcd.conf et ajoutez les lignes suivantes à la fin

$ sudo vi /etc/dhcpcd.conf

interface eth0
statique adresse IP=192.1680,00,24/24
statique routeurs=192.1680,00,1
statique nom_domaine_serveurs=192.1680,1000,4

Changer l'interface eth0, l'adresse du routeur et les serveurs DNS selon votre configuration réseau.

14. Redémarrez

Redémarrez la machine et connectez-vous avec l'adresse IP statique et le nouveau mot de passe.

$ sudo redémarrer

(... attendez quelques secondes)

$ ssh pi @192.1680,00,24
pi@192.1680,00,24mot de passe: <Nouveau Mot de passe>

Montez le SSD

Dans la deuxième partie de ce guide, nous allons monter un SSD connecté à l'un des deux ports USB3.0.

Comme expliqué, seuls les SSD sont suffisamment rapides (vitesse d'E / S) pour synchroniser Geth avec le réseau principal Ethereum.

Image de l'article

1. Connectez le SSD au port USB3.0 (bleu)

2. Recherchez le nom du disque (lecteur)

Exécutez la commande fdisk -l pour répertorier tous les disques connectés au système (y compris la RAM) et essayer d'identifier le SSD. Le disque qui a une taille de 465,6 Gio et un nom de modèle SSD portable T5 et est situé dans / Dev / sda est notre SSD.

$ sudo fdisk -l
Disque /dev/ram0: 4 MiB, 4194304 octets, 8192 secteurs
unités: secteurs de 1 * 512 = 512 octets
Secteur Taille (logique/physique): 512 octets / 4096 octets
je/O Taille (le minimum/optimal): 4096 octets / 4096 octets

(...)

Disque /dev/SDA: 465,8 GiB, 500107862016 octets, 976773168 secteurs
modèle de disque: portable SSD T5 
unités: secteurs de 1 * 512 = 512 octets
Secteur Taille (logique/physique): 512 octets / 512 octets
je/O Taille (le minimum/optimal): 512 octets / 33553920 octets
Diskmärketyp: dose
Diskidentifierare: 0x41d0909f

3. Créez une partition

Si votre disque dur est neuf et vient de sortir du paquet, vous devez créer une partition.

$ sudo mkfs.ext4 /dev/SDA
mke2fs 1,440,5 (15-décembre-2018)
/dev/sda contient un système de fichiers ext4
le plus récemment monté sur /mnt/ssd lun sept  9 21:06:47 2019
Continuez quand même? (y,N) y
Créer un système de fichiers avec 58609664 4k blocs et 14655488 inodes
Système de fichiers UUID: 5c3a8481-682c-4834-9814-17dba166f591
Sauvegardes Superblock stockées sur des blocs: 
    32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208, 
    4096000, 7962624, 11239424, 20480000, 23887872

Attribuer des tables de groupe: Terminé
Écrire des tables d'inode: Terminé
Créer journal (262144 bloquer): 
Terminé
Écrivez de superbes blocs et des informations de publication de système de fichiers: Terminé

4. Installez le disque dur manuellement

Vous pouvez monter le disque manuellement dans le dossier / Mnt / SSD.

$ sudo mkdir /mnt/SSD
$ sudo chown -R pi:pi /mnt/SSD/
$ sudo mount /dev/SDA /mnt/SSD

5. Montez le disque automatiquement au démarrage

L'étape suivante consiste à configurer fstab pour monter automatiquement le disque au démarrage du système.

Vous devez d'abord trouver l'ID unique du disque avec la commande blkid.

$ sudo blkid

/dev/mmcblk0p1: LABEL_FATBOOT="démarrage" REMARQUER="démarrage" UUID="F661-303B" TYPE="VFAT" PARTUUIDE="A91dd8a2-01"
/dev/mmcblk0p2: REMARQUER="Rootfs" UUID="8d008fde-f12a-47f7-8519-197ea707d3d4" TYPE="Ext4" PARTUUIDE="A91dd8a2-02"
/dev/mmcblk0: PTUUID="A91dd8a2" PTTYPE="dose"
/dev/SDA: UUID="5c3a8481-682c-4834-9814-17dba166f591" TYPE="Ext4"

Notre SSD est situé à / Dev / sda a un identifiant unique 5c3a8481-682c-4834-8814-17dba166f591.

Modifier le fichier / Etc / fstab et ajoutez la ligne suivante pour configurer le montage automatique du disque au démarrage.

$ sudo vi /etc/fstab

Ajoutez cette ligne à la fin:

UUID=5c3a8481-682c-4834-9814-17dba166f591 /mnt/ssd ext4 est la valeur par défaut 0 0

Redémarrez le système

Redémarrez $ sudo

Vous pouvez vérifier que le disque est correctement monté au démarrage avec la commande suivante:

$ df -avoir /dev/SDA
Taille du système de fichiers utilisée Utilisation% Monté sur
/dev/SDA        458g   73M  435g   1% /mnt/SSD

6. Configurer les octets sur SSD

Geth peut consommer beaucoup de mémoire pendant le processus de synchronisation, il est donc fortement recommandé de créer un fichier d'échange (RAM excédentaire) pour éviter tout type d'erreur OutOfMemory. Il est également fortement recommandé de placer le fichier d'échange sur le disque le plus rapide, qui est SSD dans notre cas.

Image de l'article

Modifier le fichier / Etc / dphys-swapfile

  • remplacer CONF_SWAPSIZE = 100 passé CONF_SWAPSIZE = 8192 attribuer un SWAP de 8 Go
  • remplacer CONF_SWAPFILE = / var / swap passé CONF_SWAPFILE = / mnt / SSD / swap.file trouver le démarrage sur SSD
$ sudo vi /etc/dphys-fichier d'échange

CONF_SWAPSIZE=8192
CONF_MAXSWAP=8192
CONF_SWAPFILE=/mnt/SSD/changement.fichier

Redémarrez le commutateur

$ sudo /etc/dedans./dphys-échange de fichier-redémarrage

7. Surveillance des performances du disque

Avant de continuer, votre installation nécessite un débit d'E / S très rapide. Vous pouvez tester les performances de votre SSD avec les commandes suivantes:

Écrasement du disque:

$ dd si=/dev/zéro  de=/mnt/SSD/supprime moi.ça bs=32M compte=64 oflag=Immédiatement
64+0 Tâches dans
64+0 joue
2147483648 octets (2.1 GB, 2.0 GiB) copié, 13.6021 s, 158 MB/s

Lecture de disque:

$ dd si=/mnt/SSD/supprime moi.DAT de=/dev/nul bs=32M compte=64 iflag=Immédiatement
64+0 Tâches dans
64+0 joue
2147483648 octets (2.1 GB, 2.0 GiB) copié, 22.3361 s, 96,1 MB/s

Sous 50 Mo / s (écriture / lecture), je ne vous recommanderais pas d'essayer de synchroniser un nœud Geth car vous risquez de ne jamais atteindre votre tête et de terminer la synchronisation.

Retirer /mnt/ssd/deleteme.dat après le test de performance.

Autre configuration

Transfert de port

Afin de communiquer correctement avec les autres camarades, Geth doit accepter les connexions dans le port 30303 de l'exterieur. Vous devez configurer votre pare-feu en conséquence pour permettre aux demandes entrantes sur le port 30303 d'atteindre la machine via le transfert de port ou le déclenchement de port.

Image de l'article

Exemple – VirginMedia Hub (redirection de port)

Logiciels requis

Installez les logiciels suivants qui peuvent être nécessaires pendant la procédure.

$ sudo apt-avoir installer git sysstat -y

Options recommandées pour stabiliser le nœud

  1. Réduisez la RAM allouée au GPU

Éditer /boot/config.txt et ajoutez ou modifiez la ligne suivante:

gpu_mem = 16
  1. Appelez le noyau 64 bits

Éditer /etc/systemd/system.conf, et ajoutez ou modifiez la ligne suivante

arm_64bit = 1

Installer et configurer Geth

Maintenant, notre système est prêt à installer et à configurer Geth.

a. Installer et configurer Golang
  1. Téléchargez l'archive en ~ / Télécharger

Pour un Raspberry Pi 4, nous devons télécharger Golang for Architecture ARMv6: go1.13.1.linux-armv6l.tar.gz

$ mkdir ~/Télécharger
$ cd ~/Télécharger
$ wget https://dl.Google.com/aller/go1.13,1.linux-armv6l.le goudron.gz
  1. Extrayez-le dans / Usr / local
$ sudo tar -C /usr/local -xvf go1.13,1.linux-armv6l.le goudron.gz
  1. Changer le propriétaire en root et changer les permissions
$ sudo chown root:racine /usr/local/aller
$ sudo chmod 755 /usr/local/aller
  1. Définissez les variables d'environnement. Modifier le fichier / Etc / profile et ajoutez cette ligne à la fin:
$ sudo vi /etc/profil
exportation FAÇON=$FAÇON:/usr/local/aller/les abeilles
  1. redémarrer
Redémarrez $ sudo
  1. Tentative
$ go version
aller à la version go1.13,1 linux/bras
b. Installez Geth à partir de la source

Pour installer le client Ethereum Geth, nous allons le compiler à partir de la source GitHub.

  1. Clonez le référentiel
$ git clone https://github.com/ethereum/aller-ethereum.git -branche v<version>

Retirer - branche v<version> si vous souhaitez utiliser le dernier code (instable).

  1. Allez dans le dossier et créez geth
$ cd go-ethereum
$ make Geth
(attends un couple de minutes...)
  1. Déplacez le binaire vers / usr / local / bin
$ sudo, etc. ~/aller-ethereum/construire/les abeilles/Geth /usr/local/les abeilles
  1. Tentative
$ geth version
Geth
Version: 1,90,6-stable
Git Commit: bd05968077f27f7eb083404dd8448157996a8788
Architecture: bras
Versions du protocole: [[[[63]
ID réseau: 1
Version Go: go1.13,1
Système opérateur: linux
GOPATH=
GOROOT=/usr/local/aller
c. Configurer et exécuter Geth

Nous devons d'abord configurer Geth pour synchroniser vite position avec le drapeau - Synchronisez le code rapidement.

Geth en a aussi un --cache des options qui spécifient la quantité de RAM que le client peut utiliser. Le Raspberry Pi 4 dispose de 4 Go de RAM à utiliser - cache 256 sans rencontrer des erreurs de mémoire insuffisante.

Par défaut, toutes les données sont stockées dans ~ / .Ethereum / Geth / se trouve sur la carte SD. Nous voulons stocker les données Ethereum sur SSD. Pour cela, nous pouvons utiliser l'alternative --datadir / mnt / ssd / ethereum pour dire à Geth de lire / écrire le magasin de données sur SSD.

  1. Créer un répertoire de données sur SSD avec des autorisations pi
$ sudo mkdir /mnt/SSD/ethereum
$ sudo chown -R pi:pi /mnt/SSD/ethereum
  1. Exécutez la commande suivante pour voir si Geth commence à synchroniser la blockchain sans erreur.
$ geth -Rapidement -cache 256 -datadir /mnt/SSD/ethereum

Ctrl+C pour l'arrêter

Voir la documentation des options de ligne de commande

d. Configurer Geth en tant que service (systemd)

Nous voulons exécuter Geth en tant que service et maintenir le processus en arrière-plan après avoir fermé la session et pouvoir récupérer automatiquement des plantages.
Nous devons installer un service systemctl (explication systemd)

  1. Créez le fichier suivant:
$ sudo vi /etc/systemd/système/Geth.un service
[[[[Unité]
La description=Noeud Geth
Après=réseau.målrevision.un service
veut=réseau.objectif
[[[[Un service]
Directeur de travail=/Accueil/pi
ExecStart=/usr/local/les abeilles/Geth -Rapidement -cache 256 -datadir /mnt/SSD/ethereum
Utilisateur=pi
Groupe=pi
redémarrer=toujours
RestartSec=5s

[[[[Installer]
WantedBy=multi-utilisateur.objectif
Alias=Geth.un service
  1. Démarrez le service

La commande suivante met à jour la liste des démons et lance Geth en arrière-plan avec notre définition de fichier de service

Démon $ sudo systemctl-recharger
$ sudo systemctl start geth
  1. Configurer le service pour démarrer au démarrage

La commande suivante configure Geth pour qu'il démarre automatiquement après un redémarrage.

$ sudo systemctl enable geth
  1. Vérifiez les journaux

Vous pouvez visualiser les journaux de service en consultant le fichier / Var / log / syslog

$ queue -F //Journal/syslog

septembre 23 15:35:36 geth geth[[[[1876]: INFO [[[[09-23|15:35:36,953] importé Nouveau Etat les articles sont comptés=744  passé=101,921ms traité=37498448 en attente=52340  Réessayer=29  dupliquer=1259 de façon inattendue=7938
septembre 23 15:35:37 geth geth[[[[1876]: INFO [[[[09-23|15:35:37,468] importé Nouveau Etat les articles sont comptés=1051 passé=90.277ms traité=37499499 en attente=52294  Réessayer=1   dupliquer=1259 de façon inattendue=7938
septembre 23 15:35:37 geth geth[[[[1876]: INFO [[[[09-23|15:35:37,953] importé Nouveau Etat les articles sont comptés=1200 passé=45,520ms traité=37500699 en attente=53140  Réessayer=dix  dupliquer=1259 de façon inattendue=7938
septembre 23 15:35:38 geth geth[[[[1876]: INFO [[[[09-23|15:35:38,772] importé Nouveau Etat les articles sont comptés=1007 passé=494.883ms traité=37501706 en attente=55936  Réessayer=15  dupliquer=1259 de façon inattendue=7938
septembre 23 15:35:39 geth geth[[[[1876]: INFO [[[[09-23|15:35:39.046] importé Nouveau Etat les articles sont comptés=1042 passé=10 600ms traité=37502748 en attente=58575  Réessayer=dix  dupliquer=1259 de façon inattendue=7938
septembre 23 15:35:39 geth geth[[[[1876]: INFO [[[[09-23|15:35:39,340] importé Nouveau Etat les articles sont comptés=966  passé=5,002ms traité=37503714 en attente=61462  Réessayer=dix  dupliquer=1259 de façon inattendue=7938
septembre 23 15:35:39 geth geth[[[[1876]: INFO [[[[09-23|15:35:39,950] importé Nouveau Etat les articles sont comptés=1028 passé=35.258ms traité=37504742 en attente=62667  Réessayer=16  dupliquer=1259 de façon inattendue=7938
septembre 23 15:35:40 geth geth[[[[1876]: INFO [[[[09-23|15:35:40.419] importé Nouveau Etat les articles sont comptés=1350 passé=73,530ms traité=37506092 en attente=61650  Réessayer=19  dupliquer=1259 de façon inattendue=7938
septembre 23 15:35:40 geth geth[[[[1876]: INFO [[[[09-23|15:35:40,657] importé Nouveau bloquer en-têtes comptent=2048 passé=12,619numéro s=3369149 hachage=e7fe02 ...172100 âge=2y6mo2w

Image de l'article

synchronisation

Nous avons installé et configuré Geth, nous devons donc attendre quelques jours pour que la synchronisation se termine. En attendant, permettez-moi de partager quelques idées sur le processus de synchronisation et ce qui se passe sous le capot.

Tout d'abord, je vite nœud de synchronisation, le processus de synchronisation consiste en deux phases fonctionne en parallèle: bloquer la synchronisation et état trie télécharger. Les deux phases doivent être effectuées pour avoir un nœud complet et basculer sur plein lieu où chaque transaction est exécutée et vérifiée.

le bloquer la synchronisation télécharge toutes les informations de blocage (en-tête, transactions). Cette phase utilise beaucoup de CPU et d'espace pour stocker toutes les données. Vous pouvez suivre ce processus dans les journaux avec la mention de "Importer les en-têtes de bloc et les reçus de bloc".

INFO [09-26|09:25:19.045] Nombre de têtes de bloc importées = 1 écoulé = 80,177 ms = 8623429 hash = c064e8… 4daa8b age = 1m1s
INFO [09-26|09:19:52.655] Nouveau numéro de reçu de bloc importé = 65 écoulé = nombre 396.964ms = 8623342 hachage = 2ef982… 20344e âge = 17m32s taille = 2,35 Mo

Cependant, en mode rapide, aucune transaction n'est effectuée, nous n'avons donc pas d'autorisation de compte disponible (c.-à-d. Soldes, déductions, code de contrat intelligent et données). Geth doit télécharger et croiser avec le dernier bloc de la fonction publique. Cette phase est appelée état trie télécharger et prend généralement plus de temps que la synchronisation des blocs.
Cette phase est décrite dans les journaux avec les instructions suivantes:

INFO [09-26|09:29:27.542] Nouvelles données d'état importées = 1152 écoulées = 16,372 ms traitées = 338933905 en attente = 2630 réessayer = 0 en double = 16797 inattendu = 352359
INFO [09-26|09:29:30.307] Nouvelles données d'état importées = 768 passées = 10,657 ms traitées = 338934673 en attente = 3075 réessayer = 0 en double = 16797 inattendu = 352359

Les diagrammes ci-dessous montrent certaines valeurs de mesure pendant le processus de synchronisation. Nous notons que lorsque la synchronisation des blocs est terminée, nous stockons moins de données et consommons moins de CPU et de mémoire. Cependant, Geth ferme toujours ses portes et écrit les registres de l'État à un rythme élevé.

Image de l'article

Suivez cet article pour savoir comment surveiller Geth avec GoogleSheet.

Au cours du processus, vous remarquerez des comportements étranges communs à de nombreuses personnes.

  • Entre 64 et 128 blocs derrière
    Quand tu auras fini bloquer la synchronisation phase et merveille état trie télécharger phase, le nombre de numéros de bloc sera toujours basculé entre 64 et 128 blocs derrière le dernier bloc qui éclate sur Ethereum.
    Ceci est normal jusqu'à ce que la phase de téléchargement de l'état se termine et que votre nœud soit entièrement synchronisé.
  • Pivot a vieilli
    Si vous ne pouvez pas télécharger toutes les autorisations en 30 minutes (avertissement de spoiler: vous ne pouvez pas), vous devrez «pivoter». Pivoter signifie basculer vers un nouveau bloc de démarrage et recommencer la synchronisation. Tordre ne signifie pas commencer par le début, mais cela augmente le temps de téléchargement et de vérification de la condition.
PRÉVENIR [09-25|09:29:05.328] Le pivot a vieilli, il a touché l'ancien = 8616956 nouveau = 8617021
  • Camarade libérant
    Geth est connecté à plusieurs camarades pour récupérer les informations nécessaires à l'exécution d'un nœud complet. Mais un ami peut parfois être dysfonctionnel. C'est pourquoi Geth libère automatiquement un compagnon lorsqu'il détecte une déviation.
PRÉVENIR [09-26|07:20:30.946] Synchronisation en régime permanent, libère le pair pair = 68938142fde11a0d

PRÉVENIR [09-26|09:03:22.737] Libère le nœud non synchronisé pendant l'ID de synchronisation rapide = 032cb470bedcc353 conn = addr entrant = 54.224.xx.xx: 43396 type = Geth / v1.8.27-stable-4bcc0a37 / linux-amd64 / go1.11.9

Transition vers le nœud complet

Après exactement 3 jours, 23 heures et 49 minutes nous avons observé la transition du mode rapide au mode complet:

INFO [09-27|11:23:14.601] Synchronisation rapide complète, inactivation automatique

Ensuite, vous devriez voir

INFO [09-27|11:24:14.848] La synchronisation des blocs a commencé
INFO [09-27|11:24:29.351] Importer le début du segment de chaîne latérale = 8630211 fin = 8630283
INFO [09-27|11:24:37.381] Nouveaux blocs de segments de chaîne importés = 4 txs = 739 mgas = 39838 écoulés = 8,029s mgasps = 4,961 nombre = 8630214 hash = 0bcc00… b0ec25 âge = 19m27s sale = 4,79 Mo
INFO [09-27|11:24:46.358] Nouveaux blocs de segments de chaîne importés = 8 txs = 736 mgas = 59,772 écoulés = 8,977s mgasps = 6,658 nombre = 8630222 hash = 5bd330… be76b7 âge = 17m40s sales = 10,36MiB
INFO [09-27|11:24:54.970] Nouveaux blocs de segments de chaîne importés = 8 txs = 706 mgas = 69874 tours = 8612 s mgasps = 8113 numéros = 8630230 hachage = 0be45c ... f85f32 âge = 16m34s sale = 15,65 Mo

Le site Web ethstats récupère le dernier état du réseau Ethereum en temps réel et nous pouvons comparer pour voir si nous sommes synchronisés.

Image de l'article

Conclusion

En résumé, cet article montre à quel point il est simple et abordable d'exécuter un nœud complet sur le réseau Ethereum et de contribuer à la bonne santé du réseau.

Image de l'article

Remerciement spécial

Ce guide est parti d'une discussion sur la difficulté de maintenir un nœud Ethereum stable et synchronisé sur un ordinateur à carte unique. Merci donc pour les discussions intéressantes et pour votre aide au cours des dernières semaines pour faire de cette expérience un succès!

références