Epochs, client upgrades and the windows you can plan around

Some periods of strange behaviour are on a schedule that anyone can read. Epoch boundaries arrive on a published cadence, client rollouts are announced, and feature activations wait for a boundary to switch on.

The Network Conditions Desk 2160 words 10 min read Updated 4 September 2026
epoch length constant A published number of slots, not a wall-clock duration
boundary scheduled Stake, leader schedule and feature gates turn over together
client rollout announced Releases are published; adoption across validators is gradual
restart class emergent Not scheduled, not predictable, documented afterwards by operators

Not every period of strange behaviour on Solana is a surprise. Epoch boundaries arrive on a published cadence, validator client releases are announced before they spread, and some protocol changes deliberately wait for a boundary to take effect. These are windows you can put in a calendar, and a trader who knows where they are stops debugging things that were never broken.

This report separates the windows you can plan for from the ones nobody can, and describes what actually changes in each.

Three kinds of window

Scheduled. Epoch boundaries. The cadence is set by a published protocol constant, your client can tell you exactly how far through the current epoch the cluster is, and the next boundary is arithmetic rather than speculation.

Announced. Client releases and feature activations. Somebody publishes them before they happen, adoption is gradual, and the information is public for anyone who reads release notes.

Emergent. Everything else, including the incident classes that operators declare while they are happening and document afterwards. These cannot be planned for. They can only be prepared for, which is a different activity and belongs to the response section of this site.

Two of the three are free information. Most traders use none of it, which is why a boundary or a rollout regularly gets diagnosed as a bug in somebody's routing code.

What an epoch actually is

An epoch is a fixed number of slots, not a fixed amount of time. The protocol defines the slot count, and the network works through those slots at whatever pace it manages. The published constant is 432,000 slots, and the target slot duration is 400 milliseconds.

Multiply those two published numbers and you get 172,800 seconds, which is exactly two days. That is arithmetic from constants and nothing more. Any slot that is skipped or produced more slowly pushes the real boundary later, so the calculated figure is a floor rather than a schedule. This is why the useful move is to ask your client for epoch progress rather than to assume a calendar.

The distinction matters when you are planning around a boundary. A campaign scheduled from a fixed two-day assumption will drift out of alignment with the actual boundary over time, while one that reads epoch progress before it starts will not. Epoch mechanics and the accounting attached to them are documented in the Solana protocol documentation.

What changes at a boundary

Several things turn over at once, which is exactly why boundaries produce unusual-looking behaviour without anything being wrong.

  • Stake changes take effect. Stake that was activating becomes active and stake that was deactivating stops counting. The distribution of stake across validators is different on the other side of the boundary than it was before.
  • A new leader schedule applies. Which validator leads which slot is decided per epoch, so the sequence of block producers you are sending into changes wholesale.
  • Waiting feature activations switch on. Protocol changes that were gated pending sufficient adoption take effect at a boundary rather than mid-epoch.
  • Reward accounting is processed. The work associated with distributing staking rewards is concentrated around the boundary rather than spread evenly through the epoch.

None of these is a fault. All of them together mean the network on one side of a boundary is measurably a different configuration from the network on the other, and that a routine which behaved consistently for two days may behave slightly differently afterwards for reasons that have nothing to do with your code.

The leader schedule is not random

Slots are assigned to leaders according to a schedule computed in advance for each epoch, weighted by stake. It is deterministic, it is known before the epoch starts, and it does not change while the epoch runs.

The consequence people find surprising is that your experience of the chain depends on which leaders you happen to be sending into. Operators run different hardware, different network paths and, during a rollout, different client versions. A run of failures that clusters around particular moments rather than particular pairs is often a leader effect rather than a market one.

You are not going to schedule around individual leaders, and you should not try. What the schedule earns you is a better default explanation: when unevenness follows time rather than venue, the block producer is a candidate, and that is a very different investigation from one aimed at your own routing.

Unevenness has an axis

Congestion is uneven across accounts. Degradation is uneven across time in an unpatterned way. A rollout or leader effect is uneven across producers, which shows up as time-clustered inconsistency on venues that are otherwise fine. Naming the axis is usually faster than naming the cause.

