BlockMeta Subscription

Streams lightweight block metadata without full transaction or account data.

Type: streaming (via Subscribe)

Overview

The BlockMeta subscription streams block metadata as blocks are finalized. Unlike the full Blocks subscription, it only includes metadata (slot, blockhash, block time, block height) without transactions or account diffs.

This is much more bandwidth-efficient than full block streaming and is ideal for monitoring chain progression, building block explorers, or tracking block production timing.

Filters

This subscription does not accept any filters. All block metadata is streamed.

Update Payload

FieldTypeDescription
slotuint64The block slot
blockhashstringThe block hash
parent_slotuint64Parent slot
parent_blockhashstringParent block hash
block_timeint64Estimated production time
block_heightuint64Block height
rewardsReward[]Block rewards

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('BlockMeta update:', data);
14});
15stream.on('error', (err) => console.error('Error:', err));
16
17// Subscribe to BlockMeta
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 BlockMeta 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!("BlockMeta update: {:?}", msg);
25    }
26    Ok(())
27}