Skip to content

SIMD-0326: Alpenglow #326

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 14 commits into
base: main
Choose a base branch
from
258 changes: 258 additions & 0 deletions proposals/0326-alpenglow.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,258 @@
---
simd: '0326'
title: Alpenglow
authors:
- Quentin Kniep
- Kobi Sliwinski
- Roger Wattenhofer
category: Standard
type: Core
status: Review
created: 2025-07-25
feature: (fill in with feature key and github tracking issues once accepted)
---

## Summary

This proposal changes the core consensus protocol from the current one, based on
**Proof-of-History** and **TowerBFT**, to **Alpenglow**, specifically the
**Votor** parts of Alpenglow. Compared to the old protocol, **Alpenglow** offers
higher resilience and better performance.

This SIMD comes with an extensive companion paper. The Alpenglow White Paper
v1.1 is available at https://www.anza.xyz/alpenglow-1-1.

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I’d prefer to see the whitepaper here as part of the PR, so that it’s clear the document has changed (via commits). Even now, when I follow the link in the document title, I see Solana Alpenglow White Paper 2025-05-19 v1.1.pdf, while in the document header it says White Paper v1.1, July 22, 2025.

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

the pdf title is wrong, but if you see v1.1 you are the correct place

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Nothing prevents someone from changing something in the document without updating its version, but uploading the revised version to Google Drive. If the document is part of the PR, at least it will be visible.

Alright, I’ll leave this here then:

shasum "Solana Alpenglow White Paper 2025-05-19 v1.1.pdf" 
07788c2ba9528f526c1514d18f1f5496a1fcdc50  Solana Alpenglow White Paper 2025-05-19 v1.1.pdf


More precisely, this SIMD covers everything in the v1.1 White Paper **except**

- Section 2.2 Rotor: Initially we stay with Turbine as the data dissemination
protocol. Rotor will be introduced later and will get its own SIMD.
- Section 3.1 Smart Sampling: Related to Rotor, will be included in the Rotor
SIMD.
- Section 3.2 Lazy (Asynchronous) Execution: Has its own SIMD.


## Motivation

The current TowerBFT consensus protocol:

- has a consensus finality time of 12.8 seconds,
- additionally provides earlier pre-confirmations,
- and does not have a security proof, which is concerning.

Alpenglow takes into account the current state of the art in consensus research
to improve the consensus protocol in all points mentioned above. Alpenglow:

- Lowers actual consensus finality latency below the pre-confirmation latency of
TowerBFT.
- Decreases bandwidth use, e.g., by eliminating costly gossip traffic.
- Reduces the consensus computation overhead, e.g., by replacing on-chain
signature verification with local signature aggregation.
- Increases resilience on all fronts (sophisticated attackers, adversarial
network conditions, DOS attacks and crash failures).
- Removes harmful incentives, such as waiting to cast more profitable votes.


## New Terminology

**Alpenglow** is a set of core protocol changes proposed in the new white paper
and related subsets of changes: Votor, Rotor, Blokstor, Pool.

**Slice** is the data structure between block and shred, i.e., a block is sliced
into slices, which are then shredded into shreds. A slice was formerly called
FEC-set.

**Timeouts** are short periods of time measured locally by the nodes. Their
purpose is akin to Proof-of-History, but without any notion of synchronized
time. The absolute wall-clock time and clock skew have no significance to the
protocol. Even extreme clock drift can be simply incorporated into the timeouts,
e.g. to tolerate clock drift of 5%, the timeouts can simply be extended by 5%.
As explained later, Alpenglow is partially-synchronous, so no timing- or
clock-related errors can derail the protocol.

**Vote** is an existing term already, but votes are different in Alpenglow. In
Alpenglow, votes are not transactions on chain anymore, but just sent directly
between validators. Also, votes do not include lockouts.
Comment on lines +72 to +74
Copy link

@topointon-jump topointon-jump Jul 31, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Will there still be a vote processor program? If so, will this be a bpf program? Would we migrate over from the current vote processing program to a new alpenglow bpf vote program? It might be worth specifying that in this SIMD.

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Engineers should have the word here, but I would assume the accounting for vote aggregations (and first certificates) can be done in the same way as accounting for votes now (with a different program though).

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

For Alpenglow v1 we do not plan to create a new vote program, because the votes are not transactions any more, nothing much for a vote program to do. We will add bls_pubkey in the current vote program for verification and pubkey management. It has been added to Vote Account v4 #185

For the rewards scheme described in SIMD, I suppose we need to add the two BLS certs to block footer
#307, and we need to add parent bankhash to block footer as well as agreed in NYC. The rewards calculation will probably be similar to now, done at beginning of epoch.

Does that answer your question?

Copy link

@topointon-jump topointon-jump Aug 1, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks for clarifying!! Few more questions - will we need to keep some data on-chain for reward computation/distribution? How will that data be updated?

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

