Timing a stake
Delegation activates at the next boundary. Staking an hour before it versus an hour after it can mean a whole epoch of difference in when rewards start accruing.
Anno Solanae · an orbital clock for the chain
EpochWheel reads the live Solana cluster and tells you when the current epoch ends, when stake changes take effect, and when rewards land — then drops the moment straight into your calendar.
Reading the cluster…
Polled from public Solana RPC every 10 seconds. Between polls the slot counter is interpolated from the measured slot time and labelled as an estimate.
Epoch — ends in about
Projected boundary: —
Each point is one 60-second performance sample: seconds ÷ slots. The dashed line is the 12-hour average. Higher = slower slots = later epoch end.
Future boundaries are projections: remaining slots × the chosen slot-time basis. The further out, the wider the error band. Times shown in your local zone (—).
The .ics file is generated in your browser; nothing is sent anywhere. Re-download closer to the date for a tighter estimate.
| Epoch | First slot | Projected start (local) | UTC | ± band | In |
|---|---|---|---|---|---|
| Waiting for live data… | |||||
Pick what you're about to do. EpochWheel tells you which boundary it rides on.
Not live yields — a transparent formula you control. Reward per epoch ≈ stake × APY × epochDays ÷ 365.
APY here is your assumption (it depends on total staked share, validator performance, commission and MEV tips, which this page does not fetch). The epoch length uses the live projection.
Four public RPC calls, no keys, no wallet, no server of ours.
getEpochInfo returns the epoch number, the absolute slot, the slot index inside the epoch and the epoch size (432,000 slots on mainnet).
getRecentPerformanceSamples(720) gives up to 12 hours of 60-second samples. Seconds ÷ slots = the real, measured slot time — never an assumed constant.
getBlockTime on the epoch's first slot gives the real start timestamp, so we can measure this epoch's own average slot time — not just a guess.
Remaining slots × slot time = time to the boundary. Future epochs add 432,000 slots each. Your browser builds the .ics file locally.
Epoch boundaries quietly govern a lot of Solana life.
Delegation activates at the next boundary. Staking an hour before it versus an hour after it can mean a whole epoch of difference in when rewards start accruing.
Deactivated stake cools down at the boundary and is only withdrawable once fully inactive. Know the date before you promise funds to anyone.
Inflation rewards are calculated for the finished epoch and distributed at the start of the next one. Check your stake account just after the boundary.
Leader schedules are fixed per epoch. Operators plan restarts, upgrades and commission changes around boundaries; delegators watch for commission edits right before them.
Liquid-staking tokens typically update their exchange rate once per epoch, and some protocols run epoch-based crank jobs. The boundary is when those numbers move.
Spikes in slot time mean skipped or slow slots. The 12-hour chart shows congestion and leader trouble as bumps long before an epoch runs late.
Slots, epochs and the stake calendar, explained without hand-waving.
A slot is a short window in which one designated validator — the leader — may produce a block. Solana was long described as targeting about 400 ms per slot; the live measurement on this page currently reads — per slot, so always trust the measured value over the textbook one. Each leader gets four consecutive slots before the next takes over (you can see it in getSlotLeaders), which is why the small verdigris hand on the astrolabe spins once every four slots.
Slots are numbered forever upward. If a leader is offline or too slow, its slot is skipped: the slot number still advances, but no block exists for it. Because the clock is driven by time-based ticks rather than by block arrival, the real duration of a slot wobbles minute to minute. Measured slot time is the single most important input to any epoch countdown — which is why EpochWheel measures it three ways.
An epoch on mainnet is exactly 432,000 slots. Its wall-clock length is simply 432,000 × slot time: at the classic 400 ms that would be 2.0 days, while at the pace measured right now it is about — days. Small changes matter: 10 ms per slot is 72 minutes per epoch. Epoch n always begins at slot n × 432,000, which is why the almanac can name every future first slot with certainty while the time remains an estimate.
The leader schedule for each epoch is derived from stake weights captured a full epoch earlier, so every validator knows its slots in advance.
Stake changes are batched at boundaries. When you delegate, the stake account enters activating and starts earning from the next epoch. When you deactivate, it becomes deactivating and stops earning at the next boundary; once fully inactive you may withdraw. Network-wide, only a limited fraction of total stake (currently 9% per epoch) can warm up or cool down in a single epoch, so during very large stake movements some accounts take more than one epoch.
Rewards for epoch n are computed from the vote credits validators earned in it and paid at the start of epoch n + 1. Solana now spreads that payout over the first blocks of the new epoch ("partitioned rewards"), so balances can update a little after the boundary rather than in the very first slot.
New SOL issued to stakers follows a published schedule: it began at 8% per year and shrinks by 15% of itself annually (the taper) until it reaches a long-term floor of 1.5%. The live figure above comes from getInflationRate; the schedule from getInflationGovernor.
| Initial rate | — |
|---|---|
| Annual taper | — |
| Terminal rate | — |
| Current rate | — |
Staking APY is higher than inflation because rewards go only to the staked share of supply, then commission is deducted. That's why the reward sketch asks you for an APY instead of pretending to know it.
The projection is remaining slots × slot time. When the measured slot time changes — a burst of skipped slots, or a calmer hour — the projected end moves. Early in an epoch a 5 ms change in slot time shifts the end by tens of minutes; near the end it barely matters.
"Last hour" reacts quickly to current conditions. "This epoch so far" is the most stable once the epoch is a day old because it is measured from the real start time. None of them can foresee a sudden slowdown, so leave a margin.
On mainnet-beta, yes — the epoch schedule has no warm-up and a fixed 432,000 slots per epoch. Devnet and testnet can differ; this page reads mainnet only.
Your stake activates at the boundary whether you delegated two days or two minutes earlier, so staking late in an epoch loses nothing. Leave a safety margin, though: a transaction sent seconds before the boundary may land after it and then wait a whole extra epoch.
The free public node only keeps roughly the last day and a half of blocks, so block times for older epoch boundaries aren't available to a keyless browser app. We show what is real: the current epoch's measured start, and 12 hours of slot-time samples.
No. It's a static snapshot of the projection at download time with a unique ID per epoch, so re-downloading later replaces the old event in most calendar apps. Pick a reminder lead time to absorb the uncertainty.
No. The reward sketch is a labelled formula with your own assumptions. Real rewards depend on your validator's uptime, commission, MEV distribution and the network's staked share.
Never. EpochWheel reads only public network-wide data. There is no wallet connection, no signing, and nothing about you is collected.
solana-rpc.publicnode.com, a shared free endpoint. It can lag, rate-limit or fail; the page shows a retry message when it does and polls no faster than every 10 seconds.