solana_central/raydium/
get_raydium_cpmm_pool_from_accountinfo.rs1use crate::protocol_idls::raydium::CpmmPoolInfoIdl;
2use crate::raydium::get_cpmm_fee_amount_from_config_account::get_cpmm_fee_amount_from_config_account;
3use crate::types::pool::Pool;
4use crate::types::pools::Pools;
5use crate::types::raydium_cpmm_pool::RaydiumCpmmPool;
6use borsh::BorshDeserialize;
7use solana_sdk::pubkey::Pubkey;
8
9impl RaydiumCpmmPool {
10 pub fn from_account_info(pubkey: Pubkey, account_buffer: &[u8]) -> Self {
14 let decoded_layout: CpmmPoolInfoIdl = CpmmPoolInfoIdl::try_from_slice(account_buffer).unwrap();
15 let fee_fraction_lp = get_cpmm_fee_amount_from_config_account(decoded_layout.amm_config, &pubkey);
16 Self {
17 info: Pool {
18 pool_address: pubkey,
19 token_a_address: decoded_layout.token_0_mint,
20 token_b_address: decoded_layout.token_1_mint,
21 pool_type: Pools::RaydiumCpmm,
22 token_a_vault_address: decoded_layout.token_0_vault,
23 token_b_vault_address: decoded_layout.token_1_vault,
24 },
25 pool_config_account: decoded_layout.amm_config,
26 observation_state_account: decoded_layout.observation_key,
27 token_a_vault_amount: 0,
29 token_b_vault_amount: 0,
30 protocol_fees_token_a: decoded_layout.protocol_fees_token_0,
32 protocol_fees_token_b: decoded_layout.protocol_fees_token_1,
33 fund_fees_token_a: decoded_layout.fund_fees_token_0,
34 fund_fees_token_b: decoded_layout.fund_fees_token_1,
35 creator_fees_token_a: decoded_layout.creator_fees_token_0,
36 creator_fees_token_b: decoded_layout.creator_fees_token_1,
37 fee_fraction_lp,
38 }
39 }
40}