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
| Name | Type | Description |
|---|---|---|
| signature | string | Optional. Specific transaction signature to monitor |
| vote | bool | Include or exclude vote transactions |
| failed | bool | Include or exclude failed transactions |
Update Payload
| Field | Type | Description |
|---|---|---|
| slot | uint64 | The slot of the status change |
| signature | string | Transaction signature |
| is_vote | bool | Whether this is a vote transaction |
| err | TransactionError | Error 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}