Every signed transaction is routed through our private execution path before reaching the sequencer. Simulated first, refused if it would revert, never on a public relay. No toggle. No separate API. Just use rpc.ordofi.network.
Three things, in order, on every eth_sendRawTransaction, for wallets with no key at all.
Every send is executed from the recovered sender against current state before it is forwarded. If it would revert, it is rejected with code -32000 and never reaches the sequencer, no gas for a guaranteed failure. If it would pay an address nobody controls (a precompile, the zero or dead address, the classic unwrapWETH9(…, address(1)) mistake), or hand an unlimited allowance to a plain wallet, it is rejected the same way. ordo_sendRawTransaction with { "allowUnlimitedApproval": true } overrides it if you meant it.
Transactions never touch a public mempool before execution. They go to the sequencer operator's own ingress and to nobody else first. No toggle, no separate endpoint, no wallet extension: if your wallet uses Ordo RPC, private delivery is the default.
With a key that carries a rebate address, transactions that move a pool go through a sealed-bid, second-price auction for the right to rebalance it. The clearing price is charged on-chain and 90% comes back as rebates, to the user who created it.
Get a key →Add these manually in any wallet, or use the button above.
| Network name | Robinhood Chain |
|---|---|
| RPC URL | https://rpc.ordofi.network copy |
| WebSocket | wss://rpc.ordofi.network copy |
| Chain ID | 4663 (0x1237) |
| Currency | ETH |
| Block explorer | robinhoodchain.blockscout.com |
| Send path | Private Send · our node → sequencer · never a public relay |
| Tracing | debug_traceTransaction · no key · last ~1.2M blocks |
| Auth | none for wallets · x-api-key for plans, auction routing & bundles |
| Rate limit | 3,000 upstream reads/min per IP anonymous · per plan with a key |
eth_sendRawTransaction → automatically private. Standard eth_* methods pass through. OrdoFi adds ordo_simulate, ordo_sendPrivateTransaction, ordo_sendBundle, ordo_bundlerInfo and ordo_quoteSwap.
# Private Send, same method every wallet already calls curl https://rpc.ordofi.network \ -H 'content-type: application/json' \ -d '{"jsonrpc":"2.0","id":1,"method":"eth_sendRawTransaction","params":["0x02f8…"]}' # dry-run first, no key needed curl https://rpc.ordofi.network \ -H 'content-type: application/json' \ -d '{"jsonrpc":"2.0","id":1,"method":"ordo_simulate","params":["0x02f8…"]}' # and when it already failed: which call reverted, no key curl https://rpc.ordofi.network \ -H 'content-type: application/json' \ -d '{"jsonrpc":"2.0","id":1,"method":"debug_traceTransaction","params":["0x…",{"tracer":"callTracer"}]}'
Tracing is behind a paid key almost everywhere, because a hosted provider pays for every replay. We run the node, so it is open: debug_traceTransaction, debug_traceCall and the block tracers, no key, 120/min per IP. Our node holds about a day and a half of state and traces inside it in tens of milliseconds. Older transactions fall through to a fallback upstream; when that is unavailable the error says so plainly.
The chain's own RPC is HTTP only, so anything watching it has to poll. wss://rpc.ordofi.network answers eth_subscribe for newHeads and logs, and carries ordinary calls on the same socket. No key. Watch it →
# every block, pushed, no key wscat -c wss://rpc.ordofi.network > {"jsonrpc":"2.0","id":1,"method":"eth_subscribe","params":["newHeads"]} # or from viem, watchBlocks and watchEvent just work const client = createPublicClient({ chain, transport: webSocket("wss://rpc.ordofi.network") }); client.watchBlocks({ onBlock: (b) => console.log(b.number) });
Keys and plans are self-served at app.ordofi.network/account; the method reference, error codes and bundle semantics are in the docs.
Wallets need nothing. Apps, bots and terminals get a key with a budget in ten seconds. Priced in dollars, paid in ETH or USDG. One key works on every network Ordo serves.