Skip to content
This repository was archived by the owner on Jul 22, 2024. It is now read-only.
/ rpc-gateway Public archive

A failover proxy for node providers

License

Notifications You must be signed in to change notification settings

0xProject/rpc-gateway

Folders and files

NameName
Last commit message
Last commit date

Latest commit

e46861f · Jul 22, 2024
Feb 22, 2024
Feb 15, 2022
Feb 26, 2024
May 13, 2022
Feb 20, 2024
Feb 26, 2024
May 5, 2022
Feb 20, 2024
Aug 24, 2022
Jul 22, 2024
Feb 22, 2024
Feb 26, 2024
Feb 26, 2024
Feb 22, 2024

Repository files navigation

Caution

The repository has been marked as read-only, and no further updates or maintenance will be provided.

RPC Gateway

The rpc-gateway is a failover proxy for node providers. When health checks fail, the rpc-gateway automatically routes requests to a backup node provider.

Loading
sequenceDiagram
Alice->>RPC Gateway: eth_call
loop Healthcheck
    RPC Gateway->>Alchemy: Check health
    RPC Gateway->>Infura: Check health
end
Note right of RPC Gateway: Routes only to healthy targets
loop Configurable Retries
RPC Gateway->>Alchemy: eth_call?
Alchemy-->>RPC Gateway: ERROR
end
Note right of RPC Gateway: RPC Call is rerouted after failing retries
RPC Gateway->>Infura: eth_call?
Infura-->>RPC Gateway: {"result":[...]}
RPC Gateway-->>Alice: {"result":[...]}

Development

Make sure the test pass

go test -v ./...

To run the app locally

DEBUG=true go run . --config example_config.yml

Configuration

metrics:
  port: "9090" # port for prometheus metrics, served on /metrics and /

proxy:
  port: "3000" # port for RPC gateway
  upstreamTimeout: "1s" # when is a request considered timed out

healthChecks:
  interval: "5s" # how often to do healthchecks
  timeout: "1s" # when should the timeout occur and considered unhealthy
  failureThreshold: 2 # how many failed checks until marked as unhealthy
  successThreshold: 1 # how many successes to be marked as healthy again

targets: # the order here determines the failover order
  - name: "Cloudflare"
    connection:
      http: # ws is supported by default, it will be a sticky connection.
        url: "https://cloudflare-eth.com"
  - name: "Alchemy"
    connection:
      http: # ws is supported by default, it will be a sticky connection.
        url: "https://alchemy.com/rpc/<apikey>"