Logo
New RPC users get 35% off their first monthView the offer
RPC Assistant

What should you look for in a Solana RPC service for smart contracts in 2025?

Summary

Choosing the right Solana RPC service for smart contracts means balancing performance, reliability, and cost. This article explains the key evaluation criteria, from throughput and WebSocket support to archive data and dedicated node options, helping you match infrastructure to your contract's needs.

Quick recommendation: match the RPC to your contract's read/write pattern

Before comparing providers, map your smart contract's RPC usage. A simple NFT minting dApp that only sends transactions and polls for confirmations has different needs than a DeFi protocol that indexes historical events or a marketplace that streams live price updates.

For most production contracts in 2025, the practical choice is a managed RPC service that offers both HTTP and WebSocket endpoints, with the option to scale to a dedicated node when your traffic becomes predictable. OnFinality provides managed Solana RPC with public and dedicated options, and you can check supported networks and pricing to see if it fits your workload.

If your contract only needs occasional reads and writes during development, a public endpoint like https://solana.api.onfinality.io/public is fine for testing. But for mainnet contracts with real users, you need a service that can handle bursts, provide consistent latency, and offer WebSocket support for real-time updates.

Why Solana RPC selection differs from EVM chains

Solana's architecture is fundamentally different from Ethereum and other EVM chains. Transactions are processed in parallel, and the network optimizes for throughput. This affects how you interact with RPC endpoints:

  • Transaction confirmation: Solana uses a different confirmation model. You send a transaction and then poll for its status using getSignatureStatuses. The RPC's ability to keep up with your polling frequency matters.
  • State reads: Reading account state is common, but you must be careful about getAccountInfo and getMultipleAccounts performance. Some RPCs cache state, others don't.
  • Historical data: For smart contracts that need to query past transactions or account states, you need an RPC with archive data. Not all providers offer this.
  • WebSockets: Real-time updates for price feeds, order books, or event streams require a stable WebSocket connection. The RPC's WebSocket infrastructure must handle many concurrent connections.

Key evaluation criteria for Solana RPC providers

When comparing services, focus on these criteria:

CriterionWhat to checkWhy it matters
ThroughputRequests per second (RPS) limits, burst handlingSmart contracts often generate bursts of reads/writes, especially during mints or liquidations
LatencyGeographic distribution, edge cachingLower latency improves user experience and reduces timeouts
WebSocket supportConnection limits, subscription typesNeeded for real-time updates; poor support breaks dApps
Archive dataAvailability of historical state and transactionsRequired for analytics, refunds, or debugging
Dedicated nodesOption to spin up a single-tenant nodePredictable performance for high-traffic contracts
Pricing modelPay-as-you-go vs. subscriptionCost predictability matters for production
Uptime and reliabilityHistorical uptime, redundancyDowntime means lost transactions and user trust

Public, shared, and dedicated: which fits your contract?

Solana RPC services generally fall into three categories:

  • Public endpoints: Free, rate-limited, and not suitable for production. Use for development and testing.
  • Shared/managed RPC: A provider runs a cluster of nodes and distributes traffic. Good for most production dApps, offering better reliability and features than public endpoints.
  • Dedicated nodes: You get a single node instance reserved for your use. Ideal for high-throughput or latency-sensitive contracts, such as trading bots or gaming platforms.

OnFinality offers both shared and dedicated options. You can start with a shared endpoint and upgrade to a dedicated node as your traffic grows. Check the dedicated node page for details.

How to test a Solana RPC service before committing

Before you integrate a provider, run a few tests to verify it meets your needs.

1. Basic connectivity and latency

Use curl to measure response time:

curl -s -o /dev/null -w "%{time_total}\n" \
  -X POST https://solana.api.onfinality.io/public \
  -H "Content-Type: application/json" \
  -d '{"jsonrpc":"2.0","id":1,"method":"getHealth"}'

Run this multiple times and check for consistent sub-second responses.

2. WebSocket stability

Write a small script to subscribe to account updates and see if the connection drops:

