Extended interface for AccountOverrides (#25964)

* Extended interface for AccountOverrides

* fix checker issue

* make accounts private

Co-authored-by: Ivan Loboda <lobodatell@yandex.ru>
This commit is contained in:
ivandzen 2022-06-22 22:22:31 +03:00 committed by GitHub
parent 25dc0992ae
commit 1ea6a2cb91
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 14 additions and 8 deletions

View File

@ -1,25 +1,31 @@
use solana_sdk::{account::AccountSharedData, pubkey::Pubkey, sysvar};
use {
solana_sdk::{account::AccountSharedData, pubkey::Pubkey, sysvar},
std::collections::HashMap,
};
/// Encapsulates overridden accounts, typically used for transaction simulations
#[derive(Default)]
pub struct AccountOverrides {
pub slot_history: Option<AccountSharedData>,
accounts: HashMap<Pubkey, AccountSharedData>,
}
impl AccountOverrides {
pub fn set_account(&mut self, pubkey: &Pubkey, account: Option<AccountSharedData>) {
match account {
Some(account) => self.accounts.insert(*pubkey, account),
None => self.accounts.remove(pubkey),
};
}
/// Sets in the slot history
///
/// Note: no checks are performed on the correctness of the contained data
pub fn set_slot_history(&mut self, slot_history: Option<AccountSharedData>) {
self.slot_history = slot_history;
self.set_account(&sysvar::slot_history::id(), slot_history);
}
/// Gets the account if it's found in the list of overrides
pub fn get(&self, pubkey: &Pubkey) -> Option<&AccountSharedData> {
if pubkey == &sysvar::slot_history::id() {
self.slot_history.as_ref()
} else {
None
}
self.accounts.get(pubkey)
}
}