solana_central/pumpfun/
from_account_info.rs1use crate::constants::PUMP_CONSTANTS;
2use crate::protocol_idls::pumpfun::PfBondingCurveIdl;
3use crate::pumpfun::derive_bonding_curve::derive_bonding_curve;
4use crate::types::pf_bonding_curve::PfBondingCurve;
5use borsh::BorshDeserialize;
6use solana_sdk::pubkey::Pubkey;
7use spl_associated_token_account::get_associated_token_address;
8
9impl PfBondingCurve {
10 pub fn from_account_info(token_address: Pubkey, account_buffer: &[u8]) -> Self {
31 let decoded_layout = PfBondingCurveIdl::try_from_slice(account_buffer)
32 .expect("Failed to deserialize Pf Bonding Curve account");
33
34 let (creator_vault_address, _) = Pubkey::find_program_address(
35 &[b"creator-vault", decoded_layout.creator.as_array()],
36 &PUMP_CONSTANTS.bonding_curve_program,
37 );
38 let bonding_curve_address = derive_bonding_curve(&token_address);
39
40 Self {
41 virtual_sol_reserves: decoded_layout.virtual_sol_reserves,
42 virtual_token_reserves: decoded_layout.virtual_token_reserves,
43 complete: decoded_layout.complete,
44 token_address,
45 bonding_curve_address,
46 bonding_curve_associated_token_account_address: get_associated_token_address(
47 &bonding_curve_address,
48 &token_address,
49 ),
50 creator_vault_address,
51 }
52 }
53}