solana_central/raydium/
get_launchpad_pool_from_accountinfo.rs

1use crate::constants::RAYDIUM_CONSTANTS;
2use crate::protocol_idls::raydium::LaunchpadPoolIdl;
3use crate::types::pool::Pool;
4use crate::types::pools::Pools;
5use crate::types::raydium_launchpad::RaydiumLaunchpad;
6use borsh::BorshDeserialize;
7use solana_sdk::pubkey::Pubkey;
8
9impl RaydiumLaunchpad {
10  /// Create a Raydium launchpad pool from on-chain account data
11  ///
12  /// Parses the launchpad pool account and derives platform and creator vault PDAs.
13  pub fn from_account_info(pubkey: Pubkey, account_buffer: &[u8]) -> Self {
14    let decoded_layout = LaunchpadPoolIdl::try_from_slice(account_buffer).unwrap();
15    let platform_config = decoded_layout.platform_config;
16    let token_b_address = decoded_layout.quote_mint;
17
18    let (platform_vault, _) = Pubkey::find_program_address(
19      &[platform_config.as_array(), token_b_address.as_array()],
20      &RAYDIUM_CONSTANTS.launchpad_program,
21    );
22    let (creator_vault, _) = Pubkey::find_program_address(
23      &[
24        decoded_layout.creator.as_array(),
25        token_b_address.as_array(),
26      ],
27      &RAYDIUM_CONSTANTS.launchpad_program,
28    );
29
30    Self {
31      info: Pool {
32        pool_address: pubkey,
33        token_a_address: decoded_layout.base_mint,
34        token_b_address,
35        pool_type: Pools::RaydiumLaunchpad,
36        token_a_vault_address: decoded_layout.base_vault,
37        token_b_vault_address: decoded_layout.quote_vault,
38      },
39      platform_config,
40      platform_vault,
41      creator_vault,
42      virtual_token_a_reserve: decoded_layout.virtual_base,
43      virtual_token_b_reserve: decoded_layout.virtual_quote,
44      real_token_a_reserve: decoded_layout.real_base,
45      real_token_b_reserve: decoded_layout.real_quote,
46    }
47  }
48}