trident_svm/methods/
trident_svm_accounts.rs

1use solana_sysvar::Sysvar;
2use solana_sysvar_id::SysvarId;
3
4use solana_account::AccountSharedData;
5use solana_account::ReadableAccount;
6
7use solana_keypair::Keypair;
8use solana_pubkey::Pubkey;
9
10use crate::trident_svm::TridentSVM;
11
12impl TridentSVM {
13    pub fn get_account(&self, pubkey: &Pubkey) -> Option<AccountSharedData> {
14        self.accounts.get_account(pubkey, true)
15    }
16
17    pub fn set_account(&mut self, pubkey: &Pubkey, account: &AccountSharedData, permanent: bool) {
18        if permanent {
19            self.accounts.set_permanent_account(pubkey, account);
20        } else {
21            self.accounts.set_temporary_account(pubkey, account);
22        }
23    }
24
25    pub fn get_sysvar<T: Sysvar + SysvarId>(&self) -> T {
26        self.accounts.get_sysvar()
27    }
28
29    pub fn set_sysvar<T: Sysvar + SysvarId>(&mut self, sysvar: &T) {
30        self.accounts.set_sysvar(sysvar);
31    }
32    pub fn get_payer(&self) -> Keypair {
33        self.payer.insecure_clone()
34    }
35    pub(crate) fn settle_accounts(&mut self, accounts: &[(Pubkey, AccountSharedData)]) {
36        for account in accounts {
37            if !account.1.executable() && account.1.owner() != &solana_sdk_ids::sysvar::id() {
38                // Update permanent account if it should be updated
39                if self.accounts.get_permanent_account(&account.0).is_some() {
40                    self.accounts.set_permanent_account(&account.0, &account.1);
41                } else {
42                    // Otherwise, add it to the temp accounts
43                    self.accounts.set_temporary_account(&account.0, &account.1);
44                }
45            }
46        }
47    }
48}