mirror of
https://github.com/status-im/eth-rpc-proxy.git
synced 2026-08-27 17:51:11 +00:00
test-this-webhook
Ethereum RPC Proxy
The Ethereum RPC Proxy System provides a robust solution for managing and monitoring Ethereum RPC providers. It consists of two main components:
- RPC Health Checker: Monitors and validates RPC provider health
- nginx-proxy: Acts as a reverse proxy with provider failover capabilities
Running on the local machine
Run the complete system:
-
Generate provider configuration files and store them in the secrets folder:
# Create secrets directory if it doesn't exists mkdir -p secrets # Generate default_providers.json with different authentication methods python3 rpc-health-checker/generate_providers.py \ --providers infura:YOUR_INFURA_TOKEN grove:YOUR_GROVE_TOKEN status_network \ --networks mainnet sepolia \ --chains ethereum optimism arbitrum base status \ --output secrets/default_providers.json # Or use mix of token, basic auth, and no-auth providers python3 rpc-health-checker/generate_providers.py \ --providers infura:YOUR_INFURA_TOKEN grove:username:password status_network \ --networks mainnet sepolia \ --chains ethereum optimism arbitrum base status \ --output secrets/default_providers.json # Generate reference_providers.json with single provider per chain python3 rpc-health-checker/generate_providers.py \ --single-provider \ --providers infura:YOUR_INFURA_TOKEN_REFERENCE status_network \ --networks mainnet sepolia \ --chains ethereum optimism arbitrum base status \ --output secrets/reference_providers.jsonPlease replace:
YOUR_INFURA_TOKENandYOUR_INFURA_TOKEN_REFERENCEwith your Infura API tokensYOUR_GROVE_TOKENwith your Grove API token, or useusername:passwordfor basic auth- Other provider credentials as needed
Note:
--providersaccepts multiple providers with different authentication methods:- No auth format: just provider name (e.g.,
status_network) - Token auth format:
provider:token(e.g.,infura:abc123) - Basic auth format:
provider:username:password(e.g.,grove:user:pass) - Example:
--providers infura:TOKEN1 grove:user:pass status_network nodefleet:TOKEN2
-
Create .htpasswd file for nginx proxy authentication:
htpasswd -c secrets/.htpasswd dev -
Execute the following commands to start the system:
docker-compose -f docker-compose-local.yml up -d --build -
Run test requests:
# For Ethereum mainnet curl -u dev:<password> -X POST http://localhost:8080/ethereum/mainnet \ -H "Content-Type: application/json" \ -d '{"jsonrpc":"2.0","method":"eth_blockNumber","params":[],"id":1}' # For Status Network Sepolia curl -u dev:<password> -X POST http://localhost:8080/status/sepolia \ -H "Content-Type: application/json" \ -d '{"jsonrpc":"2.0","method":"eth_blockNumber","params":[],"id":1}'
The services will be accessible under:
- RPC Health Checker: http://localhost:8081
- Check the list of validated providers at http://localhost:8081/providers
- nginx-proxy: http://localhost:8080
- The new RPC endpoint is now available http://localhost:8080/{chain}/{network}
- Example paths:
/ethereum/mainnet,/status/sepolia
- Prometheus: http://localhost:9090
- Metrics and monitoring interface
- Grafana: http://localhost:3000 (default credentials: admin/admin)
- Visualization dashboards for RPC metrics and health status
Sub projects
Description
A robust Ethereum RPC proxy system with health checking and automatic failover between providers. Supports multiple chains (Ethereum, Optimism, Arbitrum, Base, Status and others) and networks (mainnet, sepolia) with comprehensive monitoring via Prometheus and Grafana
1.5 MiB
Languages
Go
59.5%
JavaScript
20%
Lua
12.4%
Python
4.4%
Shell
1.2%
Other
2.5%
