@@ -54,7 +54,6 @@ use evm_loader::{
5454 precompile_contracts:: is_precompile_address,
5555 solana_backend:: { AccountStorage , AccountStorageInfo } ,
5656 solidity_account:: SolidityAccount ,
57- config:: token_mint
5857} ;
5958
6059use crate :: Config ;
@@ -157,10 +156,11 @@ pub struct EmulatorAccountStorage<'a> {
157156 caller_id : H160 ,
158157 block_number : u64 ,
159158 block_timestamp : i64 ,
159+ token_mint : Pubkey
160160}
161161
162162impl < ' a > EmulatorAccountStorage < ' a > {
163- pub fn new ( config : & ' a Config , contract_id : H160 , caller_id : H160 ) -> EmulatorAccountStorage {
163+ pub fn new ( config : & ' a Config , contract_id : H160 , caller_id : H160 , token_mint : Pubkey ) -> EmulatorAccountStorage {
164164 eprintln ! ( "backend::new" ) ;
165165
166166 let slot = if let Ok ( slot) = config. rpc_client . get_slot ( ) {
@@ -192,6 +192,7 @@ impl<'a> EmulatorAccountStorage<'a> {
192192 caller_id,
193193 block_number : slot,
194194 block_timestamp : timestamp,
195+ token_mint
195196 }
196197 }
197198
@@ -244,8 +245,10 @@ impl<'a> EmulatorAccountStorage<'a> {
244245 true
245246 }
246247 else {
247- eprintln ! ( "Account not found {}" , & address. to_string( ) ) ;
248- new_accounts. insert ( * address, SolanaNewAccount :: new ( solana_address) ) ;
248+ if new_accounts. get ( address) . is_none ( ) {
249+ eprintln ! ( "Account not found {}" , & address. to_string( ) ) ;
250+ new_accounts. insert ( * address, SolanaNewAccount :: new ( solana_address) ) ;
251+ }
249252 false
250253 }
251254 } else {
@@ -399,19 +402,19 @@ impl<'a> EmulatorAccountStorage<'a> {
399402 } ;
400403 }
401404
402- pub fn apply_transfers ( & self , transfers : Vec < Transfer > ) {
405+ pub fn apply_transfers ( & self , transfers : Vec < Transfer > , token_mint : & Pubkey ) {
403406 let mut solana_accounts = self . solana_accounts . borrow_mut ( ) ;
404407
405408 for transfer in transfers {
406409 self . create_acc_if_not_exists ( & transfer. source ) ;
407410 self . create_acc_if_not_exists ( & transfer. target ) ;
408411
409412 let ( source, _) = make_solana_program_address ( & transfer. source , & self . config . evm_loader ) ;
410- let source_token = spl_associated_token_account:: get_associated_token_address ( & source, & token_mint:: id ( ) ) ;
413+ let source_token = spl_associated_token_account:: get_associated_token_address ( & source, token_mint) ;
411414 solana_accounts. insert ( source_token, AccountMeta :: new ( source_token, false ) ) ;
412415
413416 let ( target, _) = make_solana_program_address ( & transfer. target , & self . config . evm_loader ) ;
414- let target_token = spl_associated_token_account:: get_associated_token_address ( & target, & token_mint:: id ( ) ) ;
417+ let target_token = spl_associated_token_account:: get_associated_token_address ( & target, token_mint) ;
415418 solana_accounts. insert ( target_token, AccountMeta :: new ( target_token, false ) ) ;
416419 }
417420 }
@@ -610,7 +613,7 @@ impl<'a> AccountStorage for EmulatorAccountStorage<'a> {
610613 self . create_acc_if_not_exists ( address) ;
611614
612615 let ( account, _) = make_solana_program_address ( address, & self . config . evm_loader ) ;
613- let token_account = spl_associated_token_account:: get_associated_token_address ( & account, & token_mint:: id ( ) ) ;
616+ let token_account = spl_associated_token_account:: get_associated_token_address ( & account, & self . token_mint ) ;
614617
615618 let mut solana_accounts = self . solana_accounts . borrow_mut ( ) ;
616619 solana_accounts. entry ( token_account) . or_insert_with ( || AccountMeta :: new_readonly ( token_account, false ) ) ;
0 commit comments