Five chain-isolated networks: Ethereum Mainnet, Base, Arbitrum One, OP Mainnet, and Polygon PoS. Each network has separate HTTP, WebSocket, and local cache namespaces.
Official zero-dependency JavaScript SDK with an EIP-1193 provider and viem-compatible transport.
Non-submitting transaction simulation through rpc_relay_simulateTransaction (eth_call, eth_estimateGas, and eth_createAccessList).
Signed confirmed-log webhooks with explicit event IDs and at-least-once delivery.
Pro and Pro+ tiers with queue-aware rate limits, token management, webhook configuration, and benchmark support.
Tier boundaries
Free: 10 logical RPC calls per 60 seconds per account. Edge only; no local accelerator or WebSocket.
Pro: 300 logical calls per 10 seconds per account per Cloudflare location. Includes the local cache accelerator.
Pro+: 600 logical calls per 10 seconds per account per Cloudflare location. Includes everything in Pro, plus supported trace methods through the normal JSON-RPC endpoint and token APIs.
Token APIs
GET /api/token/balance returns ERC-20 balance for a Pro or Pro+ account.
GET /api/token/prices is not provided.
GET /api/transfers/:address returns ERC-20 transfer logs filtered to the requested address for a Pro or Pro+ account.
Trace methods
Supported in Pro+ through the normal JSON-RPC endpoint:
debug_traceCall with a required tracer parameter: { tracer: callTracer }.
Not supported:
debug_traceTransaction
trace_call
trace_transaction
Other Debug namespace methods beyond the supported call-tracing path above
Unsupported trace requests return an explicit error instead of invented data.
For transaction simulation, use rpc_relay_simulateTransaction.
Limits and honest boundaries
A batch is charged by the number of logical calls, not as one call.
WebSocket connections accept at most 32 messages in flight and 20 calls per batch.
Messages, bodies, and upstream calls retain hard size, concurrency, and timeout limits.
Missing chain data returns an explicit error when a network route is not configured for the selected chain id.
Malformed JSON-RPC requests return -32600 with a short message. Always send {"jsonrpc":"2.0","id":1,"method":"...","params":[...]}.
Subrequest-limit responses return -32000. Retry after backoff; the published batching envelope stays at or below 20 logical calls per miss.
Auth failures return 401 or explicit invalid-token responses. Tokens are HMAC signed and rotated through /api/token/rotate.
Cold misses still pay internet transit and upstream latency. Published sub-5ms/1.55ms numbers apply to warm local reads only.
Deliberately gated
Transaction submission is disabled unless TRANSACTION_SUBMISSION_ENABLED=true; production enablement requires nonce coordination, simulation policy, abuse prevention, provider terms, and explicit customer controls.
Paymasters and gas sponsorship require a funded sponsor policy, per-account budgets, allowlists, replay protection, and legal/billing review.
Pay-as-you-go overages require strongly consistent invoice-grade metering. Current counters and Cloudflare rate limits are operational controls, not billing records.
Dropped/pending-transaction webhooks require a real mempool feed. The current webhook pilot delivers confirmed logs only.
A 99.9% SLA requires measured multi-region origin capacity, incident response, error budgets, and contractual terms; it cannot be created by changing copy.
Team seats require organization membership, scoped tokens, roles, audit logs, and account recovery.
Build-versus-integrate decisions
Viem's official custom transport is the SDK extension point; ethers users can consume the EIP-1193 provider or localhost JSON-RPC URL.
High-volume historical and live indexing should integrate a maintained indexer such as SQD or Envio HyperIndex/HyperSync rather than rebuilding a chain index inside a request Worker.
Simulation uses standard node methods first. Provider-specific state-diff and asset-change enrichment should be added through capability adapters so unsupported public nodes fail explicitly instead of returning invented data.
Advanced RPC Methods
debug_traceCall
Pro+ users can call debug_traceCall through the normal JSON-RPC endpoint. The tracer parameter is required; without it, the request fails.
Warm local hits do not leave the device. Padded, shuffled miss batches reduce direct one-action/one-request correlation, but they are not private information retrieval: the Relay Worker can inspect misses and the selected upstream sees the padded batch. Marketing must not claim that no provider can profile all strategy activity.
References
- Viem custom transports: https://viem.sh/docs/clients/transports/custom
- Ethers abstract providers and plugins: https://docs.ethers.org/v6/api/providers/abstract-provider/
- SQD EVM log filtering: https://docs.sqd.dev/en/sdk/squid-sdk/reference/processors/evm-batch/logs
- Envio documentation: https://docs.envio.dev/
- Live status: /status
← Back to home