Raiden Vortex · Geyser gRPC for Solana

Solana gRPC: Yellowstone Geyser stream.

Raiden Vortex is a Yellowstone-compatible Solana gRPC provider. It streams Geyser account, transaction and slot updates from Raiden-run bare metal in Frankfurt, Amsterdam, London and New York. If you run a Yellowstone or Dragon’s Mouth client today, switching is a change of endpoint, not a rewrite.

FRA · AMS · LND · NYC
$65 / day · $260 / week · $650 / 30 days, per region
Authorised by source IP · paid in USDC on Solana

01 / The basics

What is Solana gRPC?

Solana gRPC is a streaming interface to validator data. Solana validators expose a Geyser plugin interface. Yellowstone gRPC, the open-source Geyser plugin from Triton One also known as Dragon’s Mouth, serves that data over gRPC using geyser.proto. Your client opens one bidirectional Subscribe stream and sends named filters. The server then pushes every matching account, transaction or slot update as it happens. You don’t poll, you don’t parse JSON, and the filtering runs on the server.

Three ways to read Solana in real time
MethodHow data arrivesEncodingFilteringTypical use
JSON-RPC pollingYou ask again on an intervalJSON over HTTPPer requestOne-off reads, low-frequency checks
WebSocket subscriptionsServer pushes, one subscription per account, program or log filterJSON over WebSocketOne target per subscriptionWallets, notifications, light apps
Geyser gRPC (Yellowstone)Server pushes over one long-lived streamProtobuf over HTTP/2Many named filters per stream, with include, exclude and required account listsIndexers, trading systems, backends that track many accounts

Streaming over gRPC is a backend job. Browsers can’t open a raw gRPC stream, so the client runs on your server, bot or indexer.

02 / Drop-in

Drop-in for Yellowstone gRPC clients

Vortex speaks geyser.proto. That means the same Geyser service, the same bidirectional Subscribe call and the same SubscribeRequest with named filter maps. The same SubscribeUpdate comes back. The endpoint itself is one line. The checklist below covers what else changes.

−http://your-provider.example:10000

+http://fra.vortex.raiden.wtf:10001

Switching from another Yellowstone provider

  1. Register your source IPIn the Vortex dashboard, add the public IP your client connects from, for the region you want. That address is your credential, so connect from it directly, not through a NAT or proxy that rewrites it.
  2. Change the endpointPoint the client at http://<region>.vortex.raiden.wtf:10001, using fra, ams, lnd or nyc as the region.
  3. Trim the SubscribeRequestRemove blocks, blocks_meta and entry. Many clients subscribe to every method by default.
  4. Remove the token setupVortex does not use an x-token. Access comes from the registered IP.

Your account and transaction filters and your decoders stay where they are. If the stream fails with PERMISSION_DENIED: ip not whitelisted, the gateway is seeing a source IP that isn’t registered for that region.

03 / What it serves

What the Geyser stream carries: accounts, transactions, slots

Vortex streams at the account and transaction level. It does not serve block-level or entry-level subscriptions. Better to learn that here than on your first connection.

Geyser subscription types on Vortex
SubscriptionServedSubscribeRequest field
AccountsYesaccounts
TransactionsYestransactions
SlotsYesslots
BlocksNoblocks, blocks_meta
EntriesNoentry
Transaction filter fields
FieldWhat it does
account_requiredThe transaction must touch every listed account
account_includeThe transaction must touch at least one listed account
account_excludeThe transaction must not touch any listed account
votefalse drops vote transactions, true returns only votes, unset returns both
failedfalse drops failed transactions, true returns only failed ones, unset returns both

Each method takes a map of named filters, and you choose the names, such as pumpfun or jupiter-swaps. Every update arrives tagged with the filter names it matched, so one stream can serve several independent jobs. Filtering runs server-side, so what you exclude never crosses the wire.

04 / Regions and access

Solana gRPC endpoints in Frankfurt, Amsterdam, London and New York

Each region is a separate subscription, served from Raiden-run dedicated bare metal next to the validators. Pick the region closest to the machine that consumes the stream.

