diff --git a/crates/core/src/surfnet/locker.rs b/crates/core/src/surfnet/locker.rs index 9f79df5a..564c7c79 100644 --- a/crates/core/src/surfnet/locker.rs +++ b/crates/core/src/surfnet/locker.rs @@ -954,11 +954,11 @@ impl SurfnetSvmLocker { let token_programs = token_accounts_before .iter() - .map(|(i, _)| { + .map(|(i, ta)| { svm_reader .get_account(&transaction_accounts[*i]) - .unwrap() - .owner + .map(|a| a.owner) + .unwrap_or(ta.token_program_id()) }) .collect::>() .clone(); diff --git a/crates/core/src/types.rs b/crates/core/src/types.rs index fe9fc550..6c5cf02c 100644 --- a/crates/core/src/types.rs +++ b/crates/core/src/types.rs @@ -564,6 +564,13 @@ pub enum TokenAccount { } impl TokenAccount { + pub fn token_program_id(&self) -> Pubkey { + match self { + Self::SplToken2022(_) => spl_token_2022::id(), + Self::SplToken(_) => spl_token::id(), + } + } + pub fn unpack(bytes: &[u8]) -> SurfpoolResult { if let Ok(account) = spl_token_2022::state::Account::unpack(bytes) { Ok(Self::SplToken2022(account))