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
| Name | Type | Description |
|---|---|---|
| filter_by_commitment | bool | Optional. Filter updates by commitment level |
Update Payload
| Field | Type | Description |
|---|---|---|
| slot | uint64 | The slot number |
| parent | uint64 | The parent slot number |
| status | CommitmentLevel | Commitment 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}