That's very good question, I think what needs to be done for block footer is still up in the air. But I would imagine the block footer will be kept in the big table as it contains important information. It's not "on-chain" as a normal transaction, but at least the raw data is kept around.

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I was asking more about rewards - I'm assuming there will be some data that is needed to calculate how much each voter/staker account gets paid, based on their performance during the epoch. Will that be stored on-chain? How will it get updated? Sorry for the noob question :)

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

That's another good question, the conclusion from last meeting was:

  • BLS certs in block footer
  • but credits are updated in vote accounts
  • Non leader checks the BLS certs -> credits conclusion during replay
  • rest of rewards calculation same as now

Copy link

@topointon-jump topointon-jump Aug 1, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

but credits are updated in vote accounts

this is the part I'm not clear about - how exactly will this happen? will there will need to be some kind of bpf program updating the vote account state? if this is documented anywhere feel free to point me to it 😄

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Sure, shared the meeting notes. The current plan is to "do it outside the VM before all transactions", so have to implement it in validator code....
We can discuss pros and cons about this though, this is just the current proposal.


**Certificate** is a proof that a certain fraction of nodes (by stake) cast a
specific type of vote. This can be efficiently implemented as an aggregate (BLS)
signature corresponding to the set of individual vote signatures.

**Votor** is a set of protocols related to voting, block production and
finalization.

**Pool** is the data structure managing observed votes and certificates,
informing Votor.

**Fast-finalization** is the mechanism of finalizing a block after observing one
round of votes for the block from 80% of the stake.

**Slow-finalization** is the mechanism of finalizing a block after observing two
rounds of votes for the block from 60% of the stake.

**Validator Admission Ticket** (VAT) is a mechanism translating the current cost
of voting into a similar economic equilibrium for Alpenglow.


## Detailed Design

Here we only give a short rundown of the parts that will be most visible to
validator operators. For more details and proofs please read the Alpenglow white
paper.


### Voting

Voting proceeds in two rounds:

- In the first round, validators vote either to *notarize* a specific block or
*skip* the slot, based on whether they saw a valid block before their local
timeout.
- In the second round, validators vote *finalize* if they saw enough *notarize*
votes in the first round. Otherwise there are two conditions (*safe-to-notar*
and *safe-to-skip*, explained in the white paper) that cause the validators to
vote *notarize-fallback* or *skip-fallback*.

Votes are distributed by broadcasting them directly to all other validators.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

nit: should we say all other staked validators?

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

In Alpenglow terminology every validator is staked.



### Certificates

There are five types of certificates:

- Notarization: corresponds to 60% of *notarize* votes.
- Skip: corresponds to 60% of *skip* or *skip-fallback* votes.
- Finalization: corresponds to 60% of *finalize* votes.
- Fast-Finalization: corresponds to 80% of *notarize* votes.
- Notar-fallback: corresponds to 60% of *notarize* or *notar-fallback* votes.


### Finality

A slot can be directly finalized (and thus decided) in one of two ways:

- Create or receive a *fast-finalization* certificate.
- Create or receive a *slow-finalization* certificate and a *notarization*
certificate.

Whenever a
block *b* in slot *s* is finalized directly, all previous slots that were
undecided are decided indirectly. All ancestors of *b* are finalized, and slots
omitted in the chain of *b* are skipped.

Liveness (proved in the white paper) ensures that eventually a block from an
honest leader will be finalized, thus finalizing all ancestor blocks. The white
paper also proves that safety holds, i.e., if a block b is finalized, then all
future finalized blocks are descendants of b.


### Rewards

In this SIMD we focus on the consensus-related benefits of Alpenglow. Below, we
translate the existing vote rewards as they are (same mechanisms, just different
programs), while removing some harmful incentives (such as the incentive to wait
before casting a vote). Economic changes are left to future economics-focused
SIMDs.

In this proposal we make sure that nodes that do not participate in the protocol
will not be rewarded. Towards this end, all nodes prove that they are voting
actively. In slot *s*+8 (and only in that slot), the corresponding leader can
post up to two vote aggregates (a notarization aggregate and/or skip aggregate)
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

dumb question: would the notarization aggregate include all notarization-fallback votes with the same block-id?

I assume a notarization with wrong block-id will be ignored?

Do we reward notarization with wrong block-id? What if someone cast skip and notar-fallback, but skip vote got lost, unfortunately notar-fallback is for wrong block-id?

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Only skip and notarization, no fallbacks. Everybody just gets one point at most.

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

These funny scenarios could arise on successful block equivocation by the leader. In the future, if we want to be nerdy about this possibility, we could do something to count multiple block-ids (or just issue the one-vote reward to everyone while we slash the equivocating leader lol).

for all votes it has seen for slot *s*. Aggregates are like certificates but
without a requirement to meet any minimum certificate thresholds. Alpenglow
ensures that each validator casts exactly one of the two relevant votes, while
casting both votes is a provable offence.

The rewards are computed as follows:

- Epoch inflation: E = (1+(yearly inflation))^((epoch length) / year)-1
- Inflation in SOL per slot: T = (total SOL supply) * E / (slots per epoch)
- Given validator’s stake: R = (validator’s stake) / (total stake)

