solana_central/raydium/
get_raydium_ammv4_pool_from_accountinfo.rs

1use crate::protocol_idls::raydium::AmmV4PoolInfoIdl;
2use crate::types::pool::Pool;
3use crate::types::pools::Pools;
4use crate::types::raydium_ammv4_pool::RaydiumAmmV4Pool;
5use borsh::BorshDeserialize;
6use solana_sdk::pubkey::Pubkey;
7
8impl RaydiumAmmV4Pool {
9  /// Create a Raydium AMMv4 pool from on-chain account data
10  ///
11  /// Parses the account buffer using the Raydium AMMv4 pool IDL structure.
12  pub fn from_account_info(pubkey: Pubkey, account_buffer: &[u8]) -> Self {
13    let decoded_layout: AmmV4PoolInfoIdl =
14      AmmV4PoolInfoIdl::try_from_slice(account_buffer).unwrap();
15    Self {
16      info: Pool {
17        pool_address: pubkey,
18        token_a_address: decoded_layout.base_mint,
19        token_b_address: decoded_layout.quote_mint,
20        pool_type: Pools::RaydiumAmmV4,
21        token_a_vault_address: decoded_layout.base_vault,
22        token_b_vault_address: decoded_layout.quote_vault,
23      },
24      swap_fee_numerator: decoded_layout.swap_fee_numerator,
25      swap_fee_denominator: decoded_layout.swap_fee_denominator,
26      // Account layout doesn't contain these balances, so we set them to 0
27      token_a_vault_amount: 0,
28      token_b_vault_amount: 0,
29    }
30  }
31}