Slots Subscription

Streams slot progression updates as the cluster advances.

Type: streaming (via Subscribe)

Overview

The Slots subscription streams updates as the cluster processes new slots. Each update indicates the current slot, its parent, and the commitment status (processed, confirmed, finalized).

This is used for monitoring chain health, tracking confirmation progress, and synchronizing time-sensitive operations with slot boundaries. Slot updates are very lightweight and arrive at high frequency (~2.5 per second).

Filters

NameTypeDescription
filter_by_commitmentboolOptional. Filter updates by commitment level

Update Payload

FieldTypeDescription
slotuint64The slot number
parentuint64The parent slot number
statusCommitmentLevelCommitment status of this slot

Usage Examples

Node.js

1const grpc = require('@grpc/grpc-js');
2const protoLoader = require('@grpc/proto-loader');
3
4const packageDef = protoLoader.loadSync('geyser.proto', {
5  keepCase: true, longs: String, enums: String, defaults: true, oneofs: true
6});
7const proto = grpc.loadPackageDefinition(packageDef).geyser;
8const client = new proto.Geyser('[IP_ADDRESS]:[PORT]', grpc.credentials.createInsecure());
9
10const stream = client.subscribe(new grpc.Metadata());
11
12stream.on('data', (data) => {
13  console.log('Slots update:', data);
14});
15stream.on('error', (err) => console.error('Error:', err));
16
17// Subscribe to Slots
18stream.write({
19  accounts: {},
20  slots: {},
21  transactions: {},
22  blocks: {},
23  blocksMeta: {},
24  commitment: 'processed',
25  entry: {}
26});

Rust

1use yellowstone_grpc_proto::geyser::geyser_client::GeyserClient;
2use yellowstone_grpc_proto::geyser::SubscribeRequest;
3use tonic::transport::Channel;
4
5#[tokio::main]
6async fn main() -> Result<(), Box<dyn std::error::Error>> {
7    let channel = Channel::from_static("http://[IP_ADDRESS]:[PORT]")
8        .connect().await?;
9    let mut client = GeyserClient::new(channel);
10
11    // Configure your Slots subscription filters here
12    let request = SubscribeRequest {
13        accounts: Default::default(),
14        slots: Default::default(),
15        transactions: Default::default(),
16        blocks: Default::default(),
17        blocks_meta: Default::default(),
18        commitment: Some(1), // Processed
19        entry: Default::default(),
20    };
21
22    let mut stream = client.subscribe(std::iter::once(request)).await?.into_inner();
23    while let Some(msg) = stream.message().await? {
24        println!("Slots update: {:?}", msg);
25    }
26    Ok(())
27}