Refactor: Add AccountKeys struct for static and dynamic message keys (#22960)

This commit is contained in:
Justin Starry
2022-02-05 20:00:31 +08:00
committed by GitHub
parent e05cf4bf97
commit ba215e94f6
26 changed files with 917 additions and 442 deletions

View File

@ -6262,7 +6262,7 @@ pub mod tests {
.map(|transaction| {
let mut pre_balances: Vec<u64> = vec![];
let mut post_balances: Vec<u64> = vec![];
for i in 0..transaction.message.total_account_keys_len() {
for i in 0..transaction.message.static_account_keys().len() {
pre_balances.push(i as u64 * 10);
post_balances.push(i as u64 * 11);
}
@ -7129,7 +7129,7 @@ pub mod tests {
.map(|transaction| {
let mut pre_balances: Vec<u64> = vec![];
let mut post_balances: Vec<u64> = vec![];
for i in 0..transaction.message.total_account_keys_len() {
for i in 0..transaction.message.static_account_keys().len() {
pre_balances.push(i as u64 * 10);
post_balances.push(i as u64 * 11);
}
@ -7231,7 +7231,7 @@ pub mod tests {
.map(|transaction| {
let mut pre_balances: Vec<u64> = vec![];
let mut post_balances: Vec<u64> = vec![];
for i in 0..transaction.message.total_account_keys_len() {
for i in 0..transaction.message.static_account_keys().len() {
pre_balances.push(i as u64 * 10);
post_balances.push(i as u64 * 11);
}
@ -7590,7 +7590,7 @@ pub mod tests {
.write_transaction_status(
slot,
transaction.signatures[0],
transaction.message.static_account_keys_iter().collect(),
transaction.message.static_account_keys().iter().collect(),
vec![],
TransactionStatusMeta::default(),
)
@ -7614,7 +7614,7 @@ pub mod tests {
.write_transaction_status(
slot,
transaction.signatures[0],
transaction.message.static_account_keys_iter().collect(),
transaction.message.static_account_keys().iter().collect(),
vec![],
TransactionStatusMeta::default(),
)

View File

@ -1,4 +1,4 @@
use {super::*, std::time::Instant};
use {super::*, solana_sdk::message::AccountKeys, std::time::Instant};
#[derive(Default)]
pub struct PurgeStats {
@ -334,16 +334,17 @@ impl Blockstore {
if let Some(&signature) = transaction.signatures.get(0) {
batch.delete::<cf::TransactionStatus>((0, signature, slot))?;
batch.delete::<cf::TransactionStatus>((1, signature, slot))?;
for pubkey in transaction.message.into_static_account_keys() {
batch.delete::<cf::AddressSignatures>((0, pubkey, slot, signature))?;
batch.delete::<cf::AddressSignatures>((1, pubkey, slot, signature))?;
}
let meta = self.read_transaction_status((signature, slot))?;
let loaded_addresses =
meta.map(|meta| meta.loaded_addresses).unwrap_or_default();
for address in loaded_addresses.into_ordered_iter() {
batch.delete::<cf::AddressSignatures>((0, address, slot, signature))?;
batch.delete::<cf::AddressSignatures>((1, address, slot, signature))?;
let loaded_addresses = meta.map(|meta| meta.loaded_addresses);
let account_keys = AccountKeys::new(
transaction.message.static_account_keys(),
loaded_addresses.as_ref(),
);
for pubkey in account_keys.iter() {
batch.delete::<cf::AddressSignatures>((0, *pubkey, slot, signature))?;
batch.delete::<cf::AddressSignatures>((1, *pubkey, slot, signature))?;
}
}
}