NexFlow › Library › Fantom RPC endpoint guide
Fantom RPC endpoint: how to read Opera in 2026
Fantom Opera is still running and still answering JSON-RPC, but it is no longer where the ecosystem's activity lives — the Fantom documentation says Opera migrated to a new chain called Sonic in December 2024. If you maintain a wallet, an indexer, an accounting export or a historical dashboard that touches Opera, this guide covers a working endpoint and the quirks we hit reading it.
The endpoint: https://nexflowscan.com/api/rpc/fantom. It accepts standard Ethereum JSON-RPC over HTTPS POST, needs no key for baseline reads, and routes each call through the keyless upstream providers the relay keeps in its pool for Opera. On this chain that pool is smaller than on our busier networks — two public upstreams at the time of writing — which is worth knowing if you are deciding how much redundancy to build on your side.
Who still needs Opera reads? More people than the migration headline suggests. Tax and accounting tools reconstruct historical transfers. Holders who never moved check balances before migrating FTM. Auditors and researchers query old contract state. Protocols that wound down on Opera still have users asking what they hold. All of that is read traffic, and all of it needs an endpoint that answers correctly.
Confirm you are on Opera
Opera and Sonic are different chains with different chain IDs, and it is easy to paste the wrong URL. The chain-ID call settles it in one round trip; the block-number call confirms the node behind the relay is live.
Fantom Opera: identity and height
Free lane, no key. Responses shown are what our relay returned on 2026-09-27.
curl -s -X POST https://nexflowscan.com/api/rpc/fantom \
-H 'content-type: application/json' \
-d '{"jsonrpc":"2.0","id":1,"method":"eth_chainId","params":[]}'
# {"jsonrpc":"2.0","result":"0xfa","id":1}
curl -s -X POST https://nexflowscan.com/api/rpc/fantom \
-H 'content-type: application/json' \
-d '{"jsonrpc":"2.0","id":1,"method":"eth_blockNumber","params":[]}'
# {"jsonrpc":"2.0","result":"0x75bc68d","id":1}
0xfa is 250, Fantom Opera's chain ID. 0x75bc68d is block 123,455,117. Here is the telling detail: earlier in the same session, block 123,455,113 carried a timestamp of 19:53:51 UTC, and at 20:04:12 UTC the latest block was 123,455,142. That is 29 blocks in a little over ten minutes, roughly one every 21 seconds. It is not a stalled node — the height kept moving — it is what a quiet chain looks like when blocks are produced in response to activity rather than on a fixed clock.
Why Opera's block timing looks strange
The Fantom documentation's Consensus page describes Opera as using a proof-of-stake, DAG-based asynchronous Byzantine fault tolerant mechanism, and cites the Lachesis paper for the technical detail. Each validator batches incoming transactions into event blocks in its own local DAG; those events are exchanged and ordered, and the final blocks you see through RPC are the result. The docs note that event-block generation is internal and not visible to end users.
The consequence for a client is that "block time" is not a constant you can plan around. We measured it two ways on 2026-09-27: the most recent 1,000 blocks averaged 9.2 seconds apart, while the most recent 10,000 averaged 3.97 seconds. The shorter window was slower, which is what you would expect if activity has been tapering. Any code that converts a block count into wall-clock time on Opera — "wait 20 blocks", "look back one day's worth of blocks" — will be wrong in a way that drifts. Use block timestamps instead: fetch the block with eth_getBlockByNumber and read its timestamp field.
The same documentation, on its Build on Opera overview, says Opera provides fast transaction finality, typically within one second. A block that the network has produced is, for practical purposes, final; there is no long probabilistic tail like on proof-of-work chains, and no multi-hour settlement window like on a rollup.
The block-tag trap: safe and finalized fail
Many modern EVM libraries default to asking for the safe or finalized block when they want reorg-resistant data. On Opera, through our relay, those tags do not work. Our requests for eth_getBlockByNumber with "safe" and with "finalized" both returned the upstream error "invalid argument 0: hex string without 0x prefix" — the node treats the tag as a malformed block number.
| Block tag | Opera via our relay | What to do instead |
|---|---|---|
| latest | Works | Default choice; blocks finalize quickly per the docs |
| explicit number | Works | Best for reproducible historical reads |
| safe | Rejected | Use latest, or a hex number a few blocks back |
| finalized | Rejected | Same — pass a concrete block number |
If your stack is a multi-chain indexer that uses one code path for every network, add an Opera exception: pin reads to explicit block numbers, which also makes them reproducible. Historical and accounting workloads benefit from that anyway, because a report built at block N can be rebuilt and checked at block N later.
Opera integration checklist: verify chain ID 250 before trusting any response; never pass safe or finalized; convert time using block timestamps, not block counts; and assume a thinner provider pool than on the chain's peak years, so keep a second endpoint configured for anything important.
FTM fees, and what the numbers look like now
The Fantom documentation's Transaction Fees page states that every transaction on Opera requires a fee paid in FTM, the chain's native token, and gives the current split: 5% burned, 10% to the Ecosystem Vault, 15% to Gas Monetization, and 70% to validators. None of that changes how you estimate gas through RPC, but it explains where fees go if you are writing documentation for users.
What our reads returned on 2026-09-27: the latest block's base fee was 1,000,000,000 wei (1 gwei), eth_gasPrice answered 1,025,003,000 wei, and eth_maxPriorityFeePerGas answered 25,002,000 wei. Those are one-session readings, not averages, and they will change. The same block header reported a gas limit of 281,474,976,710,655 — a placeholder maximum, not a capacity figure — so do not build block-fullness metrics from it.
Estimate every transaction with eth_estimateGas rather than reusing limits from another chain. For balance checks, remember that FTM on Opera is the native balance returned by eth_getBalance; the Sonic chain's token is a separate asset on a separate network, and a balance on one does not appear on the other.
Relay scope on Opera
The relay forwards the Ethereum read methods that historical and wallet workloads depend on: eth_getBalance, eth_call, eth_getLogs, block and transaction lookups, receipts, eth_estimateGas, eth_feeHistory and filters. The client-version string we received identified a third-party gateway, which is expected: the relay's job is routing across providers, not running every node itself.
Signing and node-internal methods are refused. eth_sign and txpool_content returned -32601, "Method not allowed on this relay", and the Fantom lane page states that sends and signs are refused on the public lane. For an Opera wallet that still needs to move funds — to migrate them, for instance — sign in the wallet and broadcast through a provider you control.
Large eth_getLogs ranges deserve care on any chain, and on Opera the block numbers are large and the history is long. Page through history in bounded windows and keep each batch well inside the lane's limits; a single enormous log query is more likely to time out upstream than to return.
Lanes and pricing for Opera reads
Our relay, as of 2026-09-27, offers the same three lanes on Fantom as on every other chain it serves:
| Lane | Endpoint and payment | Capacity |
|---|---|---|
| Free baseline | nexflowscan.com/api/rpc/fantom, keyless | the first 50 calls per IP, at up to 300 items/min in batches of 25 — then the paid lanes |
| Keyed | Same URL plus an rk1_ key; $25 one-time, USDC on Solana or Base | 3,000 items/min, batches up to 100 |
| x402 | rpc.nexflowscan.com/api/v1/x402/rpc/fantom, $0.002 per call | Paid per request; batches up to 10 |
Opera workloads tend to be bursty: a tax export that pulls years of history at once, then nothing for a month. For that pattern the x402 lane can make more sense than the flat key — you pay only for the calls in the burst, with no account to maintain. The x402 RPC page explains how the 402 challenge and payment header work. For an always-on service, such as a wallet backend that still supports Opera balances, the flat key described on the integration page is simpler to budget.
Whichever lane you pick, batch items count individually against the per-minute allowance, and the free lane answers HTTP 402 when its window is used up — a clear signal to switch lanes rather than a silent failure.
Frequently asked
What is the Fantom Opera chain ID?
Fantom Opera mainnet uses chain ID 250, returned by eth_chainId as 0xfa. Our relay at https://nexflowscan.com/api/rpc/fantom returned that value on 2026-09-27. Sonic, the chain Opera migrated to, has its own separate chain ID.
Is Fantom Opera still running after the Sonic migration?
Yes. The Fantom documentation says Opera migrated to a new chain called Sonic in December 2024, but Opera still produces blocks and answers RPC reads. Activity is low, so blocks arrive irregularly — during testing we saw 29 new blocks in about ten minutes.
Why does eth_getBlockByNumber with finalized fail on Fantom?
Through our relay, Opera rejects the safe and finalized tags with the error "invalid argument 0: hex string without 0x prefix". Use latest or an explicit hex block number. The Fantom docs describe finality as typically within one second, so latest is already close to final.
What is the block time on Fantom Opera?
It is not fixed. Opera's DAG-based consensus produces blocks in response to activity, and our reads averaged 9.2 seconds per block over the last 1,000 blocks but 3.97 seconds over the last 10,000. Use block timestamps rather than block counts to measure time.
Can I migrate or send FTM through the free Fantom RPC lane?
Use the lane for reads only. Signing methods are refused and the lane page states sends and signs are refused on the public lane. Sign in your wallet and broadcast through a provider you control or pay for.