1use solana_sdk::pubkey::Pubkey;
2
3pub const LAMPORTS_PER_SOL: u128 = 1_000_000_000;
4
5pub struct Tokens {
6 pub wsol: Pubkey,
7 pub usdc: Pubkey,
8 pub usdt: Pubkey,
9}
10
11pub const TOKENS: Tokens = Tokens {
12 wsol: Pubkey::from_str_const("So11111111111111111111111111111111111111112"),
13 usdc: Pubkey::from_str_const("EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v"),
14 usdt: Pubkey::from_str_const("Es9vMFrzaCERmJfrF4H2FYD4KCoNkY11McCe8BenwNYB"),
15};
16
17pub struct PumpConstants {
18 pub bonding_curve_global_config: Pubkey,
19 pub bonding_curve_program: Pubkey,
20 pub bonding_curve_event_authority: Pubkey,
21 pub bonding_curve_update_authority: Pubkey,
22 pub bonding_curve_fee_config: Pubkey,
23 pub pump_swap_migrator_wallet: Pubkey,
24 pub pump_swap_program: Pubkey,
25 pub pump_swap_global_config: Pubkey,
26 pub pump_swap_event_authority: Pubkey,
27 pub bonding_curve_global_volume_accumulator: Pubkey,
28 pub pumpswap_fee_config: Pubkey,
29 pub pumpswap_global_volume_accumulator: Pubkey,
30 pub fee_program: Pubkey,
31 pub buy_instruction_discriminator: [u8; 8],
36 pub sell_instruction_discriminator: [u8; 8],
37 pub create_pool_instruction_discriminator: [u8; 8],
38 pub bonding_curve_event_discriminator: [u8; 16],
39 pub bonding_curve_create_instruction_discriminator: [u8; 8],
40 pub bonding_curve_buy_exact_sol_in_instruction_discriminator: [u8; 8],
41 pub pumpswap_buy_exact_quote_in_instruction_discriminator: [u8; 8],
42 pub pumpswap_swap_event_discriminator: [u8; 8],
43 pub pumpswap_buy_swap_event_discriminator: [u8; 8],
44 pub bc_init_virtual_sol_reserves: u64,
45 pub bc_init_virtual_token_reserve_diff: u64,
46}
47
48pub const PUMP_CONSTANTS: PumpConstants = PumpConstants {
49 bonding_curve_global_config: Pubkey::from_str_const(
50 "4wTV1YmiEkRvAtNtsSGPtUrqRYQMe5SKy2uB4Jjaxnjf",
51 ),
52 bonding_curve_program: Pubkey::from_str_const("6EF8rrecthR5Dkzon8Nwu78hRvfCKubJ14M5uBEwF6P"),
53 bonding_curve_event_authority: Pubkey::from_str_const(
54 "Ce6TQqeHC9p8KetsN6JsjHK7UTZk7nasjjnr7XxXp9F1",
55 ),
56 bonding_curve_update_authority: Pubkey::from_str_const(
57 "TSLvdd1pWpHVjahSpsvCXUbgwsL3JAcvokwaKt1eokM",
58 ),
59 bonding_curve_fee_config: Pubkey::from_str_const("8Wf5TiAheLUqBrKXeYg2JtAFFMWtKdG2BSFgqUcPVwTt"),
60 pump_swap_migrator_wallet: Pubkey::from_str_const("39azUYFWPz3VHgKCf3VChUwbpURdCHRxjWVowf5jUJjg"),
61 pump_swap_program: Pubkey::from_str_const("pAMMBay6oceH9fJKBRHGP5D4bD4sWpmSwMn52FMfXEA"),
62 pump_swap_global_config: Pubkey::from_str_const("ADyA8hdefvWN2dbGGWFotbzWxrAvLW83WG6QCVXvJKqw"),
63 pump_swap_event_authority: Pubkey::from_str_const("GS4CU59F31iL7aR2Q8zVS8DRrcRnXX1yjQ66TqNVQnaR"),
64 bonding_curve_global_volume_accumulator: Pubkey::from_str_const(
65 "Hq2wp8uJ9jCPsYgNHex8RtqdvMPfVGoYwjvF1ATiwn2Y",
66 ),
67 pumpswap_global_volume_accumulator: Pubkey::from_str_const(
68 "C2aFPdENg4A2HQsmrd5rTw5TaYBX5Ku887cWjbFKtZpw",
69 ),
70 fee_program: Pubkey::from_str_const("pfeeUxB6jkeY1Hxd7CsFCAjcbHA9rWtchMGdZ6VojVZ"),
71 pumpswap_fee_config: Pubkey::from_str_const("5PHirr8joyTMp9JMm6nW7hNDVyEYdkzDqazxPD7RaTjx"),
72 buy_instruction_discriminator: [102, 6, 61, 18, 1, 218, 235, 234],
73 sell_instruction_discriminator: [51, 230, 133, 164, 1, 127, 131, 173],
74 create_pool_instruction_discriminator: [233, 146, 209, 142, 207, 104, 64, 188],
75 bonding_curve_event_discriminator: [
76 228, 69, 165, 46, 81, 203, 154, 29, 189, 219, 127, 211, 78, 230, 97, 238,
77 ],
78 bonding_curve_create_instruction_discriminator: [24, 30, 200, 40, 5, 28, 7, 119],
79 bonding_curve_buy_exact_sol_in_instruction_discriminator: [56, 252, 116, 8, 158, 223, 205, 95],
80 pumpswap_buy_exact_quote_in_instruction_discriminator: [198, 46, 21, 82, 180, 217, 232, 112],
81 pumpswap_swap_event_discriminator: [228, 69, 165, 46, 81, 203, 154, 29],
82 pumpswap_buy_swap_event_discriminator: [103, 244, 82, 31, 44, 245, 119, 119],
83 bc_init_virtual_sol_reserves: 30_000_000_000,
87 bc_init_virtual_token_reserve_diff: 279_900_000_000_000,
88};
89
90pub const PUMP_SWAP_FEE_VAULTS: [Pubkey; 8] = [
91 Pubkey::from_str_const("62qc2CNXwrYqQScmEdiZFFAnJR262PxWEuNQtxfafNgV"),
92 Pubkey::from_str_const("7VtfL8fvgNfhz17qKRMjzQEXgbdpnHHHQRh54R9jP2RJ"),
93 Pubkey::from_str_const("7hTckgnGnLQR6sdH7YkqFTAA7VwTfYFaZ6EhEsU3saCX"),
94 Pubkey::from_str_const("9rPYyANsfQZw3DnDmKE3YCQF5E8oD89UXoHn9JFEhJUz"),
95 Pubkey::from_str_const("AVmoTthdrX6tKt4nDjco2D775W2YK3sDhxPcMmzUAmTY"),
96 Pubkey::from_str_const("FWsW1xNtWscwNmKv6wVsU1iTzRN6wmmk3MjxRP5tT7hz"),
97 Pubkey::from_str_const("G5UZAVbAf46s7cKWoyKu8kYTip9DGTpbLZ2qa9Aq69dP"),
98 Pubkey::from_str_const("JCRGumoE9Qi5BBgULTgdgTLjSgkCMSbF62ZZfGs84JeU"),
99];
100
101pub struct RaydiumConstants {
102 pub amm_authority: Pubkey,
103 pub market_program_id: Pubkey,
104 pub amm_program: Pubkey,
105 pub cpmm_program: Pubkey,
106 pub cpmm_authority: Pubkey,
107 pub launchpad_global_config: Pubkey,
108 pub launchpad_event_authority: Pubkey,
109 pub launchpad_program: Pubkey,
110 pub launchpad_authority: Pubkey,
111 pub cpmm_swap_discriminators: [[u8; 8]; 2],
112 pub launchpad_swap_discriminators: [[u8; 8]; 4],
113 pub cpmm_create_pool_instruction_discriminator: [u8; 8],
114 pub ammv4_create_pool_instruction_discriminator: u8,
115 pub ammv4_swap_discriminators: [u8; 2],
116}
117
118pub const RAYDIUM_CONSTANTS: RaydiumConstants = RaydiumConstants {
119 amm_authority: Pubkey::from_str_const("5Q544fKrFoe6tsEbD7S8EmxGTJYAKtTVhAW5Q5pge4j1"),
120 market_program_id: Pubkey::from_str_const("srmqPvymJeFKQ4zGQed1GFppgkRHL9kaELCbyksJtPX"),
121 amm_program: Pubkey::from_str_const("675kPX9MHTjS2zt1qfr1NYHuzeLXfQM9H24wFSUt1Mp8"),
122 cpmm_program: Pubkey::from_str_const("CPMMoo8L3F4NbTegBCKVNunggL7H1ZpdTHKxQB5qKP1C"),
123 cpmm_authority: Pubkey::from_str_const("GpMZbSM2GgvTKHJirzeGfMFoaZ8UR2X7F4v8vHTvxFbL"),
124 launchpad_global_config: Pubkey::from_str_const("6s1xP3hpbAfFoNtUNF8mfHsjr2Bd97JxFJRWLbL6aHuX"),
126 launchpad_event_authority: Pubkey::from_str_const("2DPAtwB8L12vrMRExbLuyGnC7n2J5LNoZQSejeQGpwkr"),
127 launchpad_program: Pubkey::from_str_const("LanMV9sAd7wArD4vJFi2qDdfnVhFxYSUg6eADduJ3uj"),
128 launchpad_authority: Pubkey::from_str_const("WLHv2UAZm6z4KyaaELi5pjdbJh6RESMva1Rnn8pJVVh"),
129 cpmm_swap_discriminators: [
134 [143, 190, 90, 218, 196, 30, 51, 222],
136 [55, 217, 98, 86, 163, 74, 180, 173],
138 ],
139 ammv4_swap_discriminators: [9, 11],
141 cpmm_create_pool_instruction_discriminator: [175, 175, 109, 31, 13, 152, 155, 237],
142 ammv4_create_pool_instruction_discriminator: 1,
143 launchpad_swap_discriminators: [
145 [250, 234, 13, 123, 213, 156, 19, 236],
147 [149, 39, 222, 155, 211, 124, 152, 26],
149 [24, 211, 116, 40, 105, 3, 153, 56],
151 [95, 200, 71, 34, 8, 9, 11, 166],
153 ],
154};
155
156pub struct MeteoraConstants {
157 pub amm_program: Pubkey,
158 pub vault_program: Pubkey,
159 pub vault_base_key: Pubkey,
160 pub locked_profit_degradation_denominator: u128,
161 pub dammv2_program: Pubkey,
162 pub dammv2_pool_authority: Pubkey,
163 pub dammv2_event_authority: Pubkey,
164 pub dammv2_max_fee_numerator: u64,
165 pub dammv2_max_fee_denominator: u128,
166 pub dbc_program: Pubkey,
167 pub dbc_pool_authority: Pubkey,
168 pub dbc_event_authority: Pubkey,
169 pub dbc_swap_discriminator: [u8; 8],
170}
171
172pub const METEORA_CONSTANTS: MeteoraConstants = MeteoraConstants {
173 amm_program: Pubkey::from_str_const("Eo7WjKq67rjJQSZxS6z3YkapzY3eMj6Xy8X5EQVn5UaB"),
174 vault_program: Pubkey::from_str_const("24Uqj9JCLxUeoC3hGfh5W3s9FM9uCHDS2SG3LYwBpyTi"),
175 vault_base_key: Pubkey::from_str_const("HWzXGcGHy4tcpYfaRDCyLNzXqBTv3E6BttpCH2vJxArv"),
176 locked_profit_degradation_denominator: 1_000_000_000_000,
177 dammv2_program: Pubkey::from_str_const("cpamdpZCGKUy5JxQXB4dcpGPiikHawvSWAd6mEn1sGG"),
178 dammv2_pool_authority: Pubkey::from_str_const("HLnpSz9h2S4hiLQ43rnSD9XkcUThA7B8hQMKmDaiTLcC"),
179 dammv2_event_authority: Pubkey::from_str_const("3rmHSu74h1ZcmAisVcWerTCiRDQbUrBKmcwptYGjHfet"),
180 dammv2_max_fee_numerator: 500_000_000,
181 dammv2_max_fee_denominator: 1_000_000_000,
182 dbc_program: Pubkey::from_str_const("dbcij3LWUppWqq96dh6gJWwBifmcGfLSB5D4DuSMaqN"),
183 dbc_pool_authority: Pubkey::from_str_const("FhVo3mqL8PW5pH5U2CN4XE33DokiyZnUwuGpH2hmHLuM"),
184 dbc_event_authority: Pubkey::from_str_const("8Ks12pbrD6PXxfty1hVQiE9sc289zgU1zHkvXhrSdriF"),
185 dbc_swap_discriminator: [248, 198, 158, 145, 225, 117, 135, 200],
186};
187
188pub struct SolanaPrograms {
189 pub token_program: Pubkey,
190 pub token_2022_program: Pubkey,
191 pub system_program: Pubkey,
192 pub associated_token_program: Pubkey,
193 pub compute_budget_program: Pubkey,
194 pub metaplex_program: Pubkey,
195}
196
197pub const SOLANA_PROGRAMS: SolanaPrograms = SolanaPrograms {
198 token_program: Pubkey::from_str_const("TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA"),
199 token_2022_program: Pubkey::from_str_const("TokenzQdBNbLqP5VEhdkAS6EPFLC1PHnBqCXEpPxuEb"),
200 system_program: Pubkey::from_str_const("11111111111111111111111111111111"),
201 associated_token_program: Pubkey::from_str_const("ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL"),
202 compute_budget_program: Pubkey::from_str_const("ComputeBudget111111111111111111111111111111"),
203 metaplex_program: Pubkey::from_str_const("metaqbxxUerdq28cj1RbAWkYQm3ybzjb6a8bt518x1s"),
204};
205
206pub struct PoolsAccountSizes {
208 pub pump_swap: usize,
209 pub meteora_amm: usize,
210 pub meteora_dammv2: usize,
211 pub raydium_ammv4: usize,
212 pub raydium_cpmm: usize,
213}
214
215pub const POOLS_ACCOUNT_SIZES: PoolsAccountSizes = PoolsAccountSizes {
216 pump_swap: 300,
217 meteora_amm: 952,
218 meteora_dammv2: 1112,
219 raydium_ammv4: 752,
220 raydium_cpmm: 637,
221};