SIMD-0185

Vote Account v4

Author: Justin Starry (Anza) · Category: Core Protocol GitHub →

Feature Gate Status

Mainnet Inactive
Testnet Active E897
Devnet Active E1033

Gx4XFcrVMt4HUvPzTpTSVkdDVgcDSjKhDN1RqRS6KDuZ

Min Agave: v3.1.0 · Firedancer: v0.811.30108 · Jito: v3.1.0

TL;DR

Add a new version of vote account state to support alpenglow, block revenue distribution, and commission improvements.

Summary

Add a new version of vote account state to support alpenglow, block revenue distribution, and commission improvements.

Motivation

A new update for the vote program is proposed to improve authorized voter bookkeeping as well as initialize state fields that will allow validators to set commission rates and collector accounts for different revenue sources in the future. ### Authorized voter bookkeeping - Over 40% of vote state size is reserved for tracking a history of 32 prior authorized voters for the vote account in the `prior_voters` field. Having such a long history of prior voters is not useful, tracking the most recent previous epoch's voter is sufficient for features like slashing and authorized voter migration and can be stored in the `authorized_voters` field instead. - The `authorized_voters` field doesn't store the voter for the previous epoch so it's impossible to have a transition epoch where both the previous and newly assigned voter can both sign votes. ### Revenue Collection Customization - There is only one commission rate stored in vote account state but validators want to be able to use different commission rates for different income streams like block revenue. - It's not possible to customize which accounts income is collected into. Currently all block fee revenue is collected into the validator identity account which cannot be a cold wallet since the identity needs to sign a lot of messages for various network protocols used in Solana like turbine, gossip, and QUIC.

Key Changes

  • Block Revenue Commission: The commission rate that determines how much of
  • Inflation Rewards Commission: The commission rate that determines how much of
  • Block Revenue Commission Collector: The account used to collect commissioned
  • Inflation Rewards Commission Collector: The account used to collect
  • Deserialize versioned vote state
  • Check for initialization or return InstructionError::UninitializedAccount
  • Convert to v4 with the following default values for the new fields:

Impact

This is a prerequisite for implementing other SIMD's like block revenue distribution in [SIMD-0123] which give validators more flexibility in how inflation rewards and block revenue is collected and distributed. [SIMD-0123]: https://github.com/solana-foundation/solana-improvement-documents/pull/123

Backwards Compatibility

*(Optional)* Existing programs that read vote state will need to be updated to support the latest account state version.

Security Considerations

NA