Yellowstone gRPC
Yellowstone gRPC, streamed to your server.
Subscribe to Solana accounts, transactions, slots and blocks from Frankfurt or Amsterdam. Your server's IP address is the credential, so there is no token to leak.
- gRPC Standard
- $99/mo
- Day pass
- $5/day
What you get
The Yellowstone stream
Accounts, transactions, slots, blocks and entries, on one Subscribe stream.
Your filters, as written
Your SubscribeRequest reaches the node unchanged. No stream is shared with another customer.
No token to leak
Only the addresses on your allowlist can connect. Remove one and its streams close.
How it works
Pick a plan and region
Frankfurt or Amsterdam. Checkout asks for the IP addresses your bots connect from.
Pay on-chain
In USDC, USDT or SOL. Your address goes on that region's allowlist.
Connect and subscribe
Plaintext HTTP/2 on port 10001, so keep the endpoint inside your own infrastructure.
A day, a week or a month
Prepaid, with no usage billing. A connection is one Subscribe stream. Buy several and each costs less. Put them all on one IP or split them across several. Pay for a year: get 2 months free.
Day pass
$5/day
- 1 connection is 1 Subscribe stream
- All on one address, or split across several
- 500 accounts per subscription
Week
$30/week
- 1 connection is 1 Subscribe stream
- All on one address, or split across several
- 500 accounts per subscription
gRPC Standard
Recommended
$99/mo
- 1 connection is 1 Subscribe stream
- All on one address, or split across several
- 500 accounts per subscription
gRPC Dedicated
$1,899/mo
- A list of allowed addresses
- No account limit
- Stream count set with our team
Volume pricing: the more connections, the less each costs
| Connection | Each, a month | Off list |
|---|---|---|
| 1st–2nd | $99.00 | — |
| 3rd–5th | $79.20 | −20% |
| 6th–10th | $59.40 | −40% |
| 11th and up | $45.54 | −54% |
Each row prices only the connections at those places, so 5 connections are 2 × $99.00 + 3 × $79.20 = $435.60 a month.
Buy up to 50.
RPC + gRPC pack
The same number of RPC and gRPC connections in one payment, each at its own volume price.
Subscribe in a few lines
No token in the code: add your address to the allowlist first.
import Client, { CommitmentLevel } from "@triton-one/yellowstone-grpc";
// Plaintext HTTP/2: http://, never https://. No x-token: your IP is the credential.
const client = new Client("http://88.216.36.108:10001", undefined, {
grpcMaxDecodingMessageSize: 64 * 1024 * 1024, // a busy slot exceeds the 4 MiB default
});
const stream = await client.subscribe({
accounts: {
owned: { account: [], owner: ["TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA"], filters: [] },
},
slots: { clock: { filterByCommitment: false } },
transactions: {}, transactionsStatus: {}, blocks: {}, blocksMeta: {}, entry: {},
accountsDataSlice: [],
commitment: CommitmentLevel.PROCESSED,
});
stream.on("data", (update) => {
if (update.slot) console.log("slot", update.slot.slot);
if (update.account) console.log("account", update.filters);
});use futures::StreamExt;
use std::collections::HashMap;
use yellowstone_grpc_client::GeyserGrpcClient;
use yellowstone_grpc_proto::prelude::{CommitmentLevel, SubscribeRequest, SubscribeRequestFilterSlots};
#[tokio::main]
async fn main() -> anyhow::Result<()> {
// Plaintext HTTP/2, and no token: the source IP is the credential.
let mut client = GeyserGrpcClient::build_from_shared("http://88.216.36.108:10001")?
.x_token::<String>(None)?
.max_decoding_message_size(64 * 1024 * 1024)
.connect()
.await?;
let mut slots = HashMap::new();
slots.insert("clock".to_owned(), SubscribeRequestFilterSlots::default());
let request = SubscribeRequest {
slots,
commitment: Some(CommitmentLevel::Processed as i32),
..Default::default()
};
let mut stream = client.subscribe_once(request).await?;
while let Some(update) = stream.next().await {
println!("{:?}", update?.update_oneof);
}
Ok(())
}# No reflection, so grpcurl needs the proto.
BASE="https://raw.githubusercontent.com/rpcpool/yellowstone-grpc/master/yellowstone-grpc-proto/proto"
curl -fsSO "$BASE/geyser.proto" && curl -fsSO "$BASE/solana-storage.proto"
# -plaintext: HTTP/2 without TLS. No metadata: your address is checked.
grpcurl -plaintext -proto geyser.proto -import-path . \
-d '{}' 88.216.36.108:10001 geyser.Geyser/GetSlotBefore you buy
Where is the x-token?
There isn't one. We check the IP address a connection comes from. Any other address gets PERMISSION_DENIED: Unauthorized IP.
Is the endpoint TLS?
No. It is plaintext HTTP/2, so connect with http://, never https://, and keep it inside your infrastructure.
Can I open two streams?
Yes. Each connection you buy is one Subscribe stream, on one address or split across several. An address that opens more than its share gets RESOURCE_EXHAUSTED. Calls such as GetSlot don't count.
Which RPCs are served?
Subscribe, SubscribeReplayInfo, Ping, GetLatestBlockhash, GetBlockHeight, GetSlot, IsBlockhashValid and GetVersion. SubscribeDeshred and SubscribeGossip are not.
What if my IP changes?
Update your allowlist in the console. An address you remove has its open streams closed.
