Yellowstone gRPC

Account Subscriptions

Monitor changes to Solana accounts in real-time. Track token balances, program state changes, and any on-chain data stored in accounts.

Unsupported Field

We don't support the txn_signature field in account subscriptions. It will always return empty.

Filter Fields

accountrepeated string

Filter by specific account public keys

ownerrepeated string

Filter by account owner (program ID). Monitors all accounts owned by a program.

memcmpMemcmpFilter

Match byte patterns at specific offsets in account data. Supports bytes, base58, and base64 encoding.

datasizeuint64

Filter accounts by their data size in bytes

token_account_statebool

Filter only for SPL token accounts

lamportsLamportsFilter

Filter by lamport balance using comparison operators: eq, ne, lt, gt

nonempty_txn_signatureoptional bool

Only receive updates associated with a transaction

Filter Definition

Request Filter
Protobuf
message SubscribeRequestFilterAccounts {
  repeated string account = 2;
  repeated string owner = 3;
  repeated SubscribeRequestFilterAccountsFilter filters = 4;
  optional bool nonempty_txn_signature = 5;
}

message SubscribeRequestFilterAccountsFilter {
  oneof filter {
    SubscribeRequestFilterAccountsFilterMemcmp memcmp = 1;
    uint64 datasize = 2;
    bool token_account_state = 3;
    SubscribeRequestFilterAccountsFilterLamports lamports = 4;
  }
}

Response Structure

Response
Protobuf
message SubscribeUpdateAccount {
  SubscribeUpdateAccountInfo account = 1;
  uint64 slot = 2;
  bool is_startup = 3;
}

message SubscribeUpdateAccountInfo {
  bytes pubkey = 1;
  uint64 lamports = 2;
  bytes owner = 3;
  bool executable = 4;
  uint64 rent_epoch = 5;
  bytes data = 6;
  uint64 write_version = 7;
  optional bytes txn_signature = 8; // Not supported -- will return empty
}

Example

Stream token accounts for a specific mint
Rust
SubscribeRequest {
    accounts: HashMap::from([(
        "token_accounts_by_mint".to_string(),
        SubscribeRequestFilterAccounts {
            filters: vec![
                // Filter for SPL token accounts
                SubscribeRequestFilterAccountsFilter {
                    filter: Some(Filter::TokenAccountState(true)),
                },
                // Match specific mint at offset 0
                SubscribeRequestFilterAccountsFilter {
                    filter: Some(Filter::Memcmp(
                        SubscribeRequestFilterAccountsFilterMemcmp {
                            offset: 0,
                            data: Some(Data::Base58(
                                "<MINT_ADDRESS>".to_string(),
                            )),
                        }
                    )),
                },
            ],
            ..Default::default()
        },
    )]),
    commitment: Some(CommitmentLevel::Confirmed as i32),
    ..Default::default()
}