For each submitted vote in the two aggregates, the voter receives *R*x*T*/2 SOL,
where *R* is the voter’s fractional stake and *T* is the total target issuance
per slot. The submitter (leader) gets the same amount of SOL as each of the
voters included in the aggregate. Nodes receiving 0 SOL at the end of the epoch
are removed from the active set of nodes. This scheme will practically eliminate
today’s voting transaction overhead while still rewarding voting.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

No reward for someone who voted both Notarization and Skip right?

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

If we had slashing, it would be slashable. That's even stronger than just not getting rewards. But since we don't have slashing, we might consider to punish it by not giving any rewards.


In addition, the leader is rewarded for including all original fast-finalization
(or notarization plus finalization) certificates for any slot on chain. The flat
reward for such a first certificate is 100k Lamports (because we expect the cost
of a BLS signature to be roughly 20x the 5k Lamports of a regular signature).


### Validator Admission Ticket (VAT)

While Alpenglow can in principle scale to large numbers of validators, to
simplify the implementation we want to limit the number of validators to at most
2,000. For example, we would like certificates to fit inside a single UDP
message. Because of this, Alpenglow enforces a strict limit and only admits the
2,000 highest staked validators. 2,000 is well above the numbers we see
currently, so we will likely not reach this limit in the near future.

Currently, validators must post their vote on the blockchain for every slot, and
they pay about 1 SOL per day in vote transaction fees. With Alpenglow, votes
will not go on chain. However, to maintain the present economic equilibrium,
initially we will reproduce the current set of incentives. For this reason, we
introduce a new validator admission ticket (VAT). Before being admitted to an
epoch, the VAT is deducted from each validator’s account. If the account is
insufficiently funded, the validator is removed from the active set. The VAT
will be 80% of the cost of today’s vote fees, in other words, initially about
0.8 SOL per day (or 1.6 SOL per epoch). In contrast to today, the whole VAT will
be burned to limit inflation. We leave proposals to make this mechanism adaptive
and more fitting to future SIMDs.


## Alternatives Considered

The following alternatives were considered:

- DAG-based Consensus
- Pros: In the common case, bandwidth use is lower by the factor of the data
expansion ratio.
- Cons: worse latency, difficult to fully use bandwidth, huge paradigm shift
- No Single-Round Finality
- Pros: simpler, 33% byzantine fault tolerance
- Cons: worse latency, bigger concentrated stake problem, only 33% crash
resilience


## Impact

The most visible change will be that optimistic confirmation is superseded by
faster (actual) finality.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

So the proposal is to make Confirmed the same as Finalized in Alpenglow?

https://docs.anza.xyz/consensus/commitments

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Optimistic Confirmation is a concept from TowerBFT, and Finality is a concept from Alpenglow. In this sentence we want to argue that the second is strictly better than the first (faster and actually final). Maybe we need to reformulate to make this clear?

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Okay that's fine. I just wasn't sure whether we are announcing an API change here.

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Should we write TowerBFT's Optimistic Confirmation and Alpenglow's (actual) finality to make it 100% clear, or do you think it's okay like this?

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think it's okay like this.


Validator operators should also see their resource usage (including bandwidth
usage and compute) drop after the migration to Alpenglow.


## Security Considerations

The white paper provides proofs for safety and liveness under byzantine faults.

When instantiated with SHA256 for hashing and BLS12-381 for aggregate
signatures, the desired security level of 128-bits is achieved.

Alpenglow features a distinctive 20+20 security model. While it does not have
the 33% byzantine security that can be achieved with two-round voting protocols,
we believe that the one-round voting and the 40% crash failure resilience is
worth the tradeoff.


## Drawbacks

The main drawback is the risk related to implementing a big protocol change.
Migrating to Alpenglow will be challenging.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

nit: should we mention Migration will be designed and proposed in following SIMD?

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'm not an expert, but I don't think migration should have a SIMD. At least I would not announce it here.

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Wouldn't the migration also require a specific implementation for any client that would want to be part of the network during the switchover? Seems like it would need a SIMD then to me?

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We would like to get a general consensus about Alpenglow, so that the engineers working on it know that it will come. The switching mechanism is not really a votable issue (as long as it's done in the best possible way). But of course we have to find an agreement between all the clients which will be involved in the switch. That could be covered by a separate (technical) SIMD if necessary.

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Anything that is a consensus-critical change should have a SIMD, even if it does not go through governance. The purpose of SIMDs is to communicate and agree upon breaking (consensus-critical) changes that are coming to different validator teams.



## Backwards Compatibility

Incompatible. Alpenglow completely replaces the old consensus protocol with all
its voting logic.


## Bibliography

1. *Kniep, Sliwinski, Wattenhofer*, **Solana Alpenglow Consensus: Increased
Bandwidth, Reduced Latency v1.1**, 2025,
[https://www.anza.xyz/alpenglow-1-1](https://www.anza.xyz/alpenglow-1-1)
Loading