Summary
This article explains how to evaluate leading Solana RPC providers for production workloads, covering the criteria that matter most: throughput, archive data access, WebSocket support, failover, and operational visibility. It also shows how OnFinality's Solana RPC API and dedicated nodes fit into a multi-provider setup, with practical configuration examples and a decision framework.
Provider evaluation matrix
When teams search for leading Solana RPC providers, they usually need to make a concrete decision: which endpoint (or set of endpoints) should sit behind a production app, a trading bot, an indexer, or a wallet? The answer depends less on brand names and more on how each provider handles the specific Solana workloads you run.
Use the matrix below as a starting point. It maps common Solana workloads to the provider characteristics that matter most, so you can shortlist providers before you benchmark anything.
| Workload | What to prioritize | Why it matters on Solana |
|---|---|---|
| Wallet or consumer app | Reliable shared RPC, WebSocket support, sane rate limits | Users notice dropped confirmations and stale account data immediately |
| Trading bot / market maker | Low-latency sendTransaction, dedicated capacity, priority fee visibility | Slot timing is tight and shared endpoints can add unpredictable queueing |
| Indexer / analytics | Archive access, getProgramAccounts, large getSignaturesForAddress scans | Historical state and wide account scans are heavy and often rate-limited |
| NFT mint or drop | Burst capacity, WebSocket subscriptions, failover | Traffic spikes are short but intense, and a single endpoint can saturate |
| Bridge or oracle | Deterministic finality checks, redundant providers, monitoring | Correctness depends on consistent view of confirmed slots |
OnFinality provides a Solana RPC API that covers shared and dedicated deployments, with HTTP and WebSocket transports. For teams that need isolated capacity, dedicated nodes remove noisy-neighbor effects that shared pools can introduce.
What "leading" actually means for Solana RPC
Solana is not an EVM chain, and that changes what a good RPC provider looks like. A few Solana-specific realities shape provider selection:
- Slot and block production are fast. Providers must keep up with continuous block production, and lagging nodes fall behind quickly.
- Account and program queries are expensive. Calls like
getProgramAccountsandgetSignaturesForAddresscan return large payloads and are frequently rate-limited or disabled on shared endpoints. - WebSocket subscriptions are common.
accountSubscribe,logsSubscribe, andslotSubscribeare used heavily by wallets, bots, and dashboards. - Transaction sending is competitive.
sendTransactionbehavior, priority fee handling, and retry logic differ between providers. - Archive depth varies. Some providers only serve recent slots; others keep deeper history for indexers and analytics.
A provider that looks strong on a generic RPC comparison page may still be a poor fit if it throttles getProgramAccounts or lacks WebSocket support. That is why workload fit matters more than a single headline number.
Chain settings and endpoint reference
Before comparing providers, confirm the network settings you will configure in your client. For Solana mainnet, the relevant values are:
| Setting | Value |
|---|---|
| Chain name | Solana Mainnet |
| Native currency | SOL (9 decimals) |
| HTTP RPC (OnFinality public) | https://solana.api.onfinality.io/public |
| WebSocket RPC (OnFinality public) | wss://solana.api.onfinality.io/public-ws |
| Block explorer | https://explorer.solana.com |
For development and testing, use Solana Devnet so you are not spending real SOL or competing for mainnet capacity. A minimal JSON-RPC health check looks like this:
curl https://solana.api.onfinality.io/public \
-X POST \
-H "Content-Type: application/json" \
-d '{
"jsonrpc": "2.0",
"id": 1,
"method": "getHealth"
}'
A healthy node returns {"jsonrpc":"2.0","result":"ok","id":1}. If you see an error or a timeout, that endpoint is not ready for production traffic.
How to compare providers without guessing
The fastest way to compare leading Solana RPC providers is to run the same small set of probes against each candidate. Do not rely on marketing pages; measure the calls your app actually makes.
1. Measure the methods you depend on. For most apps that means getLatestBlockhash, getAccountInfo, sendTransaction, and at least one subscription. A provider that is fast on getSlot but slow on getProgramAccounts will disappoint an indexer.
2. Test under realistic concurrency. Run your probe at the request rate your production app generates, not one request at a time. Shared endpoints often behave well at low load and degrade under bursts.
3. Check WebSocket stability. Open a subscription and let it run for an hour. Count disconnects and missed notifications. Wallets and bots depend on this staying up.
4. Confirm archive depth. If you need historical data, ask explicitly how far back the provider serves and whether archive access is included or billed separately.
5. Verify failover behavior. Point your client at two providers and confirm your code actually switches when the primary fails. A second endpoint you never exercise is not a failover plan.
A simple Node.js probe using @solana/web3.js looks like this:
import { Connection, PublicKey } from "@solana/web3.js";
const endpoints = [
"https://solana.api.onfinality.io/public",
// add your other candidate endpoints here
];
for (const url of endpoints) {
const connection = new Connection(url, "confirmed");
const start = Date.now();
try {
const slot = await connection.getSlot();
const blockhash = await connection.getLatestBlockhash();
console.log(url, "slot", slot, "ms", Date.now() - start, "blockhash", blockhash.blockhash);
} catch (err) {
console.error(url, "failed:", err.message);
}
}
Run this on a schedule and log the results. Over a few days you will have a clearer picture than any static comparison table can give you.
Shared RPC versus dedicated Solana nodes
Most teams start on shared RPC and move to dedicated capacity when a specific symptom appears. The table below maps symptoms to the likely fix.
| Symptom | Likely cause | What to try |
|---|---|---|
| Intermittent 429 responses | Shared pool rate limits | Raise plan limits or move hot paths to dedicated nodes |
getProgramAccounts times out | Method throttled on shared endpoints | Dedicated node or a provider that allows the method |
| WebSocket drops during peak | Shared subscription capacity | Dedicated WebSocket endpoint |
Inconsistent sendTransaction results | Queueing and retry differences | Dedicated node with predictable send path |
| Historical queries fail | No archive access | Provider with archive support |
OnFinality's dedicated nodes are aimed at teams that have hit one of these symptoms and need isolated capacity. For teams still validating an idea, the shared Solana RPC API is usually the right starting point.
A practical failover pattern
Failover on Solana should be explicit in your client code. A common pattern is a primary endpoint with one or two backups, plus a health check that runs before you send critical transactions.
const providers = [
"https://solana.api.onfinality.io/public",
"https://your-backup-endpoint.example.com",
];
async function withFailover(fn) {
for (const url of providers) {
const connection = new Connection(url, "confirmed");
try {
return await fn(connection);
} catch (err) {
console.warn("provider failed, trying next:", url, err.message);
}
}
throw new Error("all Solana RPC providers failed");
}
await withFailover((connection) =>
connection.sendRawTransaction(signedTx.serialize())
);
Keep the failover list short and tested. Rotating through five endpoints you have never exercised adds latency without adding reliability.
Operational checklist before you commit
Before you sign a contract or route production traffic to any provider, confirm the following:
- The methods your app calls are explicitly supported, including any
getProgramAccountsor archive queries. - WebSocket subscriptions are included if your app uses them.
- Rate limits and burst behavior are documented, not inferred.
- You have at least one independent backup provider configured and tested.
- You log latency, error rates, and slot lag per endpoint so you can see degradation before users do.
- You know how to contact support during an incident.
If you are still comparing providers across chains, the How to choose an RPC provider article covers the general framework. For Solana-specific capacity and pricing, see RPC pricing and the full list of supported RPC networks.
Key Takeaways
- "Leading" Solana RPC providers are the ones that fit your workload, not the ones with the loudest marketing.
- Solana-specific methods like
getProgramAccounts,sendTransaction, and WebSocket subscriptions are where providers differ most. - Test candidates with your real methods, at realistic concurrency, over several days.
- Shared RPC is fine for many apps; dedicated nodes help when you hit rate limits, throttled methods, or unstable subscriptions.
- Always configure and test a failover endpoint before you need it.
- OnFinality offers a Solana RPC API and dedicated nodes as part of a broader network portfolio.
Frequently Asked Questions
What is the difference between shared and dedicated Solana RPC? Shared RPC pools requests across many users and is cheaper to start with. Dedicated nodes give your workload isolated capacity, which helps when you hit rate limits or need methods that shared endpoints throttle.
Do I need an archive Solana node? Only if you query historical slots, transactions, or account state beyond the recent window. Indexers and analytics pipelines usually need archive access; simple wallets often do not.
Is WebSocket support important on Solana?
Yes, if your app uses subscriptions like accountSubscribe or logsSubscribe. Wallets, bots, and dashboards rely on these, and WebSocket stability varies between providers.
How many RPC providers should I use? Two is usually enough: a primary and a tested backup. More than that adds complexity without proportional reliability gains.
Can I start on a public endpoint? Public endpoints are useful for development and light testing. For production traffic, move to a managed or dedicated endpoint with documented limits and support.