Monitor Solana network consensus, block production, and network state changes with LaserStream — slot timing, block metadata, and filtered full blocks.
Use this file to discover all available pages before exploring further.
Slot and block monitoring gives you a window into Solana’s network consensus, block production timing, and overall health. With LaserStream you can track slot progression, block finalization, and network performance metrics in real-time using the helius-laserstream SDK.
{ slot: string; // Current slot number (u64 as string) parent: string; // Parent slot number (u64 as string) status: number; // CommitmentLevel enum: 0 = processed, 1 = confirmed, 2 = finalized}
Each slot represents ~400ms of network time. The three commitment levels reflect progressively stronger guarantees: processed (initial), confirmed (supermajority voted), finalized (irreversible).
u64 fields (slot, parent) arrive as strings to preserve precision beyond Number.MAX_SAFE_INTEGER. Convert with Number(slot.slot) when you need arithmetic. status is a numeric enum — use CommitmentLevel[slot.status] for the human-readable name.
Block Metadata Structure
{ slot: string; // u64 as string blockhash: string; rewards: { rewards: Array<{ pubkey: string; lamports: string; // u64 as string rewardType: string; // "fee" | "rent" | "voting" | "staking" }>; numPartitions: number | null; }; blockTime: { timestamp: string }; // Unix seconds as a u64 string blockHeight: { blockHeight: string }; // u64 as string, wrapped parentSlot: string; // u64 as string parentBlockhash: string; executedTransactionCount: string; // u64 as string entriesCount: string; // u64 as string}
Numeric fields (slot, parentSlot, executedTransactionCount, entriesCount, the values inside blockHeight and blockTime) are emitted as strings because they are u64 in the underlying proto. Wrap them in Number(...) for arithmetic or comparisons.
Full Block Structure
{ slot: string; // u64 as string blockhash: string; rewards: { rewards: Array<{ pubkey: string; lamports: string; // u64 as string rewardType: string; }>; numPartitions: number | null; }; blockTime: { timestamp: string }; // Unix seconds (u64 string) blockHeight: { blockHeight: string }; // u64 as string, wrapped parentSlot: string; // u64 as string parentBlockhash: string; executedTransactionCount: string; // total executed tx in the block (u64 as string) updatedAccountCount: string; // total account updates in the block (u64 as string) entriesCount: string; // u64 as string transactions: Array<{ signature: Buffer; // base58-encode for display isVote: boolean; transaction: TransactionMessage; // full transaction payload meta: TransactionMeta; // execution metadata (fee, err, balances, …) index: string; // u64 as string }>; accounts: AccountUpdate[]; // populated when includeAccounts: true entries: Entry[]; // populated when includeEntries: true}
Full blocks can be several MB with all transactions and accounts. The same u64-as-string convention applies — wrap numeric fields with Number(...) for arithmetic. Inside each transaction, meta.fee, meta.preBalances, meta.postBalances, etc. are also strings.
Symptom: Gaps in slot progression.Causes: Network connectivity issues, validator downtime, client processing delays.Solutions: Track slot gaps and alert; implement catch-up logic via historical replay; monitor connection health.
High Volume
Symptom: Too much block data.Solutions: Use block metadata instead of full blocks; apply account filters; disable unnecessary inclusions (entries, accounts); process asynchronously.
Timing Issues
Symptom: Inconsistent slot timing.Analysis: Calculate moving averages; track deviations; monitor network health metrics; correlate with validator performance.