How a client rollout looks from outside

Validators are operated independently and each operator decides when to adopt a new client release. A rollout is therefore not an event but a gradient: the set of validators is mixed for a period, and the length of that period is a social fact rather than a protocol one.

From your seat, the signature is inconsistency that correlates with nothing you control. The same transaction on the same venue with the same parameters behaves differently at different moments. This is the point at which many operators start changing settings, and the change that appears to fix things is usually just the rollout progressing.

The way to see it rather than infer it is to sample the version reported by several nodes and to read the release notes published by the client maintainers. Operational documentation for the Agave validator client is the primary source for what a release changes and how upgrades are expected to be carried out.

It is worth being precise about what a rollout does not do. A release adopted gradually does not create two sets of consensus rules. Rules change when a gated feature activates, which happens at a boundary and for everybody at once. What varies during a rollout is implementation behaviour at the edges, and that is enough to make your outcomes inconsistent without anything about the ledger being ambiguous.

The trader-facing summary is short. During a rollout, prefer patience over precision: widen deadlines, avoid strategies that depend on a particular producer behaving a particular way, and postpone tuning until the set has converged. Parameters tuned against a moving target are optimal for a configuration that will not exist next week, and you will not know which of them to unwind afterwards.

Feature gates and delayed changes

Not every protocol change takes effect when the code shipping it is installed. Solana uses feature gates so that a change lands in a release, waits until enough of the network is running code that understands it, and then activates at an epoch boundary.

This design is what allows a distributed set of independently operated validators to change behaviour together rather than gradually. It also means the moment a change becomes visible is decoupled from the moment it was released, sometimes by a considerable margin.

For a trader, the practical effect is that a boundary can bring behaviour that was not present in the previous epoch and was not caused by anything on your side. If your parameters were tuned tightly against a specific behaviour, a feature activation is one of the few things that can invalidate them without warning. Anyone who has documented how volume campaigns are measured will recognise the problem: a measurement taken before an activation and one taken after are not necessarily measuring the same system.

Changes at the venue layer

The chain is not the only thing that changes. The programs you interact with have their own release cycles, and a venue can deploy a new program version, migrate liquidity, or change an account layout on a schedule that has nothing to do with epochs.

These changes produce failures that look network-shaped and are not. An account list that no longer matches the program, an instruction that has been superseded, or a pool that has been migrated will all fail persistently while the rest of the chain behaves perfectly. The isolation sequence separates them quickly, because a venue-layer change is deterministic and a network condition rarely is.

Documentation for the core on-chain programs is published at solana-program.com/docs, and individual venues publish their own. Following the ones you actually trade is cheap and removes an entire category of mystery.

Emergent windows and the restart class

Some conditions are not scheduled and not announced. The class most people mean when they talk about a serious network event is a cluster restart, in which validator operators coordinate to resume the network from an agreed point after block production has stopped.

This desk describes that as a class and deliberately does not narrate instances of it. Reconstructing a specific event second-hand, with a date and a duration and a cause, is how inaccurate accounts spread, and the people who actually have the evidence publish it themselves. When an event of this kind occurs, operators post notices to the official status property and the client maintainers publish technical material about what happened and what changed as a result.

What is worth knowing in advance is the shape of the aftermath rather than the event. Following a restart, the practical questions for a trader are which of your transactions were included before production stopped, what state your positions are actually in, and whether your tooling reconnected to a node that is genuinely caught up. All three are answered by reading the chain, not by reading commentary.

There is a second emergent class worth separating from the first, because the response differs. Some conditions degrade service without stopping production, and they end without any coordinated action at all. From your seat these look similar in the early minutes and diverge quickly: production continuing is the distinguishing observation, and it is available to you from a slot comparison rather than from anybody's announcement.

The reason to hold both classes in mind is that they change what resumption means. After a degraded period, resumption is a decision about risk appetite, and nothing needs reconciling beyond the transactions you sent. After a stop-and-resume event, reconciliation is mandatory before any new order, because the boundary between what settled and what did not is exactly the thing that was disturbed. Treating the second like the first is how an operator discovers a position they did not know they held.

Building your own window calendar

