diff --git a/programs/mango-v4/src/state/health.rs b/programs/mango-v4/src/state/health.rs index 5c063f436..3d8c524ff 100644 --- a/programs/mango-v4/src/state/health.rs +++ b/programs/mango-v4/src/state/health.rs @@ -8,22 +8,23 @@ use crate::util; use crate::util::checked_math as cm; pub fn compute_health(account: &MangoAccount, ais: &[AccountInfo]) -> Result { - let active_len = account.token_account_map.iter_active().count(); - require!( - ais.len() == active_len * 2, // banks + oracles - MangoError::SomeError - ); + let active_token_len = account.token_account_map.iter_active().count(); + let active_serum_len = account.serum_account_map.iter_active().count(); + let expected_ais = active_token_len * 2 // banks + oracles + + active_serum_len; // open_orders + require!(ais.len() == expected_ais, MangoError::SomeError); + let banks = &ais[0..active_token_len]; + let oracles = &ais[active_token_len..active_token_len * 2]; + let serum_oos = &ais[active_token_len * 2..]; - let banks = &ais[0..active_len]; - let oracles = &ais[active_len..active_len * 2]; - - compute_health_detail(account, banks, oracles) + compute_health_detail(account, banks, oracles, serum_oos) } fn compute_health_detail( account: &MangoAccount, banks: &[AccountInfo], oracles: &[AccountInfo], + _serum_oos: &[AccountInfo], ) -> Result { let mut assets = I80F48::ZERO; let mut liabilities = I80F48::ZERO; // absolute value diff --git a/programs/mango-v4/tests/program_test/mango_client.rs b/programs/mango-v4/tests/program_test/mango_client.rs index 119b36910..ab89ea1b3 100644 --- a/programs/mango-v4/tests/program_test/mango_client.rs +++ b/programs/mango-v4/tests/program_test/mango_client.rs @@ -136,6 +136,11 @@ async fn derive_health_check_remaining_account_metas( } } + let serum_oos = account + .serum_account_map + .iter_active() + .map(|&s| s.open_orders); + banks .iter() .map(|&pubkey| AccountMeta { @@ -148,6 +153,11 @@ async fn derive_health_check_remaining_account_metas( is_writable: false, is_signer: false, })) + .chain(serum_oos.map(|pubkey| AccountMeta { + pubkey, + is_writable: false, + is_signer: false, + })) .collect() }