Move methods to get num signatures and locks to SanitizedMessage (#32489)

This commit is contained in:
Pankaj Garg 2023-07-14 10:59:55 -07:00 committed by GitHub
parent 55369ae37a
commit eb74562124
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 30 additions and 26 deletions

View File

@ -126,7 +126,6 @@ use {
MAX_TRANSACTION_FORWARDING_DELAY, MAX_TRANSACTION_FORWARDING_DELAY_GPU,
SECONDS_PER_DAY,
},
ed25519_program,
epoch_info::EpochInfo,
epoch_schedule::EpochSchedule,
feature,
@ -154,7 +153,7 @@ use {
packet::PACKET_DATA_SIZE,
precompiles::get_precompiles,
pubkey::Pubkey,
saturating_add_assign, secp256k1_program,
saturating_add_assign,
signature::{Keypair, Signature},
slot_hashes::SlotHashes,
slot_history::{Check, SlotHistory},
@ -5552,27 +5551,6 @@ impl Bank {
self.update_accounts_data_size_delta_off_chain(amount)
}
fn get_num_signatures_in_message(message: &SanitizedMessage) -> u64 {
let mut num_signatures = u64::from(message.header().num_required_signatures);
// This next part is really calculating the number of pre-processor
// operations being done and treating them like a signature
for (program_id, instruction) in message.program_instructions_iter() {
if secp256k1_program::check_id(program_id) || ed25519_program::check_id(program_id) {
if let Some(num_verifies) = instruction.data.first() {
num_signatures = num_signatures.saturating_add(u64::from(*num_verifies));
}
}
}
num_signatures
}
fn get_num_write_locks_in_message(message: &SanitizedMessage) -> u64 {
message
.account_keys()
.len()
.saturating_sub(message.num_readonly_accounts()) as u64
}
/// Calculate fee for `SanitizedMessage`
pub fn calculate_fee(
message: &SanitizedMessage,
@ -5607,9 +5585,11 @@ impl Bank {
)
.unwrap_or_default();
let prioritization_fee = prioritization_fee_details.get_fee();
let signature_fee = Self::get_num_signatures_in_message(message)
let signature_fee = message
.num_signatures()
.saturating_mul(fee_structure.lamports_per_signature);
let write_lock_fee = Self::get_num_write_locks_in_message(message)
let write_lock_fee = message
.num_write_locks()
.saturating_mul(fee_structure.lamports_per_write_lock);
// `compute_fee` covers costs for both requested_compute_units and

View File

@ -2,7 +2,9 @@
mod tests {
use {
crate::bank::*,
solana_sdk::{feature_set::FeatureSet, genesis_config::create_genesis_config},
solana_sdk::{
ed25519_program, feature_set::FeatureSet, genesis_config::create_genesis_config,
},
};
#[test]

View File

@ -1,5 +1,6 @@
use {
crate::{
ed25519_program,
hash::Hash,
instruction::CompiledInstruction,
message::{
@ -12,6 +13,7 @@ use {
program_utils::limited_deserialize,
pubkey::Pubkey,
sanitize::{Sanitize, SanitizeError},
secp256k1_program,
solana_program::{system_instruction::SystemInstruction, system_program},
sysvar::instructions::{BorrowedAccountMeta, BorrowedInstruction},
},
@ -343,6 +345,26 @@ impl SanitizedMessage {
})
})
}
pub fn num_signatures(&self) -> u64 {
let mut num_signatures = u64::from(self.header().num_required_signatures);
// This next part is really calculating the number of pre-processor
// operations being done and treating them like a signature
for (program_id, instruction) in self.program_instructions_iter() {
if secp256k1_program::check_id(program_id) || ed25519_program::check_id(program_id) {
if let Some(num_verifies) = instruction.data.first() {
num_signatures = num_signatures.saturating_add(u64::from(*num_verifies));
}
}
}
num_signatures
}
pub fn num_write_locks(&self) -> u64 {
self.account_keys()
.len()
.saturating_sub(self.num_readonly_accounts()) as u64
}
}
#[cfg(test)]