Entries Subscription
Streams ledger entries as they are produced by the leader.
Type: streaming (via Subscribe)
Overview
The Entries subscription streams raw ledger entries as they are produced within slots. Entries are the lowest-level unit of data in the Solana ledger, each containing a set of transactions that were processed together.
This is primarily used for advanced indexing, validator monitoring, and research applications. Most application developers will prefer the Transactions or Blocks subscriptions instead.
Filters
This subscription does not accept any filters. All entries are streamed.
Update Payload
| Field | Type | Description |
|---|---|---|
| slot | uint64 | The slot containing this entry |
| index | uint64 | Entry index within the slot |
| num_hashes | uint64 | Number of PoH hashes |
| hash | bytes | Entry hash |
| executed_transaction_count | uint64 | Number of transactions in this entry |
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('Entries update:', data);
14});
15stream.on('error', (err) => console.error('Error:', err));
16
17// Subscribe to Entries
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 Entries 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!("Entries update: {:?}", msg);
25 }
26 Ok(())
27}