TransactionStatus Subscription

Streams lightweight transaction status changes by signature.

Type: streaming (via Subscribe)

Overview

The TransactionStatus subscription provides lightweight status updates for transactions. Unlike the full Transactions subscription, this only streams the confirmation status without full transaction data, making it more bandwidth-efficient.

Use this when you only need to know whether a previously submitted transaction has been confirmed or finalized, without needing the full transaction details.

Filters

NameTypeDescription
signaturestringOptional. Specific transaction signature to monitor
voteboolInclude or exclude vote transactions
failedboolInclude or exclude failed transactions

Update Payload

FieldTypeDescription
slotuint64The slot of the status change
signaturestringTransaction signature
is_voteboolWhether this is a vote transaction
errTransactionErrorError if the transaction failed

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