SIMD-0464
Vote Account Initialize V2
TL;DR
This proposal introduces the `InitializeAccountV2` instruction to the Vote program, which allows creating new vote accounts with all vote state v4 fields — including BLS public keys — at account creation time.
Summary
This proposal introduces the `InitializeAccountV2` instruction to the Vote program, which allows creating new vote accounts with all vote state v4 fields — including BLS public keys — at account creation time.
Motivation
The existing `InitializeAccount` instruction for the Vote program does not support setting all vote state v4 fields at creation time. After the activation of vote state v4 ([SIMD-0185]), users must create an account with `InitializeAccount` and then use multiple separate instructions to configure fields like commission rates, collector accounts, and BLS public keys. `InitializeAccountV2` provides a unified way to set all vote state v4 fields during account creation, streamlining the process for validators setting up new vote accounts.
Key Changes
- If the collector is not equal to the vote account, it must be system program owned. Otherwise return InstructionError::InvalidAccountOwner.
- The collector must be rent-exempt. Otherwise return InstructionError::InsufficientFunds.
- The collector must be writable (not a reserved account). Otherwise return InstructionError::InvalidArgument.
Impact
### Before feature gate in this SIMD is activated There is no change. Users continue to create vote accounts using the legacy `InitializeAccount` instruction, then set newer fields using their respective instructions (ie. `UpdateCommissionBps`). ### After the feature gate in this SIMD is activated New vote accounts can be created using `InitializeAccountV2`, which sets all vote state v4 fields at creation time including the BLS public key and proof of possession. The legacy `InitializeAccount` instruction remains available.
Security Considerations
BLS public key verification and proof of possession are specified in [SIMD-0387]. The same security considerations for BLS rogue-key attacks and replay attacks described there apply to `InitializeAccountV2`.