sendfun_sdk/launchpad/
migrate.rs1use 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 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}