Valtrack es un conjunto de herramientas destinadas a localizar y rastrear validadores de Ethereum.
Salida de muestra en CSV: Validator_Metadata_events_sample.csv
Para comenzar con Valtrack, debe clonar el repositorio e instalar las dependencias.
git clone [email protected]:chainbound/valtrack.git
Valtrack:
go mod download
go build
Nats:
Valtrack consta de 3 componentes principales: el centinela , el consumidor y un servidor Nats Jetstream. El Sentry es responsable de descubrir y rastrear validadores de Ethereum, mientras que el consumidor consume los datos publicados por el centinela, los procesó y los almacena en una base de datos (archivos de parquet por ahora). Lea más bajo arquitectura.
Para ejecutar el centinela:
./valtrack --nats-url nats://localhost:4222 sentry
./valtrack --nats-url nats://localhost:4222 consumer
Proporcionamos un archivo de configuración de ejemplo para el servidor NATS en servidor/nats-server.conf. Para ejecutar el servidor NATS con JetStream habilitado, puede ejecutar el siguiente comando:
nats-server --jetstream --config server/nats-server.conf
Esto creará un directorio data
en el directorio de trabajo actual con todos los datos de JetStream.
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
Beacon Sentry es un servicio que rastrea el DHT Ethereum DISCV5 y descubre nodos y escucha las conexiones entrantes. Intenta conectarse a cualquier compañero descubierto y realiza un apretón de manos para su Status
y MetaData
.
Paralelamente, intentará medir las suscripciones de GossipSub de la pareja, específicamente a los temas de la subred de certificación. Una vez que tenga todos esos datos, lo publicará en el servidor Nats Jetstream.
Los pares se almacenan en un peerstore que periódicamente (cada época) ejecutará este proceso nuevamente. Esto nos permite obtener múltiples puntos de datos a lo largo del tiempo, lo que proporcionará más precisión para determinar el número de validadores adjuntos a un nodo de baliza.
TODO: El Sentry Beacon debe almacenar estimaciones más tarde en el número de validadores adjuntos a un nodo Beacon. Luego debe exponerlo sobre una API.
El consumidor es un servicio que consume los datos de Sentry del servidor NATS JetStream y los almacena en el archivo Parquet (Base de datos pronto). Mantiene 3 tablas:
discovery_events
: contiene los eventos de descubrimiento del centinelametadata_events
: contiene los eventos de metadatos del centinelavalidator_metadata_events
: una tabla derivada de los eventos de metadatos, que contiene puntos de datos de validadoresNATS es un middleware orientado a mensajes. Valtrack utiliza NATS Jetstream que permite las funciones de persistencia de mensajes.
Verifique la documentación oficial de NATS para obtener instrucciones de instalación de NATS documentos
Para ejecutar el servidor NATS JETSTREAM:
nats-server --jetstream
Es importante crear flujo con la configuración correcta de acuerdo con los requisitos. Documento
Valtrack utiliza la siguiente configuración:
jetstreamCfg := jetstream. StreamConfig {
Name : "EVENTS" ,
Retention : jetstream . InterestPolicy ,
Subjects : [] string { "events.metadata_received" , "events.peer_discovered" },
}
Configuración del consumidor Docs Valtrack utiliza la siguiente configuración:
consumerCfg := jetstream. ConsumerConfig {
Name : fmt . Sprintf ( "consumer-%s" , uniqueID ),
Durable : fmt . Sprintf ( "consumer-%s" , uniqueID ),
Description : "Consumes valtrack events" ,
AckPolicy : jetstream . AckExplicitPolicy ,
}
El consumidor expondrá una API para consultar los datos almacenados en la base de datos. La API será una API REST.
Acceso público (usuario regular, no se requiere clave):
curl http://localhost:8080/validators
Access de administrador (requiere una clave API):
curl -H " X-API-KEY: <API-KEY> " http://localhost:8080/validators
Las teclas API se pueden agregar en el archivo api_keys.txt
.
Shoutout a los siguientes proyectos de inspiración y referencia: