getProgramAccounts (15ms p50 for top dexes) & getTransactionsForAddress (signatures and transaction data in a single call). Unlock Now!Team Shyft
· July 24, 2026

This blog illustrates what RabbitStream is, what ALT resolution actually means, how Yellowstone gRPC has always handled it, and what changes for you now that RabbitStream supports it too.
accountInclude previously only matched static account keys, missing anything referenced through a lookup table.RabbitStream listens directly to raw UDP shreds as they propagate across the Solana network, independently of any RPC node. Reconstructs them server-side, and delivers the decoded transactions through a Yellowstone-compatible gRPC interface. Same SubscribeRequest format as Yellowstone gRPC, so no new client or decoding logic. The tradeoff for the speed: no meta – no logs, no inner instructions, no confirmed balances, since data arrives pre-execution.
A Solana transaction needs to list every account it touches. For a long time, that meant every account pubkey – 32 bytes each – got written directly into the transaction message. Complex transactions that touch a dozen-plus accounts got expensive fast, just from account references alone.
Address Lookup Tables (ALTs) fix this. An ALT is an on-chain account holding a list of addresses. Instead of embedding a full pubkey in the message, a transaction can reference an ALT plus an index – a single byte pointing at position N in the table. A transaction’s address_table_lookups field carries the ALT’s pubkey and the writable_indexes / readonly_indexes it needs.
The catch: the transaction message alone doesn’t tell you which accounts those indexes point to. You have to resolve the ALT – fetch the table, look up each index, get the actual address back – before you know the transaction’s real account set. Any filter matching on accountInclude has to do this resolution correctly, or it’ll only ever match static keys and silently miss everything routed through a table.
That’s not an edge case anymore. Most swap and AMM traffic on Solana today – Raydium, Meteora, pump.fun AMM – routes through ALTs by default.
Yellowstone gRPC resolves this server-side. Alongside the raw transaction message, it returns loaded_writable_addresses and loaded_readonly_addresses – the actual addresses behind each ALT index, already resolved. Filters like accountInclude check these resolved fields as well as the static keys, so a transaction referencing your target account through a lookup table matches just like one that references it directly.
This works because Yellowstone taps the pipeline after Replay – by the time it emits a transaction, execution has finished and the runtime has already resolved every ALT reference as part of processing the block. The resolution is essentially free at that point; the data already exists.
RabbitStream doesn’t have that luxury.
RabbitStream reads data at the shred layer – before a block is replayed, before lookup tables are fully resolved. That’s what makes it fast. It’s also what caused a coverage gap.
When you filtered on account_include, RabbitStream only checked static account keys in the transaction message. Any transaction that referenced your target account through a lookup table instead of a static key – which is most transactions routed through an AMM or aggregator – got missed.
The impact was worst on programs that live almost entirely behind ALTs. For pumpAmm, that meant roughly 3x fewer transactions than Yellowstone gRPC.
RabbitStream now resolves lookup tables at the shred stage. account_include: pumpAmm checks static keys and lookup table references. No client-side changes needed – same filters, same subscription, more matches.
We benchmarked the fix against Dragon’s Mouth (Yellowstone gRPC) before rollout, using a getBlock-style reconciliation tool across shared slot ranges. Three programs, three different ALT usage patterns:
| Program | Dragon’s Mouth | RabbitStream (pre-fix) | RabbitStream (ALT-resolved) | Coverage before → after |
|---|---|---|---|---|
| Meteora DLMM | 40,427 | 5,897 | 40,369 | 14.6% → 99.9% |
| pump.fun | 131,675 | 106,349 | 131,548 | 80.8% → 99.9% |
| pump.fun AMM (pumpAmm) | 143,429 | 51,061 | 141,831 | 35.6% → 98.9% |
Same slot ranges, same accounts, run back-to-back against Dragon’s Mouth as the reference.
Resolving lookup tables at the shred stage adds a lookup, so it’s fair to ask what it costs. Short answer: nothing you’d notice. We tested this specifically before rollout, and RabbitStream keeps its shred-stage speed advantage over standard gRPC – you’re not trading latency for coverage.
ALT resolution closes the largest functional gap between RabbitStream and Yellowstone gRPC. You now get gRPC-equivalent filtering – including ALT-heavy programs like Meteora, Raydium, and pump.fun AMM – at shred-stage speed, with no meaningful latency cost. If you built filters around static account keys only, or ran a parallel Yellowstone subscription just to catch what RabbitStream missed, you can simplify back down to RabbitStream alone.
This is one of the last major differences standing between RabbitStream and full Yellowstone gRPC compatibility. No action needed on your end – the update is live now, in every region.
If you liked this article, feel free to checkout our other articles on what is RabbitStream or how RabbitStream differs from Solana Yellowstone gRPC to find out more.
RabbitStream uses the standard Yellowstone gRPC subscription protocol, so if you’re already familiar with gRPC streaming on Solana, the learning curve is nearly flat.

We ran 40,000+ transactions across Frankfurt and New York. Here’s what the data says. TL;DR Multiple benchmark run...
May 21, 2026

Understanding RabbitStream, Solana Shreds and difference with Yellowstone gRPC. ...
February 5, 2026

Stream Solana transactions directly from shreds — before execution, with Yellowstone-style gRPC filtering. ...
January 25, 2026
Get in touch with our discord community and keep up with the latest feature
releases. Get help from our developers who are always here to help you take off.