solana_central/meteora/
update_meteora_vaultinfo.rs1use crate::CentralContext;
2use crate::types::meteora_vault::MeteoraVault;
3use borsh::BorshDeserialize;
4use solana_sdk::account::ReadableAccount;
5use std::sync::Arc;
6use crate::protocol_idls::meteora::{VaultIdlBig, VaultIdlSmall};
7
8impl MeteoraVault {
9 pub fn update_vault_info(&mut self, central_context: Arc<CentralContext>) {
15 let vault_address = self.vault;
16 let binding = central_context
17 .json_rpc_client
18 .get_account(&vault_address)
19 .unwrap();
20 let vault_data = binding.data();
21
22 if vault_data.len() == 10240 {
24 let decoded = VaultIdlBig::try_from_slice(&vault_data).unwrap();
25
26 self.last_updated_locked_profit = decoded.locked_profit_tracker.last_updated_locked_profit;
27 self.last_report = decoded.locked_profit_tracker.last_report;
28 self.locked_profit_degradation = decoded.locked_profit_tracker.locked_profit_degradation;
29 self.total_amount = decoded.total_amount;
30 self.lp_token_address = decoded.lp_mint;
35 self.lp_supply = central_context
36 .json_rpc_client
37 .get_token_supply(&decoded.lp_mint)
38 .unwrap()
39 .amount
40 .parse()
41 .unwrap();
42 } else if vault_data.len() == 1232 {
43 let decoded = VaultIdlSmall::try_from_slice(&vault_data).unwrap();
44
45 self.last_updated_locked_profit = decoded.locked_profit_tracker.last_updated_locked_profit;
46 self.last_report = decoded.locked_profit_tracker.last_report;
47 self.locked_profit_degradation = decoded.locked_profit_tracker.locked_profit_degradation;
48 self.total_amount = decoded.total_amount;
49 self.lp_token_address = decoded.lp_mint;
54 self.lp_supply = central_context
55 .json_rpc_client
56 .get_token_supply(&decoded.lp_mint)
57 .unwrap()
58 .amount
59 .parse()
60 .unwrap();
61 } else {
62 println!(
63 "update_meteora_vaultinfo: Unknown vault data length for vault: {:?}",
64 vault_address
65 );
66 }
67 }
68}