Fast, self-hosted multi-chain RPC proxy with endpoint racing, automatic failover, and intelligent caching
Loading network status...
| Network | reverseRPC | Official RPC | Difference |
|---|---|---|---|
| Ethereum | 181ms | 298ms | -117ms (39% faster) |
| BSC | 146ms | 285ms | -139ms (49% faster) |
| Polygon | 184ms | 312ms | -128ms (41% faster) |
| Arbitrum | 174ms | 298ms | -124ms (42% faster) |
| Optimism | 188ms | 247ms | -59ms (24% faster) |
| Robinhood Chain | 195ms | 203ms | -8ms (4% faster) |
| Base | 192ms | 178ms | +14ms (8% slower) |
reverseRPC — это самохостящийся multi-chain EVM JSON-RPC прокси, который агрегирует бесплатные RPC эндпоинты из кошельков (OKX, Bitget, Rabby) и публичных источников (Chainlist). Прокси автоматически выбирает самые быстрые ноды, балансирует нагрузку и обеспечивает failover.
eth_subscribe с автоматическим upstream менеджментом1. HTTP запросы (curl):
curl https://2-29-1-165.sslip.io/1 \
-X POST \
-H "Content-Type: application/json" \
-d '{"jsonrpc":"2.0","method":"eth_blockNumber","params":[],"id":1}'
2. ethers.js / viem:
// ethers v6
const provider = new ethers.JsonRpcProvider("https://2-29-1-165.sslip.io/1");
const block = await provider.getBlockNumber();
// viem
import { createPublicClient, http } from 'viem';
import { mainnet } from 'viem/chains';
const client = createPublicClient({
chain: mainnet,
transport: http('https://2-29-1-165.sslip.io/1')
});
3. WebSocket (eth_subscribe):
const provider = new ethers.WebSocketProvider("wss://2-29-1-165.sslip.io/ws/1");
provider.on("block", (blockNumber) => {
console.log("New block:", blockNumber);
});
Health Check API для автоматического discovery сетей:
GET https://2-29-1-165.sslip.io/health
Response:
{
"status": "ok",
"chains": {
"1": {
"name": "Ethereum",
"healthy": true,
"healthyEndpoints": 7,
"totalEndpoints": 7,
"avgLatency": 170
}
}
}
Агент может опросить /health чтобы узнать список доступных сетей, их статус и среднюю latency перед тем как делать RPC вызовы.
Все стандартные JSON-RPC методы:
eth_blockNumber, eth_getBlockByNumber, eth_getBlockByHasheth_call, eth_estimateGas, eth_sendRawTransactioneth_getBalance, eth_getCode, eth_getStorageAteth_getTransactionByHash, eth_getTransactionReceipt, eth_getTransactionCounteth_getLogs, eth_getFilterLogs, eth_newFiltereth_subscribe, eth_unsubscribe (только WebSocket)/metrics эндпоинтеHTTP Endpoint:
https://2-29-1-165.sslip.io/{chainId}
WebSocket Endpoint:
wss://2-29-1-165.sslip.io/ws/{chainId}
Example (ethers.js):
const provider = new ethers.JsonRpcProvider(
"https://2-29-1-165.sslip.io/1"
);
const blockNumber = await provider.getBlockNumber();
console.log(blockNumber);
Supported Methods: All standard JSON-RPC methods including eth_call, eth_getBalance, eth_getTransactionReceipt, eth_subscribe (WebSocket)
Health Check API:
GET https://2-29-1-165.sslip.io/health
Response Format:
{
"status": "ok",
"chains": {
"1": {
"name": "Ethereum",
"healthy": true,
"healthyEndpoints": 7,
"totalEndpoints": 7,
"wsEndpoints": 2,
"healthyWsEndpoints": 2,
"avgLatency": 170
}
}
}
Usage: Query /health to discover available networks, check endpoint status, and measure latency before making RPC calls
Stack: TypeScript, Express, WebSocket, node-cache, prom-client
Hosting: Hetzner CX33 ($12/mo) at 2.29.1.165, systemd service
Endpoint Sources: Aggregated from OKX Wallet, Bitget, Chainlist, and Rabby
Load Balancing: Smooth weighted round-robin biased by measured latency
Reliability: Circuit breaker (exponential backoff 1m→2m→4m→30m cap), token-bucket rate limiting, LRU cache
Monitoring: Prometheus metrics at /metrics endpoint