Move methods to get num signatures and locks to SanitizedMessage (#32489)
This commit is contained in:
parent
55369ae37a
commit
eb74562124
|
@ -126,7 +126,6 @@ use {
|
||||||
MAX_TRANSACTION_FORWARDING_DELAY, MAX_TRANSACTION_FORWARDING_DELAY_GPU,
|
MAX_TRANSACTION_FORWARDING_DELAY, MAX_TRANSACTION_FORWARDING_DELAY_GPU,
|
||||||
SECONDS_PER_DAY,
|
SECONDS_PER_DAY,
|
||||||
},
|
},
|
||||||
ed25519_program,
|
|
||||||
epoch_info::EpochInfo,
|
epoch_info::EpochInfo,
|
||||||
epoch_schedule::EpochSchedule,
|
epoch_schedule::EpochSchedule,
|
||||||
feature,
|
feature,
|
||||||
|
@ -154,7 +153,7 @@ use {
|
||||||
packet::PACKET_DATA_SIZE,
|
packet::PACKET_DATA_SIZE,
|
||||||
precompiles::get_precompiles,
|
precompiles::get_precompiles,
|
||||||
pubkey::Pubkey,
|
pubkey::Pubkey,
|
||||||
saturating_add_assign, secp256k1_program,
|
saturating_add_assign,
|
||||||
signature::{Keypair, Signature},
|
signature::{Keypair, Signature},
|
||||||
slot_hashes::SlotHashes,
|
slot_hashes::SlotHashes,
|
||||||
slot_history::{Check, SlotHistory},
|
slot_history::{Check, SlotHistory},
|
||||||
|
@ -5552,27 +5551,6 @@ impl Bank {
|
||||||
self.update_accounts_data_size_delta_off_chain(amount)
|
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`
|
/// Calculate fee for `SanitizedMessage`
|
||||||
pub fn calculate_fee(
|
pub fn calculate_fee(
|
||||||
message: &SanitizedMessage,
|
message: &SanitizedMessage,
|
||||||
|
@ -5607,9 +5585,11 @@ impl Bank {
|
||||||
)
|
)
|
||||||
.unwrap_or_default();
|
.unwrap_or_default();
|
||||||
let prioritization_fee = prioritization_fee_details.get_fee();
|
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);
|
.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);
|
.saturating_mul(fee_structure.lamports_per_write_lock);
|
||||||
|
|
||||||
// `compute_fee` covers costs for both requested_compute_units and
|
// `compute_fee` covers costs for both requested_compute_units and
|
||||||
|
|
|
@ -2,7 +2,9 @@
|
||||||
mod tests {
|
mod tests {
|
||||||
use {
|
use {
|
||||||
crate::bank::*,
|
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]
|
#[test]
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
use {
|
use {
|
||||||
crate::{
|
crate::{
|
||||||
|
ed25519_program,
|
||||||
hash::Hash,
|
hash::Hash,
|
||||||
instruction::CompiledInstruction,
|
instruction::CompiledInstruction,
|
||||||
message::{
|
message::{
|
||||||
|
@ -12,6 +13,7 @@ use {
|
||||||
program_utils::limited_deserialize,
|
program_utils::limited_deserialize,
|
||||||
pubkey::Pubkey,
|
pubkey::Pubkey,
|
||||||
sanitize::{Sanitize, SanitizeError},
|
sanitize::{Sanitize, SanitizeError},
|
||||||
|
secp256k1_program,
|
||||||
solana_program::{system_instruction::SystemInstruction, system_program},
|
solana_program::{system_instruction::SystemInstruction, system_program},
|
||||||
sysvar::instructions::{BorrowedAccountMeta, BorrowedInstruction},
|
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)]
|
#[cfg(test)]
|
||||||
|
|
Loading…
Reference in New Issue