Nœud d'archive Ethereum
Dernière modification: @omahs(opens in a new tab), 24 octobre 2023
Un nœud d'archive est une instance d'un client Ethereum configurée pour créer une archive de tous les états historiques. C'est un outil utile pour certains cas d'utilisation, mais il peut être plus difficile à exécuter qu'un nœud complet.
Prérequis
Vous devriez comprendre le concept d'un nœud Ethereum, son architecture, les stratégies de synchronisation, les pratiques de mise en fonctionnement et leur utilisation.
Qu'est-ce qu'un nœud d'archive
Pour saisir l'importance d'un nœud d'archive, clarifions le concept d'« état. » Ethereum peut être désigné comme une machine à état basée sur les transactions. Il est composé de comptes et d'applications exécutant des transactions qui modifient leur état. Les données globales contenant des informations sur chaque compte et contrat sont stockées dans une base de données triée appelée état. Cela est géré par le client de la couche d'exécution (EL) et comprend :
- Soldes et nonces des comptes
- Code des contrats et stockage
- Données liées au consensus, par exemple, le contrat de dépôt de mise en jeu
Pour interagir avec le réseau, vérifier et produire de nouveaux blocs, les clients Ethereum doivent suivre les changements les plus récents (le sommet de la chaîne) et donc l'état actuel. Un client de couche d'exécution configuré en tant que nœud complet vérifie et suit le dernier état du réseau, mais ne met en cache que les derniers états, par ex. l'état associé aux 128 derniers blocs, afin qu'il puisse gérer les réorganisations en chaîne et fournir un accès rapide aux données récentes. L'état récent est ce dont tous les clients ont besoin pour vérifier les transactions entrantes et utiliser le réseau.
Vous pouvez imaginer l'état comme un instantané de réseau momentané à un bloc donné et l'archive comme une relecture de l'historique.
Les états historiques peuvent être élagués en toute sécurité car ils ne sont pas nécessaires au fonctionnement du réseau et il serait inutilement redondant pour le client de conserver toutes les données obsolètes. Les états qui existaient avant un certain bloc récent (par exemple, 128 blocs avant la tête) sont effectivement éliminés. Les nœuds complets ne conservent que les données historiques de la blockchain (blocs et transactions) et des instantanés historiques occasionnels qu'ils peuvent utiliser pour régénérer des états plus anciens sur demande. Pour ce faire, ils réexécutent les transactions passées dans l'EVM, ce qui peut être exigeant en termes de calcul lorsque l'état souhaité est éloigné de l'instantané le plus proche.
Cependant, cela signifie que l'accès à un état historique sur un nœud complet nécessite une grande quantité de calcul. Le client peut avoir besoin d'exécuter toutes les transactions passées et de calculer un état historique à partir de la genèse. Les nœuds d'archive résolvent ce problème en stockant non seulement les états les plus récents, mais également tous les états historiques créés après chaque bloc. Cela implique essentiellement un compromis avec l'exigence d'un espace disque plus grand.
Il est important de noter que le réseau ne dépend pas des nœuds d'archive pour conserver et fournir toutes les données historiques. Comme mentionné précédemment, tous les états intermédiaires historiques peuvent être dérivés sur un nœud complet. Les transactions sont stockées par tout nœud complet (actuellement moins de 400 Go) et peuvent être rejouées pour construire l'ensemble des archives.
Cas d'usage
L'utilisation régulière d'Ethereum, comme l'envoi de transactions, le déploiement de contrats, la vérification du consensus, etc. ne nécessite pas l'accès aux états historiques. Les utilisateurs n'ont jamais besoin d'un nœud d'archive pour une interaction standard avec le réseau.
Le principal avantage des archives d'état est un accès rapide aux requêtes sur les états historiques. Par exemple, le nœud d'archive renverrait rapidement des résultats tels que :
- Quel était le solde ETH du compte 0x1337... au bloc 15537393 ?
- Quel est le solde du jeton 0x dans le contrat 0x au bloc 1920000 ?
Comme expliqué ci-dessus, un nœud complet aurait besoin de générer ces données par l'exécution de l'EVM, utilisant le CPU et prenant du temps. Les nœuds d'archive y accèdent sur le disque et fournissent les réponses immédiatement. Cette fonctionnalité est utile pour certaines parties de l'infrastructure, par exemple :
- Les fournisseurs de services comme les explorateurs de blocs
- Chercheurs
- Analystes sécurité
- Développeurs de DApp
- Audit et conformité
Il existe divers services gratuits qui permettent également d'accéder aux données historiques. Comme il est plus exigeant d'exécuter un nœud d'archive, cet accès est généralement limité et ne fonctionne que pour des accès occasionnels. Si votre projet nécessite un accès constant aux données historiques, vous devriez envisager d'en exécuter un vous-même.
Implémentations et utilisation
Dans ce contexte, le terme « nœud d'archive » fait référence aux données fournies par les clients de la couche d'exécution orientés utilisateur, car ils gèrent la base de données d'état et fournissent des points de terminaison JSON-RPC. Les options de configuration, le temps de synchronisation et la taille de la base de données peuvent varier selon le client. Pour plus de détails, veuillez vous référer à la documentation fournie par votre client.
Avant de démarrer votre propre nœud d'archive, renseignez-vous sur les différences entre les clients et surtout sur les différentes exigences matérielles. La plupart des clients ne sont pas optimisés pour cette fonctionnalité et leurs archives nécessitent plus de 12 To d'espace. En revanche, des implémentations telles qu'Erigon peuvent stocker les mêmes données en moins de 3 To, ce qui en fait la méthode la plus efficace pour exécuter un nœud d'archive.
Pratiques recommandées
Outre les recommandations générales pour l'exécution d'un nœud, un nœud d'archive peut être plus exigeant en termes de matériel et de maintenance. Compte tenu des fonctionnalités clés(opens in a new tab) d'Erigon, l'approche la plus pratique consiste à utiliser l'implémentation client Erigon.
Matériel
Assurez-vous toujours de vérifier les exigences matérielles pour un mode spécifique dans la documentation du client. L'espace disque est la principale exigence pour les nœuds d'archive. Selon le client, cela varie de 3 To à 12 To. Même si le disque dur peut être considéré comme une meilleure solution pour de grandes quantités de données, sa synchronisation et la mise à jour constante de la tête de chaîne nécessiteront des disques SSD. Les disques SATA(opens in a new tab) sont assez bons mais ils doivent être d'une qualité fiable, au moins TLC(opens in a new tab). Les disques peuvent être installés dans un ordinateur de bureau ou un serveur avec suffisamment d'emplacements. Ces appareils dédiés sont idéaux pour exécuter un nœud à haute disponibilité. Il est tout à fait possible de l'exécuter sur un ordinateur portable, mais la portabilité entraînera un coût supplémentaire.
Toutes les données doivent tenir dans un seul volume, donc les disques doivent être joints, par ex. avec RAID0(opens in a new tab) ou LVM(opens in a new tab). Il pourrait également être utile d'envisager d'utiliser ZFS(opens in a new tab) car il prend en charge « Copy-on-write » qui garantit que les données sont correctement écrites sur le disque sans aucune erreur de bas niveau.
Pour plus de stabilité et de sécurité dans la prévention de la corruption accidentelle de la base de données, en particulier dans une configuration professionnelle, envisagez d'utiliser la mémoire ECC(opens in a new tab) si votre système le prend en charge. Il est généralement conseillé d'avoir la même quantité de RAM que pour un nœud complet, mais davantage de RAM peut accélérer la synchronisation.
Lors de la synchronisation initiale, les clients en mode archive exécuteront chaque transaction depuis la genèse. La vitesse d'exécution est principalement limitée par le CPU, donc un CPU plus rapide peut apporter une aide avec le temps de synchronisation initial. Sur un ordinateur grand public moyen, la synchronisation initiale peut prendre jusqu'à un mois.
Complément d'information
- Nœud complet Ethereum vs Nœud d'archive Ethereum(opens in a new tab) - QuickNode, septembre 2022
- Construire votre propre nœud d'archive Ethereum.(opens in a new tab) - par Thomas Jay Rush, août 2021
- Comment configurer Erigon, le RPC d'Erigon et TrueBlocks (scraping et API) en tant que services(opens in a new tab) – Magnus Hansson, mis à jour en septembre 2022