Skip to main content

sendfun_sdk/
constants.rs

1use solana_address::Address;
2
3use crate::utils::MintInfo;
4
5pub use crate::dex::generated::programs::SEND_DEX_ID as DEX_PROGRAM_ID;
6pub use crate::launchpad::generated::programs::SEND_LAUNCHPAD_ID as LAUNCHPAD_PROGRAM_ID;
7pub use crate::nexus::generated::programs::SEND_NEXUS_ID as NEXUS_PROGRAM_ID;
8
9pub const TOKEN_DECIMALS: u8 = 6;
10
11pub const SYSTEM_PROGRAM_ID: Address = Address::new_from_array([0u8; 32]);
12
13pub const WSOL_MINT: Address =
14	solana_address::address!("So11111111111111111111111111111111111111112");
15
16pub const USDC_MINT: Address =
17	solana_address::address!("EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v");
18
19pub const TOKEN_PROGRAM_ID: Address =
20	solana_address::address!("TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA");
21
22pub const TOKEN_2022_PROGRAM_ID: Address =
23	solana_address::address!("TokenzQdBNbLqP5VEhdkAS6EPFLC1PHnBqCXEpPxuEb");
24
25pub const ATA_PROGRAM_ID: Address =
26	solana_address::address!("ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL");
27
28/// The `Clock` sysvar. Read it with the mints for `MintInfo::load`.
29pub const CLOCK_SYSVAR_ID: Address =
30	solana_address::address!("SysvarC1ock11111111111111111111111111111111");
31
32pub const DEFAULT_PARTNER: Address = SYSTEM_PROGRAM_ID;
33
34pub const PYTH_SOL_USD_PRICE_ACCOUNT: Address =
35	solana_address::address!("7UVimffxr9ow1uXYxsr4LHAcV58mLzhmwaeKvJ1pjLiE");
36
37pub const STAKING_WSOL_VAULT_ADDRESS: Address =
38	solana_address::address!("AyisZJxXz9ywXhMwR3sb3oePxBB6UBvixXycAQCdSgrz");
39
40/// The mint info of WSOL.
41pub const WSOL_MINT_INFO: MintInfo =
42	MintInfo::plain(WSOL_MINT, TOKEN_PROGRAM_ID, 9);
43
44/// The mint info of USDC.
45pub const USDC_MINT_INFO: MintInfo =
46	MintInfo::plain(USDC_MINT, TOKEN_PROGRAM_ID, 6);
47
48#[cfg(test)]
49mod tests {
50	use super::*;
51
52	#[test]
53	fn staking_wsol_vault_matches_derivation() {
54		let (derived, _) = crate::utils::find_associated_token_pda(
55			&crate::nexus::pda::STAKING_CONFIG_ADDRESS,
56			&WSOL_MINT,
57			&TOKEN_PROGRAM_ID,
58		);
59		assert_eq!(derived, STAKING_WSOL_VAULT_ADDRESS);
60	}
61}
62
63/// Seeds of a platform PDA: `["platform", name]`, under the nexus program.
64pub const PLATFORM_SEED: &[u8] = b"platform";
65
66#[must_use]
67pub fn find_platform_address(name: &[u8]) -> (Address, u8) {
68	Address::find_program_address(&[PLATFORM_SEED, name], &NEXUS_PROGRAM_ID)
69}
70
71#[cfg(test)]
72mod platform_tests {
73	use super::*;
74
75	#[test]
76	fn platform_addresses_are_distinct_per_name() {
77		assert_ne!(
78			find_platform_address(b"sendfun").0,
79			find_platform_address(b"acme").0,
80		);
81	}
82}