solana_central/meteora/
get_meteora_ammpool_from_accountinfo.rs1use crate::CentralContext;
2use crate::meteora::get_meteora_vault_from_token_address::get_meteora_vault_from_token_address;
3use crate::protocol_idls::meteora::MeteoraAmmPoolIdl;
4use crate::types::meteora_amm_pool::MeteoraAmmPool;
5use crate::types::pool::Pool;
6use crate::types::pools::Pools;
7use borsh::BorshDeserialize;
8use solana_sdk::pubkey::Pubkey;
9use std::sync::Arc;
10
11impl MeteoraAmmPool {
12 pub fn from_account_info(
18 pubkey: Pubkey,
19 account_buffer: &Vec<u8>,
20 central_context: Arc<CentralContext>,
21 ) -> Self {
22 let decoded_layout: MeteoraAmmPoolIdl =
23 MeteoraAmmPoolIdl::try_from_slice(account_buffer).unwrap();
24 let token_a_address: Pubkey = decoded_layout.token_a_mint;
25 let token_b_address: Pubkey = decoded_layout.token_b_mint;
26 let token_a_vault =
27 get_meteora_vault_from_token_address(&token_a_address, central_context.clone());
28 let token_b_vault =
29 get_meteora_vault_from_token_address(&token_b_address, central_context.clone());
30 let token_a_vault_address = token_a_vault.read().unwrap().vault;
31 let token_b_vault_address = token_b_vault.read().unwrap().vault;
32
33 Self {
34 info: Pool {
35 pool_address: pubkey,
36 token_a_address,
37 token_b_address,
38 pool_type: Pools::MeteoraAmm,
39 token_a_vault_address,
40 token_b_vault_address,
41 },
42 enabled: decoded_layout.enabled,
43 token_a_vault,
44 token_b_vault,
45 token_a_fee_address: decoded_layout.protocol_token_a_fee,
46 token_b_fee_address: decoded_layout.protocol_token_b_fee,
47 token_a_lp_vault_address: decoded_layout.a_vault_lp,
48 token_b_lp_vault_address: decoded_layout.b_vault_lp,
49 trade_fee_numerator: decoded_layout.fees.trade_fee_numerator as u128,
50 trade_fee_denominator: decoded_layout.fees.trade_fee_denominator as u128,
51 protocol_trade_fee_numerator: decoded_layout.fees.protocol_trade_fee_numerator as u128,
52 protocol_trade_fee_denominator: decoded_layout.fees.protocol_trade_fee_denominator as u128,
53
54 token_a_lp_amount: 0,
59 token_b_lp_amount: 0,
60 }
61 }
62}