Wallets & apps
Read routing and limits
Understand proxy reads, public-provider failover, rate limits, and direct reads for custom clients.
3 min readOne URL, server-controlled failover#
Ordinary wallets use https://rpc.blockferret.win. Reads are proxied to eligible, healthy public PulseChain RPC providers. Public providers see the proxy server’s outbound IP.
The server can retry eligible infrastructure failures and select another provider. Signed transaction submissions use private intake and do not follow the public read path.
Public read limits#
Read budgets refill continuously and allow short page-load bursts. Each JSON-RPC batch member consumes client quota; the HTTP batch limit is 16 members.
| Budget | Sustained allowance | Burst allowance |
|---|---|---|
| Per client IP | 20 read items/second | 100 items |
| All client IPs | 50 read items/second | 200 items |
| Per public provider origin | 8 outbound requests/second | 16 requests |
| All public outbound attempts | 50 requests/second | 200 requests |
Provider budgets include retries and health checks. When an origin is paced, the proxy can try another eligible provider. Requests that cannot obtain local capacity receive a rate-limit response with a retry hint; local throttling does not force traffic onto the shared fallback.
Handle throttling in your app#
Respect Retry-After, back off on HTTP 429 or JSON-RPC -32005, and avoid retry loops. Cache chain identity, coalesce duplicate reads, and pause background polling in hidden tabs. Provider limits and outage conditions can still cause requests to fail.
Bounded Switch read fallback#
After eligible public providers are exhausted, a separately verified Switch PulseChain read RPC can serve eligible requests. It is limited to 6 fallback reads/minute/IP and 60/minute globally including health probes, with one request in flight and a 750 ms timeout.
Fallback simulations are capped at 500,000 gas without state overrides. Fee history is limited to 32 blocks and 20 percentiles. Stale or lagging fallback state is not used. The fallback never receives transaction submissions.
Direct reads for compatible clients#
A custom app can use our dependency-free helper to try a public read directly from the user’s device, then retry an eligible failure once through the original proxy URL. Direct requests use the device’s outbound IP; normal proxy fallback uses the server’s IP.
import { createPrivateRPCClient } from './private-rpc-client.mjs';
const rpc = createPrivateRPCClient();
const balance = await rpc.request({
method: 'eth_getBalance',
params: ['0xYOUR_ADDRESS', 'latest'],
});Download the example client and the full routing guide. The helper works with Fetch in Node.js 20+ or a browser.
Private write isolation#
Private writes, nonce reads, and mixed read/write batches use the original endpoint with redirects disabled. Execution reverts and invalid user parameters are returned without shopping for a different result. Ambiguous write timeouts are not automatically retried or broadcast publicly.