Skip to main content

sendfun_sdk/launchpad/
migrate.rs

1use crate::constants::{
2	ATA_PROGRAM_ID, DEX_PROGRAM_ID, LAUNCHPAD_PROGRAM_ID, NEXUS_PROGRAM_ID,
3	SYSTEM_PROGRAM_ID, TOKEN_2022_PROGRAM_ID,
4};
5use solana_address::Address;
6
7#[derive(Clone, Debug)]
8pub struct BuildMigrateParams<'a> {
9	pub caller: &'a Address,
10	pub base_mint: &'a Address,
11	pub quote_mint: &'a Address,
12	/// `BondingCurve::creator_fee_config`. `migrate` refuses any other account.
13	pub creator_fee_config: &'a Address,
14	pub quote_token_program: &'a Address,
15}
16
17#[must_use]
18pub fn build_migrate_instruction(
19	p: &BuildMigrateParams<'_>,
20) -> solana_instruction::Instruction {
21	let base_mint = p.base_mint;
22	let quote_mint = p.quote_mint;
23
24	let (bonding_curve, _) =
25		super::pda::find_bonding_curve_pda(base_mint, quote_mint);
26	let (base_vault, _) = crate::utils::find_associated_token_pda(
27		&bonding_curve,
28		base_mint,
29		&TOKEN_2022_PROGRAM_ID,
30	);
31	let (quote_vault, _) = crate::utils::find_associated_token_pda(
32		&bonding_curve,
33		quote_mint,
34		p.quote_token_program,
35	);
36
37	let (pool, _) = crate::dex::pda::find_pool_pda(base_mint, quote_mint);
38	let (lp_mint, _) = crate::dex::pda::find_lp_mint_pda(base_mint, quote_mint);
39	let (pool_base_vault, _) = crate::utils::find_associated_token_pda(
40		&pool,
41		base_mint,
42		&TOKEN_2022_PROGRAM_ID,
43	);
44	let (pool_quote_vault, _) = crate::utils::find_associated_token_pda(
45		&pool,
46		quote_mint,
47		p.quote_token_program,
48	);
49	let (pool_lp_account, _) = crate::utils::find_associated_token_pda(
50		&pool,
51		&lp_mint,
52		&TOKEN_2022_PROGRAM_ID,
53	);
54
55	let migrate = super::instructions::Migrate {
56		caller: *p.caller,
57		bonding_curve,
58		base_mint: *base_mint,
59		quote_mint: *quote_mint,
60		base_vault,
61		quote_vault,
62		dex_program: DEX_PROGRAM_ID,
63		migration_authority: super::pda::MIGRATION_AUTHORITY_ADDRESS,
64		pool,
65		lp_mint,
66		pool_base_vault,
67		pool_quote_vault,
68		pool_lp_account,
69		dex_event_authority: crate::dex::pda::EVENT_AUTHORITY_ADDRESS,
70		nexus_program: NEXUS_PROGRAM_ID,
71		creator_fee_config: *p.creator_fee_config,
72		base_token_program: TOKEN_2022_PROGRAM_ID,
73		quote_token_program: *p.quote_token_program,
74		associated_token_program: ATA_PROGRAM_ID,
75		system_program: SYSTEM_PROGRAM_ID,
76		event_authority: super::pda::EVENT_AUTHORITY_ADDRESS,
77		program: LAUNCHPAD_PROGRAM_ID,
78	};
79	migrate.instruction()
80}