solana_transaction/
simple_vote_transaction_checker.rs1use {
2 crate::versioned::sanitized::SanitizedVersionedTransaction, solana_address::Address,
3 solana_message::VersionedMessage, solana_signature::Signature,
4};
5
6pub fn is_simple_vote_transaction(
12 sanitized_versioned_transaction: &SanitizedVersionedTransaction,
13) -> bool {
14 let is_legacy_message = matches!(
15 sanitized_versioned_transaction.message.message,
16 VersionedMessage::Legacy(_)
17 );
18 let instruction_programs = sanitized_versioned_transaction
19 .message
20 .program_instructions_iter()
21 .map(|(program_id, _ix)| program_id);
22
23 is_simple_vote_transaction_impl(
24 &sanitized_versioned_transaction.signatures,
25 is_legacy_message,
26 instruction_programs,
27 )
28}
29
30#[inline]
36pub fn is_simple_vote_transaction_impl<'a>(
37 signatures: &[Signature],
38 is_legacy_message: bool,
39 mut instruction_programs: impl Iterator<Item = &'a Address>,
40) -> bool {
41 signatures.len() < 3
42 && is_legacy_message
43 && instruction_programs
44 .next()
45 .xor(instruction_programs.next())
46 .map(|program_id| program_id == &solana_sdk_ids::vote::ID)
47 .unwrap_or(false)
48}