Skip to main content
Public Beta. Preprocessed transactions are part of Helius’s Shred Delivery product family. They are available to any Professional plan or higher subscriber and are metered at 20 credits per 1 MB.On average, preprocessed transactions arrive ~8 ms faster than the processed commitment level, at the cost of execution metadata (see tradeoffs below).
Preprocessed transactions are the fastest way to receive Solana transactions over gRPC. Helius decodes shreds directly as they arrive at the validator and ships the resulting transactions to you, giving you access to transaction data milliseconds earlier than any post-execution subscription — roughly 8 ms ahead of the processed commitment level on average. This guide explains when to use preprocessed transactions, what data is available, and how to subscribe to them using the LaserStream SDKs (which also serve preprocessed transactions over the same gRPC connection).

Where preprocessed transactions sit in the lifecycle

In Solana’s architecture, transactions flow through several stages before becoming fully processed:
  1. Shred Reception → Validator receives transaction shreds (data fragments). ← Helius’s raw shreds (UDP) are delivered here.
  2. Shred Decoding → Shreds are decoded into raw transactions. ← Preprocessed transactions available here.
  3. Transaction Execution → Transaction is executed by the runtime.
  4. Metadata Generation → Pre/post balances, logs, and error information are computed.
  5. Commitment → Transaction reaches processed/confirmed/finalized state. ← LaserStream gRPC and LaserStream WebSocket deliver here.
Post-execution subscriptions deliver data at stage 5 — after full execution and metadata generation. Preprocessed subscriptions deliver at stage 2 — immediately after decoding shreds, before execution completes. The tradeoff: you receive transaction data milliseconds earlier, but without execution metadata like balance changes, logs, or error information.
This is a transactions-only stream. Account and program state updates don’t exist until the runtime executes the transaction (stage 4). If you need real-time account or program updates — token balances, bonding-curve state, program accounts, anything that isn’t a raw transaction — use LaserStream gRPC at processed commitment, which is the fastest way to receive account/program changes.
Need even faster transaction signals? Try Pre Confirmations to stream scheduled transactions and Raw Shreds (UDP) for unprocessed transaction data.

Best-effort Delivery Guarantees

Preprocessed transaction delivery is best-effort, not guaranteed. We target 99.99% delivery rate, but some transactions may be lost during:
  • Infrastructure updates and redeployments
  • Network issues or validator connectivity problems
  • Edge cases in shred decoding or processing
For critical applications requiring guaranteed delivery, use standard transaction subscriptions instead.

What data is available?

Preprocessed transactions include the complete transaction message but lack execution metadata:

Available Data

  • Transaction signature - Unique transaction identifier
  • Account keys - All accounts referenced by the transaction
  • Instructions - Complete instruction data and program calls
  • Recent blockhash - Transaction expiration reference
  • Signatures - All transaction signatures
  • Is vote transaction - Whether this is a vote transaction
  • Slot number - Which slot contained this transaction

Missing Data

  • Transaction metadata - Token balances changes, pre/post balances, transaction status
  • Transaction errors - We cannot determine if the transaction failed
  • Inner instructions - Cross-program invocations (CPIs) are not included
  • Log messages - Program logs are generated during execution
  • Compute units consumed - Execution metrics unavailable
Think of preprocessed transactions as receiving the “proposal” without the “result.” You see what the user tried to do, but not what actually happened.

SDK Support and Version Requirements

Preprocessed transaction subscriptions are supported across all LaserStream SDKs:

JavaScript/TypeScript

Version 0.2.8 or later

Rust

Version 0.1.5 or later

Go

Version 0.1.0 or later

Implementation Examples

JavaScript/TypeScript

The JavaScript SDK provides a dedicated subscribePreprocessed function with automatic reconnection:
Full example: preprocessed-transaction-sub.ts

Rust

The Rust SDK provides native performance:
Full example: preprocessed_transaction_sub.rs

Go

The Go SDK provides idiomatic Go interfaces:
Full example: preprocessed-transaction-sub.go

Subscription Structure and Filtering

Request Structure

The preprocessed subscription request follows a similar structure to standard subscriptions but with a focused set of filters:

Response Structure

Updates arrive with the complete transaction message and basic metadata:
The transaction.transaction field contains the complete Solana transaction structure including:
  • Message - Account keys, instructions, recent blockhash
  • Signatures - All transaction signatures
  • Address table lookups - For versioned transactions
This is identical to the transaction structure in standard subscriptions, but without the meta field containing execution results.