contributoor
Contributoor is a lightweight service that runs alongside an Ethereum consensus client and collects data via the client's APIs. It's a streamlined, user-friendly extraction of the sentry service from ethpandaops/xatu.

π¦ Installation
See the contributoor-installer repository for supported platforms and installation instructions.
π Getting Started
Once installed, you can manage the Contributoor service using these commands:
contributoor start # Start the service
contributoor stop # Stop the service
contributoor status # Check service status
contributoor restart # Restart the service
contributoor config # View/edit configuration
contributoor update # Update the service to the latest version
contributoor logs # Show logs
βοΈ Configuration
The contributoor-installer will generate a config.yaml file for you.
If you encounter configuration issues, you can:
- Compare your config with the example below
- Remove the config file and re-run
contributoor install to generate a fresh one
- Check the debug logs for detailed error messages
π View Example Config
# The address of your beacon node's HTTP API.
beaconNodeAddress: http://127.0.0.1:64692
# The address to serve metrics on (optional, disabled if empty).
metricsAddress: ":9090"
# The address to serve a health check on (optional, disabled if empty).
healthCheckAddress: ":9191"
# The log level (debug, info, warn, error).
logLevel: info
# Specifies a network name override. This is only used when connecting to testnets where
# the beacon node reports a generic network name like "testnet". For known networks
# (mainnet, sepolia, holesky, hoodi, etc.), the network is always derived automatically from
# the beacon node's configuration.
networkName: pectra-devnet-6
# The output server configuration (credentials are base64 encoded and required if a pandaops server is used).
outputServer:
address: xatu.primary.production.platform.ethpandaops.io:443
credentials: <base64-encoded-value>
tls: true
# The contributoor version to use.
version: 0.0.8
# The directory where contributoor stores its configuration and data.
contributoorDirectory: /Users/username/.contributoor
# The method to run contributoor (RUN_METHOD_DOCKER, RUN_METHOD_BINARY, RUN_METHOD_SYSTEMD).
runMethod: RUN_METHOD_DOCKER
# Attestation subnet check configuration (optional).
# attestationSubnetCheck:
# enabled: true
# maxSubnets: 2
# mismatchDetectionWindow: 2
# mismatchThreshold: 1
# subnetHighWaterMark: 5
Available CLI Flags
All configuration options can be overridden via CLI flags:
--config string # Config file path
--debug # Enable debug mode
--network string # Ethereum network name (mainnet, sepolia, holesky)
--beacon-node-address string # Address of the beacon node API (e.g. http://localhost:5052)
--metrics-address string # Address of the metrics server (e.g. :9091)
--health-check-address string # Address of the health check server (e.g. :9191)
--log-level string # Log level (debug, info, warn, error)
--username string # Username for the output server
--password string # Password for the output server
--output-server-address string # Address of the output server (e.g. xatu.primary.production.platform.ethpandaops.io:443)
--output-server-tls string # Enable TLS for the output server (true/false)
--contributoor-directory string # Directory where contributoor stores configuration and data
# Attestation subnet check flags (optional)
--attestation-subnet-check-enabled # Enable attestation subnet checking
--attestation-subnet-max-subnets int # Max subnets before disabling single_attestation (default: 2)
--attestation-subnet-mismatch-detection-window int # Slots to track for mismatch detection (default: 2)
--attestation-subnet-mismatch-threshold int # Mismatches before reconnection (default: 1)
--attestation-subnet-high-water-mark int # Extra subnet events allowed (default: 5)
Example with multiple flags:
go run ./cmd/sentry/main.go \
--config ./config.yaml \
--debug true \
--network sepolia \
--beacon-node-address http://localhost:5052 \
--metrics-address localhost:9091 \
--log-level debug
π¨ Development
Running Locally
To run Contributoor in development mode:
go run ./cmd/sentry --config /path/to/.contributoor/config.yaml --debug true
The config.yaml would have been generated for you by the installer.
Code Generation
Generate protocol buffers and other generated code:
go generate ./...
make proto
Testing
Run tests with race detection, coverage reporting, and view the coverage report:
go test -race -failfast -cover -coverpkg=./... -coverprofile=coverage.out ./... && go tool cover -html=coverage.out
π Share Your Node Data
Help improve Ethereum by contributing your node's data to our research. Data is published openly in a privacy-focused manner and used for research and analysis. Let us know if you're interested by completing this form.
π€ Contributing Code
Contributoor is part of EthPandaOps' suite of tools for Ethereum network operations. Contributions are welcome! Please check our GitHub repository for more information.