Valtrack ist eine Reihe von Tools, die darauf abzielen, Ethereum-Validatoren zu verfolgen.
Beispielausgabe in CSV: validator_metadata_events_sample.csv
Um mit Valtrack zu beginnen, müssen Sie das Repository klonen und die Abhängigkeiten installieren.
git clone [email protected]:chainbound/valtrack.git
Valtrack:
go mod download
go build
Nats:
Valtrack besteht aus 3 Hauptkomponenten: dem Sentry , dem Verbraucher und einem Nats -Jetstream -Server. Der Sentry ist dafür verantwortlich, Ethereum -Validatoren zu entdecken und zu verfolgen, während der Verbraucher die vom Sentry veröffentlichten Daten konsumiert, verarbeitet und in einer Datenbank gespeichert (für den Moment). Lesen Sie mehr unter Architektur.
Um den Wachposten auszuführen:
./valtrack --nats-url nats://localhost:4222 sentry
./valtrack --nats-url nats://localhost:4222 consumer
Wir bieten eine Beispielkonfigurationsdatei für den NATS-Server in Server/nats-server.conf. Um den NATS -Server mit aktivierter Jetstream auszuführen, können Sie den folgenden Befehl ausführen:
nats-server --jetstream --config server/nats-server.conf
Dadurch wird ein data
im aktuellen Arbeitsverzeichnis mit allen Jetstream -Daten erstellt.
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
Der Beacon -Sentry ist ein Dienst, der das Ethereum dishv5 DHT kriecht und Knoten entdeckt und auf eingehende Verbindungen hört. Es versucht, sich mit allen entdeckten Kollegen zu verbinden, und führt einen Handschlag für ihren Status
und MetaData
durch.
Parallel dazu wird versucht, die Klatschsub -Abonnements des Peer zu messen, insbesondere auf die Subnetzthemen der Bescheinigung. Sobald es all diese Daten hat, wird es an den Nats Jetstream Server veröffentlicht.
Gleichaltrige werden in einem Peerstore gespeichert, das in regelmäßigen Abständen (jede Epoche) diesen Prozess wieder durchläuft. Dies ermöglicht es uns, im Laufe der Zeit mehrere Datenpunkte zu erhalten, die mehr Genauigkeit bei der Ermittlung der Anzahl der an einen Beacon -Knoten angeschlossenen Validatoren bieten.
TODO: Der Beacon Sentry sollte später Schätzungen über die Anzahl der an einen Beacon -Knoten angeschlossenen Validatoren speichern. Es sollte es dann über eine API aufdecken.
Consumer ist ein Dienst, der die Sentry -Daten vom NATS Jetstream -Server konsumiert und in der Parquetdatei (Datenbank in Kürze) speichert. Verwaltet 3 Tische:
discovery_events
: Enthält die Entdeckungsereignisse des Wachpostensmetadata_events
: enthält die Metadatenereignisse des Wachpostensvalidator_metadata_events
: Eine abgeleitete Tabelle aus den Metadatenereignissen, die Datenpunkte von Validatoren enthältNats ist eine meldungsorientierte Middleware. Valtrack verwendet Nats Jetstream, mit dem die Funktionen von Nachrichtenpersistenz ermöglicht werden.
Überprüfen Sie die offizielle NATS -Dokumentation für NATS -Installationsanweisungen Dokumente
So führen Sie den Nats Jetstream Server aus:
nats-server --jetstream
Es ist wichtig, Stream mit der richtigen Konfiguration gemäß den Anforderungen zu erstellen. Dokumente
Valtrack verwendet die folgende Konfiguration:
jetstreamCfg := jetstream. StreamConfig {
Name : "EVENTS" ,
Retention : jetstream . InterestPolicy ,
Subjects : [] string { "events.metadata_received" , "events.peer_discovered" },
}
Consumer Configuration DOCs Valtrack verwendet die folgende Konfiguration:
consumerCfg := jetstream. ConsumerConfig {
Name : fmt . Sprintf ( "consumer-%s" , uniqueID ),
Durable : fmt . Sprintf ( "consumer-%s" , uniqueID ),
Description : "Consumes valtrack events" ,
AckPolicy : jetstream . AckExplicitPolicy ,
}
Der Verbraucher wird eine API zur Abfrage der in der Datenbank gespeicherten Daten aussetzen. Die API wird eine REST -API sein.
Öffentlicher Zugriff (regulärer Benutzer, kein Schlüssel erforderlich):
curl http://localhost:8080/validators
Administratorzugriff (erfordert einen API -Schlüssel):
curl -H " X-API-KEY: <API-KEY> " http://localhost:8080/validators
API -Tasten können in der Datei api_keys.txt
hinzugefügt werden.
Ruf zu den folgenden Projekten zur Inspiration und Referenz: