Valtrack é um conjunto de ferramentas destinadas a validadores de geo-localização e rastreamento do Ethereum.
Saída de amostra em CSV: validator_metadata_events_sample.csv
Para começar com o Valtrack, você precisa clonar o repositório e instalar as dependências.
git clone [email protected]:chainbound/valtrack.git
Valtrack:
go mod download
go build
Nats:
A Valtrack consiste em 3 componentes principais: The Sentry , The Consumer e A Nats JetStream Server. O Sentry é responsável por descobrir e rastrear os validadores do Ethereum, enquanto o consumidor consome os dados publicados pelo Sentry, o processou e o armazena em um banco de dados (arquivos parquet por enquanto). Leia mais em arquitetura.
Para executar a sentinela:
./valtrack --nats-url nats://localhost:4222 sentry
./valtrack --nats-url nats://localhost:4222 consumer
Fornecemos um exemplo de arquivo de configuração para o servidor NATS no servidor/nats-server.conf. Para executar o servidor Nats com o JetStream ativado, você pode executar o seguinte comando:
nats-server --jetstream --config server/nats-server.conf
Isso criará um diretório data
no diretório de trabalho atual com todos os dados do 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
O Beacon Sentry é um serviço que rasteja o DHT do Ethereum e descobre nós e ouve as conexões recebidas. Ele tenta se conectar a qualquer par descoberto e executa um aperto de mão para seu Status
e MetaData
.
Paralelamente, tentará avaliar as assinaturas de fofocas do par, especificamente para os tópicos da sub -rede de atestado. Uma vez que ele tiver todos esses dados, ele o publicará no servidor Nats JetStream.
Os colegas são armazenados em um PeerStore que periodicamente (toda época) percorre esse processo novamente. Isso nos permite obter vários pontos de dados ao longo do tempo, o que fornecerá mais precisão na determinação do número de validadores anexados a um nó de farol.
TODO: A Sentry Beacon deve armazenar posteriormente as estimativas sobre o número de validadores anexados a um nó do farol. Deve então expô -lo sobre uma API.
O consumidor é um serviço que consome os dados de sentinela do servidor Nats JetStream e o armazena no arquivo parquet (banco de dados em breve). Mantém 3 tabelas:
discovery_events
: contém os eventos de descoberta da sentinelametadata_events
: contém os eventos de metadados da sentinelavalidator_metadata_events
: uma tabela derivada dos eventos de metadados, que contém pontos de dados de validadoresNats é um middleware orientado a mensagens. A Valtrack usa o Nats JetStream, o que permite a persistência das mensagens funcionalizações.
Verifique a documentação oficial do NATS para instruções de instalação do NATS DOCs
Para executar o servidor Nats JetStream:
nats-server --jetstream
É importante criar fluxo com a configuração correta de acordo com os requisitos. Documentos
Valtrack usa a seguinte configuração:
jetstreamCfg := jetstream. StreamConfig {
Name : "EVENTS" ,
Retention : jetstream . InterestPolicy ,
Subjects : [] string { "events.metadata_received" , "events.peer_discovered" },
}
A configuração do consumidor Docs Valtrack usa a seguinte configuração:
consumerCfg := jetstream. ConsumerConfig {
Name : fmt . Sprintf ( "consumer-%s" , uniqueID ),
Durable : fmt . Sprintf ( "consumer-%s" , uniqueID ),
Description : "Consumes valtrack events" ,
AckPolicy : jetstream . AckExplicitPolicy ,
}
O consumidor exporá uma API para consultar os dados armazenados no banco de dados. A API será uma API REST.
Acesso público (usuário regular, nenhuma chave necessária):
curl http://localhost:8080/validators
Acesso ao administrador (requer uma chave da API):
curl -H " X-API-KEY: <API-KEY> " http://localhost:8080/validators
As teclas da API podem ser adicionadas no arquivo api_keys.txt
.
Grite para os seguintes projetos de inspiração e referência: