2022-07-04 03:29:35 -07:00
|
|
|
use crate::{events::MangoAccountData, state::*};
|
|
|
|
use anchor_lang::prelude::*;
|
|
|
|
|
|
|
|
#[derive(Accounts)]
|
|
|
|
pub struct ComputeAccountData<'info> {
|
|
|
|
pub group: AccountLoader<'info, Group>,
|
|
|
|
|
|
|
|
#[account(
|
|
|
|
has_one = group,
|
|
|
|
)]
|
|
|
|
pub account: AccountLoader<'info, MangoAccount>,
|
|
|
|
}
|
|
|
|
|
|
|
|
pub fn compute_account_data(ctx: Context<ComputeAccountData>) -> Result<()> {
|
|
|
|
let group_pk = ctx.accounts.group.key();
|
|
|
|
let account = ctx.accounts.account.load()?;
|
|
|
|
|
|
|
|
let account_retriever = ScanningAccountRetriever::new(ctx.remaining_accounts, &group_pk)?;
|
|
|
|
|
2022-07-11 13:31:36 -07:00
|
|
|
let health_cache = new_health_cache(&account, &account_retriever)?;
|
|
|
|
let init_health = health_cache.health(HealthType::Init);
|
|
|
|
let maint_health = health_cache.health(HealthType::Maint);
|
2022-07-04 03:29:35 -07:00
|
|
|
|
|
|
|
let equity = compute_equity(&account, &account_retriever)?;
|
|
|
|
|
|
|
|
emit!(MangoAccountData {
|
2022-07-13 10:18:55 -07:00
|
|
|
health_cache,
|
2022-07-04 03:29:35 -07:00
|
|
|
init_health,
|
|
|
|
maint_health,
|
2022-07-13 10:18:55 -07:00
|
|
|
equity,
|
2022-07-04 03:29:35 -07:00
|
|
|
});
|
|
|
|
|
|
|
|
Ok(())
|
|
|
|
}
|