const WebSocket = require('ws');
const ws = new WebSocket('wss://solana.api.onfinality.io/public-ws');

ws.on('open', () => {
  ws.send(JSON.stringify({
    jsonrpc: '2.0',
    id: 1,
    method: 'accountSubscribe',
    params: [
      'Vote111111111111111111111111111111111111111',
      { encoding: 'base64' }
    ]
  }));
});

ws.on('message', (data) => {
  console.log('Message:', data.toString());
});

ws.on('close', () => {
  console.log('Connection closed');
});

If the connection drops frequently, that's a red flag.

3. Load testing

Simulate concurrent requests to see how the service handles bursts. Tools like hey or k6 can help.

Common pitfalls when using Solana RPC for smart contracts

Even with a good provider, you can run into issues. Here are common pitfalls and how to avoid them:

  • Not handling rate limits: Even paid plans have limits. Implement backoff and retry logic.
  • Using the wrong commitment level: Solana offers processed, confirmed, and finalized. Choose the right one for your use case. For financial transactions, use confirmed or finalized.
  • Polling too aggressively: If you poll getSignatureStatuses too often, you may hit rate limits. Use WebSocket subscriptions when possible.
  • Ignoring archive data needs: If your contract needs historical data, ensure your provider offers archive nodes. Not all do.
  • Forgetting about WebSocket reconnection: Implement reconnection logic in your client to handle temporary disconnects.

Setting up a Solana RPC connection for your smart contract

Here's a typical setup using the Solana Web3.js library:

import { Connection, clusterApiUrl } from '@solana/web3.js';

// For production, use a managed RPC endpoint
const connection = new Connection('https://solana.api.onfinality.io/public', 'confirmed');

// Example: get account info
const accountInfo = await connection.getAccountInfo('Vote111111111111111111111111111111111111111');
console.log(accountInfo);

For a dedicated node, you'll get a private endpoint that you can use similarly.

Monitoring and maintenance

Once your contract is live, monitor RPC performance. Track metrics like:

  • Request latency
  • Error rates
  • WebSocket connection stability
  • Rate limit hits

Set up alerts for anomalies. Most providers offer dashboards; OnFinality provides usage analytics on its platform.

Key Takeaways

  • Solana RPC selection requires understanding your contract's read/write patterns and real-time needs.
  • Public endpoints are only for development; production contracts need managed or dedicated services.
  • Evaluate providers on throughput, WebSocket support, archive data, and pricing.
  • Test providers with latency checks, WebSocket stability tests, and load testing.
  • Avoid common pitfalls like ignoring rate limits and using the wrong commitment level.
  • Consider starting with a shared RPC and upgrading to a dedicated node as traffic grows.

Frequently Asked Questions

What is the best Solana RPC service for smart contracts in 2025?

The best service depends on your workload. For production contracts, look for a managed provider with WebSocket support, archive data, and the option to scale to a dedicated node. OnFinality offers these features; check the Solana network page for details.

Can I use a public Solana RPC for a production smart contract?

Public endpoints are rate-limited and not reliable enough for production. They are suitable for development and testing only.

What is the difference between shared and dedicated Solana RPC?

Shared RPC routes your requests through a cluster shared with other users. Dedicated nodes give you a single-tenant instance, offering more predictable performance and lower latency.

How do I choose between HTTP and WebSocket for my Solana contract?

Use HTTP for one-off requests like fetching account data or sending transactions. Use WebSocket for real-time subscriptions, such as listening to account changes or transaction confirmations.

Does OnFinality support Solana archive data?

OnFinality provides archive node support for Solana; contact the team or check the network page for specifics.

How can I migrate my Solana dApp to a new RPC provider?

Update your RPC endpoint in your configuration and test thoroughly. Most Web3.js apps only require changing the connection URL. Ensure your new provider supports the same methods and WebSocket features.

RPC Knowledge Base

Related RPC details

Never Worry about Infrastructure Again

OnFinality takes away the heavy lifting of DevOps so you can build smarter and faster.

Get Started