Guide

Solana slots and epochs explained: time, leaders, and finality

Ethereum talks in blocks; Solana talks in slots. Every slot is a ~400 millisecond window where one validator — the slot leader — gets to produce a block. Roughly 432,000 slots make up an epoch, the staking schedule's main unit of time. If you have ever wondered why a wallet shows "processed" in under a second but "finalized" takes longer, or why explorers list slot numbers next to transactions, this guide maps Solana's clock to what you actually see when you send SOL or build a dApp.

What is a Solana slot?

A slot is the smallest unit of scheduled block production on Solana. The network targets ~400 ms per slot — about 2.5 slots per second under healthy conditions. Each slot has a monotonically increasing integer ID you can query with RPC methods like getSlot.

Not every slot produces a block. Network hiccups, leader outages, or skipped leader rotations mean you will see empty slots in explorers. That is normal: the slot counter still advances even when no block lands.

Think of a slot as a labeled time slice on a shared calendar. Validators agree on which slot number the chain is on right now; transactions included in a block are stamped with that slot when they execute.

Slot leaders and block production

Before each epoch begins, the stake-weighted validator set runs a leader schedule — a deterministic list of which validator leads which slots. The more SOL staked to a validator, the more leader slots it receives over time.

When it is your turn as leader, you:

  1. Pull pending transactions from the Turbine broadcast tree and local mempool.
  2. Order them into a block using Proof of History (PoH) ticks as a verifiable time source.
  3. Broadcast the block to the rest of the cluster for voting.

Other validators do not re-mine your block; they vote on whether they observed it and whether its state transitions are valid. Supermajority stake voting on a fork is what moves a block from "seen" toward "finalized."

For users, the practical takeaway is simple: your transaction lands in whichever block the current leader includes it in — usually the next one or two slots after broadcast, unless the network is congested or your fee is too low.

Proof of History in one paragraph

Proof of History (PoH) is not consensus by itself. It is a cryptographic sequence — a verifiable delay function — that lets the leader prove "event B happened after event A" without every validator replaying work in real time. PoH ticks advance inside each slot, giving transactions a canonical order before the block leaves the leader.

You do not need to implement PoH to use Solana. It matters when you debug ordering, read low-level explorer fields, or wonder how the chain sustains high throughput without miners racing on the same puzzle. Consensus still comes from stake-weighted votes, not from PoH alone.

What is an epoch?

An epoch is a fixed number of slots — historically 432,000 slots, which works out to roughly 2–2.5 days at target slot time. Epoch boundaries are when Solana reshuffles important network state:

  • Leader schedule for the next epoch is activated.
  • Staking rewards are calculated and distributed to delegators.
  • Validator stake snapshots influence future leader weight.

RPC exposes the current epoch via getEpochInfo, returning fields like epoch, slotIndex (how far into the epoch you are), and slotsInEpoch. Wallets rarely show epoch numbers, but backend services tracking validator performance or staking dashboards use them constantly.

Epoch length can be changed by cluster governance over time; always read live RPC values instead of hard-coding constants in production code.

Slots vs blocks vs transactions

These terms get conflated. A quick map:

  • Slot — scheduled time window; may or may not contain a block.
  • Block — bundle of transactions executed in a slot, identified by blockhash and slot number.
  • Transaction — one signed instruction set; gets a signature when included in a block.

When you call getLatestBlockhash, you receive a recent block's hash plus lastValidBlockHeight — a safety window measured in blocks, not wall-clock seconds. That window is why stale transactions fail with Blockhash not found; the chain moved forward several hundred slots while your user hesitated on the approve button. See transaction simulation for debugging those failures before users sign.

Processed, confirmed, and finalized

Solana RPC commitment levels describe how much stake has voted on a block, not arbitrary labels. They tie directly to slots:

  • Processed — your node saw the transaction in a block on the current fork. Fastest; can theoretically be rolled back if the fork is abandoned.
  • Confirmed — a supermajority of stake voted on a fork containing the block. Good default for most apps and games.
  • Finalized — the block is rooted; rollback would require massive stake slash conditions. Use for high-value settlements.

A micropayment game might credit a user at confirmed (~1–2 seconds). A treasury withdrawal might wait for finalized (~15–30 seconds depending on network conditions). Our confirmation time guide walks through typical latencies and what to do when a payment seems stuck.

Passing commitment: 'finalized' to getSignatureStatuses means you only treat the payment as done when enough slots have passed with supermajority votes — not when the wallet animation finishes.

Why slots matter for developers

Slot subscriptions and live UIs

slotSubscribe WebSocket notifications fire every time the cluster advances a slot — useful for progress bars, leaderboards, or "network is moving" indicators. Pair with reliable RPC endpoints so your UI does not freeze when a public node rate-limits you.

Congestion and priority fees

During hot NFT mints or memecoin spikes, leaders fill blocks and transactions compete per slot. Raising priority fees helps your transaction win the next available slot instead of being dropped.

Block height vs slot number

Explorer UIs may show both. Slot numbers climb steadily; block height counts only slots that actually produced blocks. When comparing "how far behind is my RPC node," check getSlot against a reference endpoint — a lag of dozens of slots means your reads are stale.

Devnet vs mainnet timing

Devnet has fewer validators and looser performance; slot times wobble more. Do not benchmark production UX on devnet slot latency alone — test on mainnet with small amounts. See devnet vs mainnet for environment differences.

Common misconceptions

  • "One slot equals one block." False — empty slots exist; blocks can also be skipped when leaders fail.
  • "400 ms is guaranteed block time." It is a target. Real latency includes propagation, vote rounds, and your RPC distance.
  • "Finalized means irreversible on every chain." On Solana it is very strong, but bridges and CEX crediting policies may still wait longer.
  • "Epochs only matter for validators." Any app showing staking APR, validator uptime, or epoch countdowns needs the same math.

Quick reference

Term Typical value What it is for
Slot ~400 ms target Leader produces (or skips) one block window
Epoch ~432,000 slots (~2 days) Staking rewards, leader schedule rotation
Blockhash TTL ~150 blocks (~60–90 s) Unsigned or delayed txs expire
Finalized ~32 slots of votes High-assurance settlement

Exact constants evolve with cluster upgrades — treat this table as intuition and verify with live getEpochInfo and getLatestBlockhash responses.

Related reading