Valtrack est une suite d'outils visant à la géo-localisation et au suivi des validateurs Ethereum.
Exemple de sortie dans CSV: validator_metadata_events_sample.csv
Pour commencer avec Valtrack, vous devez cloner le référentiel et installer les dépendances.
git clone [email protected]:chainbound/valtrack.git
Valtrack:
go mod download
go build
Nats:
Valtrack se compose de 3 composants principaux: la sentinelle , le consommateur et un serveur Jetsstream NATS. La sentinelle est responsable de la découverte et du suivi des validateurs Ethereum, tandis que le consommateur consomme les données publiées par la sentinelle, la traitée et la stocke dans une base de données (fichiers Parquet pour l'instant). Lire la suite sous l'architecture.
Pour exécuter la sentinelle:
./valtrack --nats-url nats://localhost:4222 sentry
./valtrack --nats-url nats://localhost:4222 consumer
Nous fournissons un exemple de fichier de configuration pour le serveur NATS dans Server / Nats-Server.conf. Pour exécuter le serveur NATS avec Jetsstream activé, vous pouvez exécuter la commande suivante:
nats-server --jetstream --config server/nats-server.conf
Cela créera un répertoire data
dans le répertoire de travail actuel avec toutes les données de Jetsstream.
NAME:
valtrack - Ethereum consensus validator tracking tool
USAGE:
valtrack [global options] command [command options] [arguments...]
COMMANDS:
sentry run the sentry node
consumer run the consumer
help, h Shows a list of commands or help for one command
GLOBAL OPTIONS:
--log-level value, -l value log level (default: "info")
--nats-url value, -n value NATS server URL (needs JetStream) (default: "nats://localhost:4222")
--help, -h show help
Le Beacon Sentry est un service qui explore le DHT Ethereum DISCV5 et découvre les nœuds et écoute les connexions entrantes. Il essaie de se connecter à tous les pairs découverts et effectue une poignée de main pour leur Status
et MetaData
.
En parallèle, il essaiera d'évaluer les abonnements GossipSub du homologue, en particulier aux sujets de sous-réseau d'attestation. Une fois toutes ces données, elle la publiera sur le serveur NATSstream.
Les pairs sont stockés dans un peertore qui seront périodiquement (chaque époque) exécuter à nouveau ce processus. Cela nous permet d'obtenir plusieurs points de données au fil du temps, ce qui fournira plus de précision pour déterminer le nombre de validateurs attachés à un nœud de balise.
TODO: La Sentry Beacon devrait plus tard stocker des estimations sur le nombre de validateurs attachés à un nœud de balise. Il devrait ensuite l'exposer sur une API.
Le consommateur est un service qui consomme les données Sentry du serveur Jetsstream NATS et les stocke dans le fichier Parquet (base de données bientôt). Maintient 3 tables:
discovery_events
: contient les événements de découverte de la sentinellemetadata_events
: contient les événements de métadonnées de la sentinellevalidator_metadata_events
: un tableau dérivé des événements de métadonnées, qui contient des points de données de validateursNATS est un middleware orienté Message. Valtrack utilise Nats Jetsstream qui permet des fonctionnalités de persistance des messages.
Vérifiez la documentation officielle de la documentation pour les instructions d'installation des NAT
Pour exécuter le serveur Jetsstream NATS:
nats-server --jetstream
Il est important de créer un flux avec la bonne configuration en fonction des exigences. Docs
Valtrack utilise la configuration suivante:
jetstreamCfg := jetstream. StreamConfig {
Name : "EVENTS" ,
Retention : jetstream . InterestPolicy ,
Subjects : [] string { "events.metadata_received" , "events.peer_discovered" },
}
Configuration des consommateurs Docs Valtrack utilise la configuration suivante:
consumerCfg := jetstream. ConsumerConfig {
Name : fmt . Sprintf ( "consumer-%s" , uniqueID ),
Durable : fmt . Sprintf ( "consumer-%s" , uniqueID ),
Description : "Consumes valtrack events" ,
AckPolicy : jetstream . AckExplicitPolicy ,
}
Le consommateur exposera une API pour interroger les données stockées dans la base de données. L'API sera une API REST.
Accès public (utilisateur régulier, aucune clé requise):
curl http://localhost:8080/validators
Accès administrateur (nécessite une clé API):
curl -H " X-API-KEY: <API-KEY> " http://localhost:8080/validators
Les touches API peuvent être ajoutées dans le fichier api_keys.txt
.
Shoutout aux projets suivants pour l'inspiration et la référence: