use anyhow::Result;
use solana_sdk::{pubkey::Pubkey, signature::Signer};
use wp_solana_test_core::{
fund_token, fund_wsol, load_accounts_json, load_program, override_mint_authority, TestContext,
};
use super::types;
pub struct RaydiumClmmAccounts {
pub program_id: Pubkey,
pub metadata_program_id: Pubkey,
pub pool_address: Pubkey,
pub usdc_mint: Pubkey,
pub wsol_mint: Pubkey,
pub payer_usdc_ata: Pubkey,
pub payer_wsol_ata: Pubkey,
pub tick_spacing: u16,
}
pub struct RaydiumClmmOfflineConfig<'a> {
pub program_bytes: &'a [u8],
pub metadata_program_bytes: &'a [u8],
pub account_fixtures_json: &'a [u8],
pub pool_address: Pubkey,
pub usdc_mint: Pubkey,
pub wsol_mint: Pubkey,
pub tick_spacing: u16,
}
impl<'a> RaydiumClmmOfflineConfig<'a> {
pub fn with_default_addresses(
program_bytes: &'a [u8],
metadata_program_bytes: &'a [u8],
account_fixtures_json: &'a [u8],
) -> Self {
use std::str::FromStr;
Self {
program_bytes,
metadata_program_bytes,
account_fixtures_json,
pool_address: Pubkey::from_str("3ucNos4NbumPLZNWztqGHNFFgkHeRMBQAVemeeomsUxv").unwrap(),
usdc_mint: Pubkey::from_str("EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v").unwrap(),
wsol_mint: spl_token::native_mint::id(),
tick_spacing: 10,
}
}
}
pub fn setup_raydium_clmm_offline(
ctx: &TestContext,
config: RaydiumClmmOfflineConfig,
) -> Result<RaydiumClmmAccounts> {
let program_id = types::raydium_clmm_program_id();
let meta_id = types::metadata_program_id();
load_program(ctx, program_id, config.program_bytes)?;
load_program(ctx, meta_id, config.metadata_program_bytes)?;
load_accounts_json(ctx, config.account_fixtures_json)?;
override_mint_authority(ctx, config.usdc_mint, ctx.payer.pubkey())?;
let payer_usdc_ata =
fund_token(ctx, config.usdc_mint, ctx.payer.pubkey(), 1_000_000_000_000_000)?;
let payer_wsol_ata = fund_wsol(ctx, ctx.payer.pubkey(), 10_000_000_000)?;
Ok(RaydiumClmmAccounts {
program_id,
metadata_program_id: meta_id,
pool_address: config.pool_address,
usdc_mint: config.usdc_mint,
wsol_mint: config.wsol_mint,
payer_usdc_ata,
payer_wsol_ata,
tick_spacing: config.tick_spacing,
})
}