TriportRPC

Migrate from a public RPC to Triport

Move a Robinhood Chain integration from a keyless public endpoint to Triport: what changes in authentication, which methods you gain, how WebSocket and the sequencer feed are reached, which limits start applying, and how to roll back without a redeploy.

This is a migration for an application that already talks to Robinhood Chain (chain ID 4663) through a keyless endpoint — Triport's own public endpoint or another provider's. Nothing about the chain changes: same chain ID, same JSON-RPC 2.0 semantics, same block and receipt shapes. What changes is access, surface and accounting.

1. What you gain, in one table

Keyless publicTriport keyed
Endpointhttps://triport.io/rpc/robinhood/publichttps://triport.io/rpc/robinhood
Methods18 light readsthe full published catalog (27) — heavy reads, debug_* best-effort, writes
WebSocketnonewss://triport.io/ws/robinhoodnewHeads, logs (Basic+, scope robinhood:rpc)
Sequencer feednonewss://triport.io/ws/robinhood-feed (Pro+, scope robinhood:feed)
Authenticationnone — a key sent here is ignored and strippedx-token header (or Authorization: Bearer)
Limitsper-IP, may change without noticeper-plan, published
Availabilitybest-effort, no SLAplan-dependent

2. Authentication

Send the key as a header — this is the form to use in server-side code:

curl https://triport.io/rpc/robinhood \
  -H "x-token: $TRIPORT_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"jsonrpc":"2.0","id":1,"method":"eth_chainId","params":[]}'

Authorization: Bearer $TRIPORT_API_KEY is accepted as well. A keyed URL form, https://triport.io/r/<API_KEY>/rpc/robinhood, exists for wallets and tools that accept only a URL — use it only there, and keep such URLs out of logs, screenshots and bug reports: the URL is the credential.

For a library that takes a transport, the change is a header, not a rewrite. See the Quickstart for viem, ethers, Hardhat and Foundry forms.

3. Methods: what appears after the switch

The keyless endpoint serves 18 light reads. After migrating you also get the heavy reads (eth_getLogs over wide ranges, eth_getBlockReceipts, proofs), the best-effort debug_* family, and transaction submission. Two rules survive the migration unchanged and deserve a re-read before you widen usage:

  • debug_* is best-effort with no SLA and is not a trace_* substitute — see RPC behavior and Debugging reverts.
  • safe and finalized block tags are not part of this contract; depth-based confirmation is the supported approach.

4. WebSocket and the feed are new surfaces, not faster HTTP

newHeads and logs arrive over wss://triport.io/ws/robinhood from Basic. They are a different delivery contract, not a cheaper poll: delivery promises neither exactly-once nor ordering, so client-side de-duplication is mandatory and reorgs arrive as removed: true. Start from logs and the worked example in Track Stock Token transfers.

The sequencer feed (wss://triport.io/ws/robinhood-feed, Pro+) carries assembled L2 blocks with a bounded replay window — 8,192 frames, 64 MiB or five minutes, whichever comes first, lost on process restart. It is an operational buffer, not history; see Consume the sequencer feed and Feed resume.

If you are migrating in order to build an index, read Index Robinhood Chain activity first — it chooses between the two sources for you.

5. Limits start applying

CategoryFreeBasicProBusinessEnterprise
robinhood_read_rpc1520100250unlimited
robinhood_read_rpc_heavy1520100250unlimited
robinhood_send_tx353080unlimited

Concurrent feed streams: 2 on Pro, 4 on Business and Enterprise. The per-second figures carry status unmeasured — they are the configured policy, not a measured throughput promise. Batch bodies and the 4 MiB ceiling are accounted as described in Limits.

6. Roll back without a redeploy

Make the endpoint a configuration value before you migrate, not after:

RPC_URL=https://triport.io/rpc/robinhood
RPC_FALLBACK_URL=https://triport.io/rpc/robinhood/public

Verify the new path with two calls that cannot be faked by a cached response — eth_chainId must return 0x1237, and eth_blockNumber must advance between two calls a few seconds apart. Roll back by pointing RPC_URL at the previous endpoint if either holds: the chain ID does not match, or a method your application depends on is not in the keyless set (the 18 light reads) — in the second case the rollback is partial by definition and you should keep the keyed endpoint for those calls.

Rolling back does not restore WebSocket or feed access: those surfaces do not exist keyless, so any code path that depends on them must degrade to polling rather than fail.

7. Benchmarking methodology (RH09)

Triport does not publish a Robinhood benchmark landing, and this guide does not quote comparative latency numbers. If you need to compare providers, measure your own path:

  1. Compare like with like. A keyless endpoint and a keyed one have different limits and different queueing; measuring one against the other measures the plan, not the network.
  2. Measure the tail, not the average. The value of a merged receive layer shows up in the share of samples delayed beyond a threshold, not in the mean.
  3. Use an independent head. An endpoint's own report of its height is not evidence; compare against a second source.
  4. State the window and the sample count with every number, and keep the raw samples.

Triport's own measurements follow that shape and the raw artefacts are in the repository: single-socket tail samples for US and EU, and the analysis in latency and fast paths. Figures quoted in Sequencer feed link back to those files rather than to a marketing page.

  • Public endpoint — the 18 keyless methods and their per-IP limits.
  • Quickstart — connecting, keys in URLs vs headers, library forms.
  • Limits — budgets, batch accounting, the body ceiling.
  • RPC behavior — how block history, state, logs, traces and feed replay differ.