49 lines
1.3 KiB
Rust
49 lines
1.3 KiB
Rust
use {
|
|
solana_sdk::{
|
|
account::{AccountSharedData, ReadableAccount},
|
|
feature_set::FeatureSet,
|
|
hash::Hash,
|
|
pubkey::Pubkey,
|
|
rent_collector::RentCollector,
|
|
},
|
|
solana_svm::transaction_processor::TransactionProcessingCallback,
|
|
std::{collections::HashMap, sync::Arc},
|
|
};
|
|
|
|
#[derive(Default)]
|
|
pub struct MockBankCallback {
|
|
rent_collector: RentCollector,
|
|
feature_set: Arc<FeatureSet>,
|
|
pub account_shared_data: HashMap<Pubkey, AccountSharedData>,
|
|
}
|
|
|
|
impl TransactionProcessingCallback for MockBankCallback {
|
|
fn account_matches_owners(&self, account: &Pubkey, owners: &[Pubkey]) -> Option<usize> {
|
|
if let Some(data) = self.account_shared_data.get(account) {
|
|
if data.lamports() == 0 {
|
|
None
|
|
} else {
|
|
owners.iter().position(|entry| data.owner() == entry)
|
|
}
|
|
} else {
|
|
None
|
|
}
|
|
}
|
|
|
|
fn get_account_shared_data(&self, pubkey: &Pubkey) -> Option<AccountSharedData> {
|
|
self.account_shared_data.get(pubkey).cloned()
|
|
}
|
|
|
|
fn get_last_blockhash_and_lamports_per_signature(&self) -> (Hash, u64) {
|
|
todo!()
|
|
}
|
|
|
|
fn get_rent_collector(&self) -> &RentCollector {
|
|
&self.rent_collector
|
|
}
|
|
|
|
fn get_feature_set(&self) -> Arc<FeatureSet> {
|
|
self.feature_set.clone()
|
|
}
|
|
}
|