Vortex gRPC endpoints
RegionCityEndpoint
FRAFrankfurthttp://fra.vortex.raiden.wtf:10001
AMSAmsterdamhttp://ams.vortex.raiden.wtf:10001
LNDLondonhttp://lnd.vortex.raiden.wtf:10001
NYCNew Yorkhttp://nyc.vortex.raiden.wtf:10001

Source IP, not a token

The IP you register in the dashboard is allowlisted on that region’s gateway. Connections from it are accepted without a per-request token.

Connect from that IP

Don’t go through a NAT or proxy that rewrites it, because the gateway would then see a different address.

One subscription, one IP

For several machines, route them through the registered address, or add another IP in the same region as its own subscription at list price.

Changing the IP

You change it from the dashboard. There is a short cooldown between changes, currently 60 seconds.

Vortex serves plaintext gRPC on port 10001. Use an http:// endpoint (grpc.insecure_channel in Python), not https://: with https:// the TLS handshake fails. Full region list: Raiden regions and endpoints ↗

05 / Connect

Connect a Yellowstone client in Rust, TypeScript or Python

This is the same Subscribe call you make against any Yellowstone gRPC endpoint. Each sample streams successful, non-vote transactions that touch the pump.fun program, from Frankfurt. Any gRPC client generated from geyser.proto works the same way.

subscribe.rssubscribe.tssubscribe.py
// Cargo.toml: yellowstone-grpc-client = "15", yellowstone-grpc-proto = "14",
// tokio = { version = "1", features = ["rt-multi-thread", "macros"] }, futures = "0.3"
use futures::StreamExt;
use std::collections::HashMap;
use yellowstone_grpc_client::GeyserGrpcClient;
use yellowstone_grpc_proto::prelude::{
    subscribe_update::UpdateOneof, CommitmentLevel, SubscribeRequest, SubscribeRequestFilterTransactions,
};

#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
    // http:// endpoint. Vortex authorises your registered source IP: no x-token.
    let mut client = GeyserGrpcClient::build_from_shared("http://fra.vortex.raiden.wtf:10001")?
        .connect()
        .await?;
    let request = SubscribeRequest {
        transactions: HashMap::from([("pumpfun".to_owned(), SubscribeRequestFilterTransactions {
            vote: Some(false),
            failed: Some(false),
            account_include: vec!["6EF8rrecthR5Dkzon8Nwu78hRvfCKubJ14M5uBEwF6P".to_owned()],
            ..Default::default() // required with yellowstone-grpc-proto 14
        })]),
        commitment: Some(CommitmentLevel::Processed as i32),
        ..Default::default() // blocks, blocks_meta and entry stay empty: not served by Vortex
    };
    let (_sink, mut stream) = client.subscribe_with_request(Some(request)).await?;
    while let Some(update) = stream.next().await {
        if let Some(UpdateOneof::Transaction(tx)) = update?.update_oneof {
            println!("slot {}", tx.slot);
        }
    }
    Ok(())
}
// npm i @triton-one/yellowstone-grpc@9 · ESM ("type": "module") · run: npx tsx subscribe.ts
import Client, { CommitmentLevel, type SubscribeUpdate } from '@triton-one/yellowstone-grpc';

// http:// endpoint. Vortex authorises your registered source IP: no x-token.
const client = new Client('http://fra.vortex.raiden.wtf:10001', undefined, undefined);
await client.connect(); // required since v5.0.1

const stream = await client.subscribe();
stream.on('data', (update: SubscribeUpdate) => {
  if (update.transaction) console.log(`slot ${update.transaction.slot}`);
});
stream.on('error', (err) => console.error(err));

stream.write({
  transactions: {
    pumpfun: {
      vote: false,
      failed: false,
      accountInclude: ['6EF8rrecthR5Dkzon8Nwu78hRvfCKubJ14M5uBEwF6P'],
      accountExclude: [],
      accountRequired: [],
    },
  },
  // blocks, blocksMeta and entry omitted: not served by Vortex
  commitment: CommitmentLevel.PROCESSED,
});
# pip install grpcio grpcio-tools; copy proto/*.proto from github.com/rpcpool/yellowstone-grpc (yellowstone-grpc-proto/proto), then:
# python -m grpc_tools.protoc -I proto --python_out=. --grpc_python_out=. proto/geyser.proto proto/solana-storage.proto
import threading
import grpc
import geyser_pb2
import geyser_pb2_grpc