A calendar of windows is a small document and it removes a surprising amount of noise. The table below is the structure; the contents are yours to fill from primary sources.

WindowPredictabilityWhere you learn about itTypical effectSensible posture
Epoch boundaryScheduled, computableEpoch progress from your own clientStake, schedule and gated changes turn overAvoid starting long unattended runs across it
Client release rolloutAnnounced, gradualClient maintainer release notes and node versionsOutcomes vary by producer for a periodWiden deadlines, expect inconsistency
Feature activationAnnounced, boundary-timedRelease notes and protocol documentationBehaviour changes at a boundaryRe-validate tightly tuned parameters afterwards
Venue program changeAnnounced by the venueThe venue own channels and docsDeterministic failures on that venue onlyFollow the venues you actually trade
Restart class eventEmergentOfficial status property, operator write-upsProduction stops, then resumes from an agreed pointStop sending, reconcile state before resuming

Notice that four of the five rows are knowable in advance and only one is not. That ratio is the argument for keeping the calendar at all.

Planning around a known window

Knowing a window is coming is only useful if it changes a decision. These are the decisions worth making before one arrives.

  • Read epoch progress before scheduling anything long, so a run does not straddle a boundary by accident.
  • Decide in advance whether you pause across boundaries, and write the decision down rather than making it each time.
  • Widen deadlines during an announced rollout instead of tightening them, because inconsistency punishes tight windows hardest.
  • Re-validate parameters that were tuned aggressively after any feature activation, since the system they were tuned against has changed.
  • Subscribe to release notes for the client and for the venues you trade, and read them rather than filing them.
  • Keep a baseline reading of your own stack from a quiet period, so post-window behaviour has something to be compared against.
  • Record which window you were in whenever you record an incident note, because that context is invisible afterwards.

The pattern that emerges from doing this for a while is that a large share of unexplained behaviour turns out to be explained. Not by anything dramatic, but by a boundary, a rollout, or a venue deploying something on a Tuesday. Operators who track windows spend their debugging time on the residue, which is where the real problems live.

That is also the honest way to evaluate any tooling you rent. A Solana volume bot platform that lets you schedule, pause and report around known windows is giving you control over the predictable part of the problem, which is the only part anybody can control in advance.

Questions the desk keeps being asked

What is a Solana epoch?

An epoch is a fixed number of slots after which several pieces of network accounting turn over, including stake activation and deactivation and the schedule of which validator leads which slot. The slot count is a published protocol constant rather than a wall-clock duration, so the real length of an epoch depends on how quickly those slots are actually produced.

How long does a Solana epoch last?

Multiplying the published slot count for an epoch by the target slot duration of four hundred milliseconds gives an arithmetic floor of about two days. That is a calculation from two constants, not a measurement. Real epochs take longer whenever slots are skipped or produced more slowly than target, which is why a client reporting epoch progress is more useful than any fixed schedule.

Does anything break at an epoch boundary?

Nothing is designed to break. Several things change at once, which is different: stake changes take effect, a new leader schedule applies, and feature activations that were waiting for a boundary switch on. Behaviour that would deserve investigation mid-epoch is often expected at the edge, so knowing where you are in the epoch saves wasted debugging.

What is a validator client upgrade window?

It is the period during which validators move from one client release to another. Adoption is a decision made independently by each operator, so the set is mixed for a while rather than switching at once. The visible effect is that outcomes can depend on which leader produced the block you landed in, which reads as inconsistency.

How do I know a rollout is happening?

Sample the client version reported by several nodes rather than one, and read the release notes published by the client maintainers. A spread of versions across nodes is the signature of a rollout in progress. This is context rather than an alarm, and it usually converts a confusing symptom into an expected one.

Should I pause trading around a boundary or upgrade?

That is a risk decision and the honest answer is that it depends on how much unusual behaviour costs you. What is worth doing regardless is deciding in advance rather than during. A schedule that runs through every window because nobody chose otherwise is still a choice, just one nobody made deliberately.

Filed in Conditions by The Network Conditions Desk. Every mechanism on this page is described from public protocol and client documentation; every number is either a published constant or arithmetic labelled as illustrative. How the desk sources and corrects its pages is set out in about the desk.