Skip to content

SIMD 0301: Remove BankHash From Votes #301

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 6 commits into
base: main
Choose a base branch
from
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
97 changes: 97 additions & 0 deletions proposals/0301-remove-bank-hash-from-votes.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,97 @@
---
simd: "0301"
title: Remove BankHash from Votes
authors:
- Max Resnick (Anza)
category: Standard
type: Core
status: Draft
created: 2025-06-10
feature: (fill in with feature key and github tracking issues once accepted)
supersedes: (optional - fill this in if the SIMD supersedes a previous SIMD)
superseded-by:
(optional - fill this in if the SIMD is superseded by a subsequent SIMD)
extends:
(optional - fill this in if the SIMD extends the design of a previous SIMD)
---

## Summary

This proposal would remove BankHash from votes on Solana to allow voting before
replay is complete. If all the prerequisites are satisfied before Alpenglow is
ready to rollout then it can be activated with Alpenglow. Otherwise it must be a
feature flag.

This is a very long line of text that should be wrapped by Prettier at eighty
characters if proseWrap is set to always and printWidth is set to eighty.

## Motivation

Currently, votes include the BankHash, which ties votes to a fully executed bank
state. Removing BankHash from votes allows validators to vote before execution
completes. This is also called Asynchronous Execution.

The synchronous confirmation flow after Alpenglow looks like this:

```text
| ----- leader broadcasts the block through rotor -------|
|------------------ validator recieves block ------------| |-- validator broadcasts votes--| <- certificate is formed

Check failure on line 38 in proposals/0301-remove-bank-hash-from-votes.md

View workflow job for this annotation

GitHub Actions / Markdown Linter

Line length [Expected: 80; Actual: 132]

proposals/0301-remove-bank-hash-from-votes.md:38:81 MD013/line-length Line length [Expected: 80; Actual: 132]

Check failure on line 38 in proposals/0301-remove-bank-hash-from-votes.md

View workflow job for this annotation

GitHub Actions / Markdown Linter

Line length [Expected: 80; Actual: 132]

proposals/0301-remove-bank-hash-from-votes.md:38:81 MD013/line-length Line length [Expected: 80; Actual: 132]

Check failure on line 38 in proposals/0301-remove-bank-hash-from-votes.md

View workflow job for this annotation

GitHub Actions / Markdown Linter

Line length [Expected: 80; Actual: 132]

proposals/0301-remove-bank-hash-from-votes.md:38:81 MD013/line-length Line length [Expected: 80; Actual: 132]

Check failure on line 38 in proposals/0301-remove-bank-hash-from-votes.md

View workflow job for this annotation

GitHub Actions / Markdown Linter

Line length [Expected: 80; Actual: 132]

proposals/0301-remove-bank-hash-from-votes.md:38:81 MD013/line-length Line length [Expected: 80; Actual: 132]
|--------------- validator executes block -----------------|
```

After this feature flag activates validators will be able to vote before they
finish executing the block:

```text
| ----- leader broadcasts the block through rotor -------|
|------------------ validator recieves block ------------||-- validator broadcasts votes--| <- certificate is formed

Check failure on line 47 in proposals/0301-remove-bank-hash-from-votes.md

View workflow job for this annotation

GitHub Actions / Markdown Linter

Line length [Expected: 80; Actual: 125]

proposals/0301-remove-bank-hash-from-votes.md:47:81 MD013/line-length Line length [Expected: 80; Actual: 125]

Check failure on line 47 in proposals/0301-remove-bank-hash-from-votes.md

View workflow job for this annotation

GitHub Actions / Markdown Linter

Line length [Expected: 80; Actual: 125]

proposals/0301-remove-bank-hash-from-votes.md:47:81 MD013/line-length Line length [Expected: 80; Actual: 125]

Check failure on line 47 in proposals/0301-remove-bank-hash-from-votes.md

View workflow job for this annotation

GitHub Actions / Markdown Linter

Line length [Expected: 80; Actual: 125]

proposals/0301-remove-bank-hash-from-votes.md:47:81 MD013/line-length Line length [Expected: 80; Actual: 125]

Check failure on line 47 in proposals/0301-remove-bank-hash-from-votes.md

View workflow job for this annotation

GitHub Actions / Markdown Linter

Line length [Expected: 80; Actual: 125]

proposals/0301-remove-bank-hash-from-votes.md:47:81 MD013/line-length Line length [Expected: 80; Actual: 125]
|--------------- validator executes block -----------------|
```

## Detailed Design

This proposal contains a single change:

1. Remove BankHash from votes. Validators will no longer include the BankHash in
their vote messages.

## Dependencies

| SIMD Number | Description | Status |