# Plain gRPC channel. Vortex authorises your registered source IP: no token.
channel = grpc.insecure_channel("fra.vortex.raiden.wtf:10001")
stub = geyser_pb2_grpc.GeyserStub(channel)

def requests():
    yield geyser_pb2.SubscribeRequest(
        transactions={
            "pumpfun": geyser_pb2.SubscribeRequestFilterTransactions(
                vote=False,
                failed=False,
                account_include=["6EF8rrecthR5Dkzon8Nwu78hRvfCKubJ14M5uBEwF6P"],
            ),
        },
        commitment=geyser_pb2.CommitmentLevel.PROCESSED,
    )  # blocks, blocks_meta and entry omitted: not served by Vortex
    threading.Event().wait()  # keep the request stream open

for update in stub.Subscribe(requests()):
    if update.HasField("transaction"):
        print(f"slot {update.transaction.slot}")

To stream from another region, swap fra for ams, lnd or nyc. Yellowstone gRPC quickstart in the Vortex docs ↗

06 / Pricing

Solana gRPC pricing

Vortex is priced per region and per period, not per gigabyte. A one-day pass runs on the same limits as a 30-day pass.

Vortex prices, per region and per registered IP
PassPriceLimits
1 day$65Standard limits
1 week$260Standard limits
30 days$650Standard limits

20Concurrent connections

35Named filters per connection

5,000Accounts per named filter

$65Per day, per region, per registered IP · $260 per week · $650 per 30 days

Full rate card for every Raiden product: Raiden pricing in the docs ↗

07 / Trial

Free Solana gRPC trial

There is no public Vortex endpoint, because access is tied to a registered IP. Instead, every region has a free 3-hour trial: once per region per account, with no payment.

  1. Request it in the dashboardOpen the Vortex page of the dashboard, choose a region and enter the IP you will connect from.
  2. Open a Discord ticketEvery trial request is reviewed by hand. Approvals happen from the ticket on Raiden’s Discord.
  3. ConnectOnce the trial is approved, its 3 hours start running, on the same limits as a paid pass.

An IP that another account has already used for a trial can’t start a new one. There is no trial in a region where you already hold a live subscription. If you’d rather skip the review, a one-day pass is $65.

08 / Fit

When Vortex fits, and when to look elsewhere

Every Yellowstone gRPC provider speaks the same protocol, so the choice comes down to what each one serves, where, and on what terms. Here is where Vortex fits, and where it doesn’t.

A good fit

Existing Geyser stacks

You run a Yellowstone or Dragon’s Mouth client and want a new endpoint without touching the integration.

Real-time indexers

Account and transaction updates go straight into a pipeline whose decoders already handle them.

Trading systems

Account state comes from the validator edge rather than from a shared public RPC.

Leaving a public provider

You keep the same client and get a different endpoint with dedicated capacity.

Look elsewhere if

You need data before confirmation

Geyser updates arrive after processing. For pre-confirmation transactions, use decoded Solana shreds.

Your source IP keeps changing

Access is by registered IP, so serverless functions, rotating NAT and browsers don’t fit.

You rely on replay

Replaying missed slots after a reconnect (from_slot) is not documented for Vortex. Ask the team before you depend on it.

You need an uptime commitment

Our Terms of Service list Vortex among beta and early-access products, with no uptime or performance commitment.

Reading the chain is half the loop. To act on what you see, land transactions with Bolt, which runs in the same four cities plus Tokyo and has a free 5 TPS Beta tier.

09 / Raiden streams

Vortex, Pulse or Surge: Geyser gRPC or shred streaming?

Raiden sells three streams. They solve different problems, and a stack can run more than one.

