client: fix mango account reading

This commit is contained in:
Christian Kamm 2022-08-01 19:08:59 +02:00
parent 157b322635
commit 16290e07f4
2 changed files with 18 additions and 6 deletions

View File

@ -2,8 +2,10 @@ use std::sync::{Arc, RwLock};
use crate::chain_data::*;
use anchor_lang::Discriminator;
use mango_v4::accounts_zerocopy::LoadZeroCopy;
use mango_v4::state::MangoAccountValue;
use mango_v4::state::{MangoAccount, MangoAccountValue};
use anyhow::Context;
@ -31,7 +33,14 @@ impl AccountFetcher {
pub fn fetch_mango_account(&self, address: &Pubkey) -> anyhow::Result<MangoAccountValue> {
let acc = self.fetch_raw(address)?;
Ok(MangoAccountValue::from_bytes(acc.data())
let data = acc.data();
let disc_bytes = &data[0..8];
if disc_bytes != &MangoAccount::discriminator() {
anyhow::bail!("not a mango account at {}", address);
}
Ok(MangoAccountValue::from_bytes(&data[8..])
.with_context(|| format!("loading mango account {}", address))?)
}

View File

@ -21,11 +21,14 @@ pub fn is_mango_account<'a>(
return None;
}
let mango_account = MangoAccountRefWithHeader::from_bytes(&data[8..]).expect("always ok");
if mango_account.fixed.group != *group_id {
return None;
if let Ok(mango_account) = MangoAccountRefWithHeader::from_bytes(&data[8..]) {
if mango_account.fixed.group != *group_id {
return None;
}
Some(mango_account)
} else {
None
}
Some(mango_account)
}
pub fn is_mango_bank<'a>(