Check failure on line 60 in proposals/0301-remove-bank-hash-from-votes.md

View workflow job for this annotation

GitHub Actions / Markdown Linter

Line length [Expected: 80; Actual: 149]

proposals/0301-remove-bank-hash-from-votes.md:60:81 MD013/line-length Line length [Expected: 80; Actual: 149]

Check failure on line 60 in proposals/0301-remove-bank-hash-from-votes.md

View workflow job for this annotation

GitHub Actions / Markdown Linter

Line length [Expected: 80; Actual: 149]

proposals/0301-remove-bank-hash-from-votes.md:60:81 MD013/line-length Line length [Expected: 80; Actual: 149]

Check failure on line 60 in proposals/0301-remove-bank-hash-from-votes.md

View workflow job for this annotation

GitHub Actions / Markdown Linter

Line length [Expected: 80; Actual: 149]

proposals/0301-remove-bank-hash-from-votes.md:60:81 MD013/line-length Line length [Expected: 80; Actual: 149]

Check failure on line 60 in proposals/0301-remove-bank-hash-from-votes.md

View workflow job for this annotation

GitHub Actions / Markdown Linter

Line length [Expected: 80; Actual: 149]

proposals/0301-remove-bank-hash-from-votes.md:60:81 MD013/line-length Line length [Expected: 80; Actual: 149]
| --------------------------------------------------------------------------------------- | ------------------------------------------- | --------- |

Check failure on line 61 in proposals/0301-remove-bank-hash-from-votes.md

View workflow job for this annotation

GitHub Actions / Markdown Linter

Line length [Expected: 80; Actual: 149]

proposals/0301-remove-bank-hash-from-votes.md:61:81 MD013/line-length Line length [Expected: 80; Actual: 149]

Check failure on line 61 in proposals/0301-remove-bank-hash-from-votes.md

View workflow job for this annotation

GitHub Actions / Markdown Linter

Line length [Expected: 80; Actual: 149]

proposals/0301-remove-bank-hash-from-votes.md:61:81 MD013/line-length Line length [Expected: 80; Actual: 149]

Check failure on line 61 in proposals/0301-remove-bank-hash-from-votes.md

View workflow job for this annotation

GitHub Actions / Markdown Linter

Line length [Expected: 80; Actual: 149]

proposals/0301-remove-bank-hash-from-votes.md:61:81 MD013/line-length Line length [Expected: 80; Actual: 149]

Check failure on line 61 in proposals/0301-remove-bank-hash-from-votes.md

View workflow job for this annotation

GitHub Actions / Markdown Linter

Line length [Expected: 80; Actual: 149]

proposals/0301-remove-bank-hash-from-votes.md:61:81 MD013/line-length Line length [Expected: 80; Actual: 149]
| [SIMD-0159](https://github.com/solana-foundation/solana-improvement-documents/pull/159) | Pre-compile Instruction Verification | Activated |
| [SIMD-0191](https://github.com/solana-foundation/solana-improvement-documents/pull/191) | Loaded Data Size and Program Account Checks | Activated |
| [SIMD-0192](https://github.com/solana-foundation/solana-improvement-documents/pull/192) | Address Lookup Table Relaxation | Review |
| [SIMD-0290](https://github.com/solana-foundation/solana-improvement-documents/pull/290) | Fee-payer Account Relaxation | Review |
| [SIMD-0295](https://github.com/solana-foundation/solana-improvement-documents/pull/295) | Relax CU limit overage | Review |
| [SIMD-0297](https://github.com/solana-foundation/solana-improvement-documents/pull/297) | Durable Nonce Relaxation | Review |
| [SIMD-0298](https://github.com/solana-foundation/solana-improvement-documents/pull/298) | Add BankHash to Block Header | Review |

## Impact

This change is not expected to have any direct impact on app developers. It is a
consensus-breaking change and will require all validators to update their
software to the new vote structure. Validators running older versions will be
unable to participate in consensus once the feature flag is activated.

## Security Considerations

Removing BankHash from votes does not introduce new security risks by itself
when coupled with SIMD-0298 which adds the BankHash of the parent to each block,
because the BankHash is still part of consensus.

## Drawbacks

## Backwards Compatibility

Either the prerequisites are all satisfied by the time Alpenglow is ready, in
which case we can just launch alpenglow votes without the BankHash in them, or
we will need a feature flag.

This proposal requires a breaking change to the vote structure. All validators
must implement the new vote format. The change will be gated behind a feature
flag and activated in a coordinated manner. Validators running older versions
will be unable to participate in consensus once the feature flag is activated.

This is a very long line of text that should be wrapped by Prettier at eighty
characters if proseWrap is set to always and printWidth is set to eighty.
Loading