Raiden Vortex, Pulse and Surge compared
FeatureVortexPulseSurge
DataGeyser account and transaction updatesDecoded transactions from shredsRaw shred bytes
TimingAfter processingBefore block confirmationBefore block confirmation
DeliverygRPC streamgRPC streamUDP
ProtocolGeyser / Yellowstone protoraiden_binary protoRaiden
Client changesNone if you already use GeyserAdopt the Pulse protoBuild your own pipeline
RegionsFRA, AMS, LND, NYCFRA, AMS, NYCFRA, AMS, LND, NYC, TKY
From$65 / day per region$70 / day per region$49 / day per region
Best forAnyone already on Geyser toolingBots, arb engines, indexersInfra teams, custom pipelines

Shreds arrive before the block is confirmed and carry no execution result, so a transaction seen there can still fail. Geyser updates come after the node has processed the transaction. Pulse and Surge are covered on the Solana shreds page.

10 / Questions

Solana gRPC questions, answered

What is Yellowstone gRPC?

Yellowstone gRPC, also known as Dragon’s Mouth, is the open-source Solana Geyser plugin from Triton One that serves validator data over gRPC using geyser.proto. Clients open a bidirectional Subscribe stream, send named filters and receive matching updates as they happen. Raiden Vortex speaks the same protocol, so an existing Yellowstone client connects to it with a new endpoint.

Does Vortex work with my Yellowstone or Dragon’s Mouth client?

Yes. Vortex speaks the same geyser.proto, so moving over is a change of endpoint, not a rewrite. Register your source IP in the dashboard, point the client at your region’s endpoint, such as http://fra.vortex.raiden.wtf:10001, and remove blocks, blocks_meta and entry from your SubscribeRequest. Your account and transaction filters and your decoders stay as they are.

Is there a free Solana gRPC endpoint or trial?

There is no public Vortex endpoint, because access is tied to a registered IP. Every region has a free 3-hour trial instead, once per region per account and with no payment. Request it from the Vortex page of the dashboard, then open a Discord ticket: trials are reviewed by hand. If you’d rather skip the review, a one-day pass is $65.

How much does Solana gRPC cost, and is it billed by bandwidth?

On Vortex, Solana gRPC costs $65 per day, $260 per week or $650 per 30 days, per region and per registered IP, paid in USDC on Solana. The price is flat for the period, not metered per gigabyte. The limits are the same at every duration: 20 concurrent connections, 35 named filters per connection and 5,000 accounts per named filter.

What happens if my Solana gRPC stream disconnects?

Reconnect and send your SubscribeRequest again: the reconnect logic you already use with other Yellowstone providers applies. Replaying missed slots after a reconnect (from_slot) is not documented for Vortex. If your job cannot miss updates, backfill the gap from RPC, or ask the team on Discord before you rely on replay.

How is access authorised? Do I need an x-token?

No token. Vortex authorises by source IP: the address you register in the dashboard is allowlisted on that region’s gateway. Connect from that address, not through a NAT or proxy that changes it. One subscription covers one IP; for more machines, route them through the registered address or add another IP in the region as its own subscription at list price.

Which regions and endpoints are available?

Four regions, each a separate subscription: Frankfurt (fra.vortex.raiden.wtf), Amsterdam (ams.vortex.raiden.wtf), London (lnd.vortex.raiden.wtf) and New York (nyc.vortex.raiden.wtf), all on port 10001 with the http:// scheme. Pick the region closest to the machine that consumes the stream.

When should I use Solana gRPC instead of WebSockets?

Use gRPC when a backend tracks many accounts or programs at once: one stream carries several named filters, filtering runs on the server and updates arrive as binary Protobuf. WebSocket subscriptions suit lighter jobs, such as a wallet watching a few accounts, and JSON-RPC polling suits one-off reads. gRPC needs a server-side client, because browsers can’t open a raw gRPC stream.

Should I use Vortex or Pulse?

Use Vortex if you already run Geyser tooling and want account and transaction updates after processing, in the Yellowstone format. Use Pulse if you want transactions decoded from shreds before block confirmation and can adopt its proto. A transaction seen in shreds can still fail, and a stack can run both.

What if I need more than 20 connections?

Ask the team on Discord about a custom plan above the standard limits. Standard passes allow 20 concurrent connections, 35 named filters per connection and 5,000 accounts per named filter, and a named filter with more than 5,000 accounts is rejected.

Updated .

Your Geyser stream, from the edge next to you.