Appearance
Migrating from Infura
For EVM chains the migration is a URL swap. Infura embeds the key in the URL path; we accept the key either as a query parameter (drop-in, zero code changes) or — recommended for production — as an apikey header.
The one-line diff
diff
- const RPC_URL = `https://mainnet.infura.io/v3/${INFURA_KEY}`
+ const RPC_URL = `https://rpc.lab.au.ro/eth?apikey=${YOUR_API_KEY}`That's it for ethers, viem, web3.js, web3.py, foundry's --rpc-url, hardhat networks — anything that takes an RPC URL.
| Infura | AU.RO |
|---|---|
https://mainnet.infura.io/v3/KEY | https://rpc.lab.au.ro/eth?apikey=KEY |
https://bsc-mainnet.infura.io/v3/KEY | https://rpc.lab.au.ro/bsc?apikey=KEY |
https://polygon-mainnet.infura.io/v3/KEY | https://rpc.lab.au.ro/polygon?apikey=KEY |
https://avalanche-mainnet.infura.io/v3/KEY | https://rpc.lab.au.ro/avax?apikey=KEY |
Header beats query in production
URLs leak into logs, shell history and error reporters. The header form is two extra lines:
js
// ethers v6
const req = new ethers.FetchRequest('https://rpc.lab.au.ro/eth')
req.setHeader('apikey', process.env.YOUR_API_KEY)
const provider = new ethers.JsonRpcProvider(req)
// viem
transport: http('https://rpc.lab.au.ro/eth', {
fetchOptions: { headers: { apikey: process.env.YOUR_API_KEY } }
})Semantics to re-check
- Rate limiting: Infura bills credits/day with burst RPS; we enforce per-minute/hour/day request windows + a CU day-quota (Rate limits). Watch
x-ratelimit-remaining-minute. eth_getLogs: Infura caps ~10k results; we rate-limit it to 1/min (75 CU) — batch your ranges accordingly.- WebSockets:
wss://subscriptions are not available yet — polleth_blockNumber(2 s server cache) or see WebSockets. - Archive/trace: Infura's
trace_*add-on has no equivalent here yet. - Non-EVM: Infura's IPFS/Starknet products are out of scope; our Bitcoin-family and other L1s are native protocols, not EVM-wrapped.