Solana RPC for wallet backends¶
A wallet backend is the one workload on this site where routing by method genuinely pays — and the reason is coverage, not price. Wallets need the Metaplex DAS API to show someone their NFTs, most providers do not offer it, and the ones that do charge two to ten times their standard rate for it.
Only three providers can serve this workload at all¶
Modelled on 38% getAccountInfo, 20% getTokenAccountsByOwner, 12% getAssetsByOwner (DAS),
10% getBalance, 10% getSignaturesForAddress, 8% getTransaction, 2% sendTransaction:
| Provider | Blended $/M | At 10M calls/month |
|---|---|---|
| Triton One | $14.80 | $148 |
| QuickNode | $16.80 | $168 |
| Helius | $18.50 | $185 |
| Alchemy | no DAS rate published | — |
| dRPC | no DAS rate published | — |
| OnFinality | no DAS rate published | — |
| Chainstack | does not offer DAS on Solana | — |
Four of seven drop out. That is not the dataset being incomplete — it is
a deliberate field: a method listed under
unpriced_methods has no rate because the provider either does not serve it or does not publish a
price. Falling back to the provider's default weight would produce a confident number for a call
they cannot answer, which is worse than no number.
Rates verified 2026-09-06; overage basis. See price per method.
The 47% split¶
This is the workload where a proxy earns its keep on cost. The per-method cheapest provider:
| Method | Share | Cheapest | $/M |
|---|---|---|---|
getAccountInfo |
38% | Alchemy | $4.50 |
getTokenAccountsByOwner |
20% | Alchemy | $4.50 |
getAssetsByOwner (DAS) |
12% | QuickNode | $30.00 |
getBalance |
10% | Alchemy | $4.50 |
getSignaturesForAddress |
10% | dRPC | $6.00 |
getTransaction |
8% | dRPC | $6.00 |
sendTransaction |
2% | Helius | $5.00 |
Best single provider: Triton One at $14.80/M. Method-split routing: $7.84/M — a 47% saving.
The reason the gap is so much larger here than for a trading bot (6.2%) or an indexer (2.5%) is that this mix contains two method classes with wildly different prices. 12% of calls cost 4–7× the rest. Isolating that 12% onto the provider that prices it best, and sending the cheap 88% somewhere that does not subsidise a DAS API you are barely using, is most of the saving.
The 47% is a ceiling, not a quote
It assumes overage pricing on every provider simultaneously, which means four vendor relationships and four minimum spends. At 10M calls a month you are inside several free tiers and the real answer is different. Treat this as the shape of the opportunity — it says split DAS off, not sign up for four providers.
Config¶
The realistic version is two providers, not four: DAS to a provider that serves it, everything else to the cheapest standard reader.
[routing]
strategy = "best_score"
# DAS only. Never receives a getAccountInfo it would overcharge for.
[[providers]]
name = "quicknode-das"
url = "https://your-endpoint.quiknode.pro/${QUICKNODE_API_KEY}"
methods = [
"getAsset", "getAssetProof", "getAssetsByOwner",
"getAssetsByGroup", "getAssetsByCreator", "getAssetsByAuthority",
"searchAssets",
]
# Everything else.
[[providers]]
name = "alchemy"
url = "https://solana-mainnet.g.alchemy.com/v2/${ALCHEMY_API_KEY}"
# Second general provider so an Alchemy outage doesn't take the wallet down.
[[providers]]
name = "helius"
url = "https://mainnet.helius-rpc.com/?api-key=${HELIUS_API_KEY}"
Two things to know about this shape:
- The DAS entry has no redundancy. If QuickNode is down, DAS calls have nowhere to go — the other two providers do not serve those methods. If NFT display is load-bearing for you, add a second DAS-capable provider (Helius or Triton) with the same allowlist.
- A provider with a
methodsallowlist that excludesgetSlotskips the health probe and is scored from live request outcomes instead. See submission-only providers — the same mechanism applies to any narrow allowlist.
RPC Plane does not route by cost
The split above is one you encode in config. The proxy routes on health and score, has no pricing table, and will not discover this for you.
The failure that users actually notice¶
For a wallet, the visible failure is not a 500 — it is a balance that reads zero. A provider lagging the chain tip returns a stale account, the user sees an empty wallet, and support hears about it before your monitoring does.
That is what slot-drift scoring is for: RPC Plane compares each provider's reported slot against the highest any provider has reported and demotes the ones falling behind before they serve a stale read.
If you run a single provider, set reference_url so the proxy has an external checkpoint to
measure drift against — otherwise your one provider is the tip by definition and a stall is
invisible. See health scoring.
Related¶
- Price per method — DAS weights per provider
- Compare providers — head-to-head crossovers
- Configuration — the
methodsallowlist in full - Health scoring — slot drift and the external reference