Skip to content

Feature gaps in etherproxy (failover, caching TTL, status endpoints) — proposing rpcproxy #48

@mahiarirani

Description

@mahiarirani

Hey everyone. I built rpcproxy, a high-performance JSON-RPC reverse proxy in Rust, intended as a drop-in replacement for etherproxy for people who are hitting missing features / unresolved issues.

Why it’s better (in practice):

  • Priority-based failover: give it multiple upstream RPC URLs in order; it automatically skips backends that are down or unhealthy.
    Active health checking: it continuously probes upstreams (via eth_blockNumber) and marks nodes unhealthy/stale, so you don’t keep routing to dead RPCs.
  • Smart caching (method-aware TTLs): immutable calls cache for ~1 hour, chain-tip calls use a configurable TTL — significantly reduces upstream load without breaking correctness.
  • Request coalescing: identical in-flight requests get deduped so spikes don’t stampede your upstream.
  • Full batch JSON-RPC support.
  • Auth that works for “URL-only” clients: optional URL path token auth, which helps for clients that can’t set custom headers (example: Bee).
  • Operational endpoints: /health plus authenticated /readiness and /status so you can actually see backend state + cache stats.
  • Docker-ready with a real healthcheck.

If you’re running etherproxy today mainly to stabilize RPC access but need stronger caching/failover/health visibility, rpcproxy should be a better fit.

Quick start:

docker run -p 9000:9000 ghcr.io/metaprovide/rpcproxy:latest \
  --targets https://rpc1.example,https://rpc2.example

Repo: https://github.com/MetaProvide/rpcproxy
I’d love issues/PRs, especially from folks migrating off etherproxy or needing specific RPC-method caching rules.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions