SIMD-0464

Vote Account Initialize V2

Author: Wen Xu (Anza), Joe Caulfield (Anza) · Category: Core Protocol GitHub →

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`.