solana_central/pumpswap/
get_pumpswap_pool_from_accountinfo.rs1use crate::constants::PUMP_CONSTANTS;
2use crate::constants::PUMP_SWAP_FEE_VAULTS;
3use crate::protocol_idls::pumpswap::PumpAmmPoolAccount;
4use crate::types::pool::Pool;
5use crate::types::pools::Pools;
6use crate::types::pumpswap_pool::PumpswapPool;
7use borsh::BorshDeserialize;
8use solana_sdk::pubkey::Pubkey;
9use spl_associated_token_account::get_associated_token_address;
10
11impl PumpswapPool {
12 pub fn from_account_info(pubkey: Pubkey, account_buffer: &[u8]) -> Self {
16 let decoded_layout: PumpAmmPoolAccount =
17 PumpAmmPoolAccount::try_from_slice(&account_buffer[0..300])
18 .expect("Failed to deserialize PumpSwap pool account");
19
20 let fee_vault_token_account =
27 get_associated_token_address(&PUMP_SWAP_FEE_VAULTS[0], &decoded_layout.quote_mint);
28
29 let (coin_creator_vault_authority, _) = Pubkey::find_program_address(
30 &[b"creator_vault", decoded_layout.coin_creator.as_array()],
31 &PUMP_CONSTANTS.pump_swap_program,
32 );
33 let coin_creator_vault_authority_token_account =
34 get_associated_token_address(&coin_creator_vault_authority, &decoded_layout.quote_mint);
35
36 Self {
37 info: Pool {
38 pool_address: pubkey,
39 token_a_address: decoded_layout.base_mint,
40 token_b_address: decoded_layout.quote_mint,
41 pool_type: Pools::PumpswapAmm,
42 token_a_vault_address: decoded_layout.pool_base_token_account,
43 token_b_vault_address: decoded_layout.pool_quote_token_account,
44 },
45 pool_creator: decoded_layout.creator,
46 coin_creator: decoded_layout.coin_creator,
47 fee_vault: PUMP_SWAP_FEE_VAULTS[0],
48 fee_vault_token_account,
49 token_a_vault_amount: 0,
51 token_b_vault_amount: 0,
52 coin_creator_vault_authority,
53 coin_creator_vault_authority_token_account,
54 }
55 }
56}