swQoS & Staked Connections: The Solana RPC Edge Nobody Configures
Public Solana RPCs throttle your transactions during spam floods. Here's how solana staked connections and swQoS get your txs into blocks anyway.
During the last big meme-coin flood, our fills on a shared public RPC dropped to something like 30% landing rate while the exact same transactions, submitted through a staked Helius connection, cleared above 90%. Same signer, same priority fee, same blockhash. The only variable was how the transaction reached the leader. That gap is stake-weighted Quality of Service, and almost nobody building bots configures for it until their throughput falls off a cliff.
What swQoS actually is
Since Solana 1.14, the validator's TPU (Transaction Processing Unit) doesn't treat all incoming QUIC connections equally. Each validator advertises a QUIC endpoint that accepts transactions, and the total connection capacity is partitioned by stake. A validator reserves a share of its inbound connection slots for peers proportional to the stake those peers hold or represent, and the remaining slots go into an unstaked pool that everyone else fights over.
Concretely: the TPU has a fixed budget of concurrent streams. Roughly 80% of that budget is carved out for stake-weighted peers, and about 20% is left for the unstaked free-for-all. When the network is quiet, nobody notices the split — there's plenty of room in the unstaked pool. When a launch or a liquidation cascade hits and the mempool-equivalent floods with hundreds of thousands of transactions per second, the unstaked pool saturates instantly. Connections get rate-limited or dropped at the QUIC layer, before your transaction is ever deserialized. Your RPC provider returns a signature, preflight passed, and the transaction simply never reaches a leader that has room to process it.
That last part is the trap. A returned signature means "I accepted this for forwarding," not "this landed." On a spam-throttled unstaked path, the two diverge hard.
Staked connections: borrowing a validator's stake weight
A "staked connection" is an RPC provider forwarding your transaction over a QUIC connection that is authenticated with a validator identity carrying real stake. Helius and Triton both sell this. When Helius forwards your transaction to the current and upcoming leaders, it does so from an identity backed by tens of thousands of SOL, so it lands in the stake-weighted 80% pool instead of the unstaked 20%. You're not staking anything yourself — you're renting the provider's stake weight for the moment your transaction needs to get through the door.
The mechanics that matter:
- Leader schedule awareness. The forwarder needs to know which validators are the next few leaders and open QUIC connections to their TPU ports ahead of time. A cold connection during a flood is a lost transaction. Good staked services keep warm connections to the upcoming leaders in the schedule.
- Per-identity stream limits still apply. Stake weight raises your ceiling; it doesn't make it infinite. A single staked identity has a cap on concurrent streams to a given leader. This is why providers pool multiple staked identities, and why the good ones don't oversell one identity to thousands of customers.
- It only helps the transport. swQoS gets you a seat at the table. Once you're deserialized and in the leader's scheduler, your priority fee and compute-unit request determine ordering within the block. Staked connections and priority fees are complementary, not substitutes. People conflate them constantly.
If you want the deeper mechanics of talking to leaders directly, we walked through the QUIC path and forwarding in TPU client transaction forwarding, which is the DIY version of what a staked RPC does for you.
When it matters and when it doesn't
Be honest about your workload before paying for this. Staked connections are worth it when:
- You're sniping launches, doing liquidations, or arbitraging — anything where landing in this block versus the next one changes your P&L.
- You submit during congestion, which is exactly when everyone else does too, which is exactly when the unstaked pool is saturated.
- You've already tuned priority fees and you're still seeing signatures that never confirm.
They're mostly wasted money when your bot places passive maker orders that can wait a few slots, or when you trade during quiet hours and the unstaked pool never fills up. A market-making system that re-quotes on a dead-band doesn't need stake-weighted delivery for every cancel-replace — the design decisions there are closer to what we cover under Solana market-making infrastructure.
A concrete configuration
Here's the pattern we run for latency-sensitive submission. The idea is a fast-path staked sender with a fallback, plus separate connections for reads so a slow read query never blocks a send.
from solana.rpc.async_api import AsyncClient
import asyncio
# Staked send endpoint (Helius/Triton) — used ONLY for sendTransaction.
STAKED_SEND = "https://staked.helius-rpc.com/?api-key=..."
# Regular read pool — getLatestBlockhash, getAccountInfo, sim, etc.
READ_RPC = "https://mainnet.helius-rpc.com/?api-key=..."
send_client = AsyncClient(STAKED_SEND)
read_client = AsyncClient(READ_RPC)
async def fire(tx_bytes: bytes):
# skip_preflight on the send path: preflight runs against the read
# node's state and costs a round trip you can't afford in a race.
resp = await send_client.send_raw_transaction(
tx_bytes,
opts={"skip_preflight": True, "max_retries": 0},
)
return resp.value # signature — NOT a landing confirmation
Two decisions in there people get wrong. First, max_retries=0: the default RPC-side rebroadcast loop reuses the same stale blockhash and just wastes your window. Own your own retry logic with a fresh blockhash instead. Second, keep reads off the staked endpoint. Staked send capacity is the scarce resource you're paying for — don't burn it on getAccountInfo.
For pushing this further, pair the staked path with a second submission route so you're not single-homed. We break down running native sendTransaction next to a Jito bundle in dual-submission via sendTransaction and sendBundle; the staked connection covers the native leg while the bundle covers the MEV-ordering leg.
Gotchas that bite in production
Signatures lie about landing. Instrument confirmation, not submission. Track getSignatureStatuses for every send and compute an actual landing rate per endpoint. If your "staked" provider's landing rate during congestion isn't materially better than a public node, they're overselling one identity and you're paying for nothing. Measure it.
Blockhash expiry is the silent killer. A blockhash is valid for ~150 slots, about 60–80 seconds. If you cache a blockhash and your staked connection sits behind a warm-up during a flood, you can burn the whole validity window before the transaction lands. Refresh aggressively and stamp each transaction with the freshest hash you have.
Rate limits are per-identity, not per-customer. Two customers of the same provider sharing one staked identity are competing with each other during the exact spike you both paid to survive. Ask your provider how many identities back your tier and whether they're dedicated. This is a real question with a real answer, and vague replies are a signal.
Reads and writes on the same connection pool cause head-of-line blocking. During congestion, a fleet of getAccountInfo calls will queue behind each other and delay your send if they share a client. Split them, as above. If you're multiplexing account subscriptions on top of this, the connection-pooling tradeoffs get subtle — we went through them in gRPC connection pooling for Yellowstone.
The whole point is that swQoS moved the bottleneck. It used to be that landing a transaction was about priority fees. Now, under load, it's about whether your bytes even reach a leader with an open stream — and that's a transport problem you solve with stake weight, warm connections, and honest measurement of what's actually confirming.
If you're seeing signatures that vanish during congestion and want the send path built and instrumented properly, that's exactly the kind of work we do under Solana infrastructure and data.
Need a bot like this built?
We design, build and run trading bots on Solana, Hyperliquid and Polymarket.
Start a projectMore from the blog
Public vs Paid RPC: How to Run a Fair Benchmark
A fair comparison of public and paid RPC endpoints must account for quotas, workload, freshness and support guarantees.
Read articleRPC Benchmark Percentiles Explained: p50, p95 and p99
Why averages hide the latency spikes that break trading bots, wallets and production blockchain applications.
Read articleHyperliquid REST vs WebSocket Benchmark: What to Measure
A benchmark plan for Hyperliquid market data that separates request latency from streaming freshness and recovery.
Read article