solana_sdk/
simple_vote_transaction_checker.rs

1#![cfg(feature = "full")]
2
3use crate::{message::VersionedMessage, transaction::SanitizedVersionedTransaction};
4
5/// Simple vote transaction meets these conditions:
6/// 1. has 1 or 2 signatures;
7/// 2. is legacy message;
8/// 3. has only one instruction;
9/// 4. which must be Vote instruction;
10pub fn is_simple_vote_transaction(
11    sanitized_versioned_transaction: &SanitizedVersionedTransaction,
12) -> bool {
13    let signatures_count = sanitized_versioned_transaction.signatures.len();
14    let is_legacy_message = matches!(
15        sanitized_versioned_transaction.message.message,
16        VersionedMessage::Legacy(_)
17    );
18    let mut instructions = sanitized_versioned_transaction
19        .message
20        .program_instructions_iter();
21    signatures_count < 3
22        && is_legacy_message
23        && instructions
24            .next()
25            .xor(instructions.next())
26            .map(|(program_id, _ix)| program_id == &solana_sdk::vote::program::id())
27            .unwrap_or(false)
28}