sns_registrar/
lib.rs

1use bonfida_utils::declare_id_with_central_state;
2
3pub mod cpi;
4pub mod entrypoint;
5pub mod error;
6pub mod instruction_auto;
7pub mod processor;
8pub mod state;
9pub mod utils;
10
11pub use error::Error;
12
13#[cfg(not(feature = "devnet"))]
14declare_id_with_central_state!("jCebN34bUfdeUYJT13J1yG16XWQpt5PDx6Mse9GUqhR");
15
16#[cfg(feature = "devnet")]
17declare_id_with_central_state!("snshBoEQ9jx4QoHBpZDQPYdNCtw7RMxJvYrKFEhwaPJ");
18
19#[cfg(not(feature = "devnet"))]
20pub mod constants {
21    use phf::phf_map;
22    use solana_program::{pubkey, pubkey::Pubkey};
23
24    pub const VAULT_OWNER_DEPRECATED: Pubkey =
25        pubkey!("GcWEQ9K78FV7LEHteFVciYApERk5YvQuFDQPk1yYJVXi");
26    pub const VAULT_OWNER: Pubkey = pubkey!("5D2zKog251d6KPCyFyLMt3KroWwXXPWSgTPyhV22K2gR");
27
28    pub const ROOT_DOMAIN_ACCOUNT: Pubkey = pubkey!("58PwtjSDuFHuUkYjH9BYnnQKHfwo9reZhC2zMJv9JPkx");
29    pub const PYTH_MAPPING_ACCOUNT: Pubkey =
30        pubkey!("AHtgzX45WTKfkPG53L6WYhGEXwQkN1BVknET3sVsLL8J");
31    pub const REFERRER_WHITELIST: [Pubkey; 18] = [
32        pubkey!("3ogYncmMM5CmytsGCqKHydmXmKUZ6sGWvizkzqwT7zb1"), // Test wallet
33        pubkey!("DM1jJCkZZEwY5tmWbgvKRxsDFzXCdbfrYCCH1CtwguEs"), // 4Everland
34        pubkey!("ADCp4QXFajHrhy4f43pD6GJFtQLkdBY2mjS9DfCk7tNW"), // Bandit network
35        pubkey!("2XTgjw8yi1E3Etgj4CUyRD7Zk49gynH2U9gA5N2MY4NP"), // Altoscan
36        pubkey!("5PwNeqQPiygQks9R17jUAodZQNuhvCqqkrxSaeNE8qTR"), // Solscan
37        pubkey!("8kJqxAbqbPLGLMgB6FhLcnw2SiUEavx2aEGM3WQGhtJF"), // Domains labs
38        pubkey!("HemvJzwxvVpWBjPETpaseAH395WAxb2G73MeUfjVkK1u"), // Solflare
39        pubkey!("7hMiiUtkH4StMPJxyAtvzXTUjecTniQ8czkCPusf5eSW"), // Solnames
40        pubkey!("DGpjHo4yYA3NgHvhHTp3XfBFrESsx1DnhfTr8D881ZBM"), // Brave
41        pubkey!("7vWSqSw1eCXZXXUubuHWssXELNQ8MLaDgAs2ErEfCKxn"), // 585.eth
42        pubkey!("5F6gcdzpw7wUjNEugdsD4aLJdEQ4Wt8d6E85vaQXZQSJ"), // wdotsol
43        pubkey!("XEy9o73JBN2pEuN7aspe8mVLaWbL4ozjJs1tNRxx8bL"),  // GoDID
44        pubkey!("D5cLoAGjNTHKU1UGv2bYwbnyRoGTMe3sbpLtJW3fRq91"), // SuiNS
45        pubkey!("FePcCmrr7vgjeFXcXtJHqShSXydaTrga2wfHRt9RrYvP"), // Nansen
46        pubkey!("5D2zKog251d6KPCyFyLMt3KroWwXXPWSgTPyhV22K2gR"), // SNS Campaign
47        pubkey!("452cMqDHe5cf1Z96HxUNaQjiLckhMiZdZ5abe7oQ2iRB"), // Endless Domains
48        pubkey!("8hmebGRQpZG8RpR3SFTfnuY2K4QgNxyAtqdhR9UuFksB"), // Coupon Vault
49        pubkey!("7siDgAEyXRCEhNjZcQ8VLVbMxXQaQY4hNcRbGbKj2i7u"), // CFL
50    ];
51    /// Percentage of domain name creation cost trasnfered to the referrer if specified
52    pub const REFERRER_FEES_PCT: u64 = 5;
53    pub static TOKENS_SYM_MINT_DECIMALS: phf::Map<&'static str, (Pubkey, u8)> = phf_map! {
54        "USDC" => (pubkey!("EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v"),6),
55        "USDT" => (pubkey!("Es9vMFrzaCERmJfrF4H2FYD4KCoNkY11McCe8BenwNYB"),6),
56        "SOL" => (pubkey!("So11111111111111111111111111111111111111112"),9),
57        "FIDA" => (pubkey!("EchesyfXePKdLtoiZSL8pBe8Myagyy8ZRqsACNCFGnvp"),6),
58        "MSOL" => (pubkey!("mSoLzYCxHdYgdzU16g5QSh3i5K3z3KZK7ytfqcJm7So"), 9),
59        "BONK" => (pubkey!("DezXAZ8z7PnrnRJjz3wXBoRgixCa6xjnB7YaB1pPB263"), 5),
60        "BAT" => (pubkey!("EPeUFDgHRxs9xxEPVaL6kfGQvCon7jmAWKVUHuux1Tpz"), 8),
61        "PYTH" => (pubkey!("HZ1JovNiVvGrGNiiYvEozEVgZ58xaU3RKwX8eACQBCt3"), 6),
62        "BSOL" => (pubkey!("bSo13r4TkiE4KumL71LsHTPpL2euBYLFx6h9HP3piy1"), 9),
63        "INJ" => (pubkey!("6McPRfPV6bY1e9hLxWyG54W9i9Epq75QBvXg2oetBVTB"), 8),
64    };
65    pub const FEES: &[u64] = &[500, 300, 200, 150, 100]; // Fees for low leverage orders for tiers [0, 1 ,2]
66    pub const FEE_TIERS: [u64; 4] = [500_000_000, 5_000_000_000, 20_000_000_000, 40_000_000_000]; // Amount of FIDA tokens (with precision) that the discount account needs to hold
67    pub const FIDA_MINT: Pubkey = pubkey!("EchesyfXePKdLtoiZSL8pBe8Myagyy8ZRqsACNCFGnvp");
68    pub const ADMIN: Pubkey = pubkey!("VBx642K1hYGLU5Zm1CHW1uRXAtFgxN5mRqyMcXnLZFW");
69    pub const AUCTION_PROGRAM_ID: Pubkey = pubkey!("AVWV7vdWbLqXiLKFaP19GhYurhwxaLp2qRBSjT5tR5vT");
70    pub const WOLVES_COLLECTION: Pubkey = pubkey!("Dw74YSxTKVXsztPm3TmwbnfLK8KVaCZw69jVu4LE6uJe");
71    pub const WOLVES_COLLECTION_METADATA: Pubkey =
72        pubkey!("72aLKvXeV4aansAQtxKymeXDevT5ed6sCuz9iN62ugPT");
73
74    // For marketing campaigns with partners
75    // referrer public key -> (discount_pct, start_time, end_time, referrer_pct, start_time, end_time)
76    // Example (Some(5), 1682864495, 1685060126, Some(10), 1682864495, 1685060126)
77    pub type SpecialDiscountFee = (Option<u8>, u64, u64, Option<u8>, u64, u64);
78    pub static REFERRER_DISCOUNT_AND_FEE: phf::Map<&'static str, SpecialDiscountFee> = phf_map! {
79        // Test wallet
80        "3ogYncmMM5CmytsGCqKHydmXmKUZ6sGWvizkzqwT7zb1" => (Some(10), 1682864495, 1719226965, Some(10), 1682864495, 1719226965),
81        // Solscan
82        "5PwNeqQPiygQks9R17jUAodZQNuhvCqqkrxSaeNE8qTR" => (None, 0, 0, Some(20), 0, u64::MAX),
83        // Domain Labs
84        "8kJqxAbqbPLGLMgB6FhLcnw2SiUEavx2aEGM3WQGhtJF" => (Some(20), 1691544598, 1692072000, Some(15), 0, u64::MAX),
85        // Solflare
86        "HemvJzwxvVpWBjPETpaseAH395WAxb2G73MeUfjVkK1u" => (None, 0, 0, Some(15), 1695942000, u64::MAX),
87        // Brave
88        "DGpjHo4yYA3NgHvhHTp3XfBFrESsx1DnhfTr8D881ZBM" => (None, 0, 0, Some(20), 0, u64::MAX),
89        // 585.eth
90        "7vWSqSw1eCXZXXUubuHWssXELNQ8MLaDgAs2ErEfCKxn" => (None, 0, 0, Some(20), 0, u64::MAX),
91        // wdotsol
92        "5F6gcdzpw7wUjNEugdsD4aLJdEQ4Wt8d6E85vaQXZQSJ" => (None, 0, 0, Some(20), 0, u64::MAX),
93        // SuiNS
94        "D5cLoAGjNTHKU1UGv2bYwbnyRoGTMe3sbpLtJW3fRq91" => (Some(20), 0, 1730311200, None, 0, 0),
95        // Nansen
96        "FePcCmrr7vgjeFXcXtJHqShSXydaTrga2wfHRt9RrYvP" => (Some(20), 0, 1731636000, None, 0, 0),
97        // SNS Campaign
98        "5D2zKog251d6KPCyFyLMt3KroWwXXPWSgTPyhV22K2gR" => (Some(50), 1737266400, 1737608460, None, 0, 0),
99        // Coupon Vault
100        "8hmebGRQpZG8RpR3SFTfnuY2K4QgNxyAtqdhR9UuFksB" => (None, 0, 0, Some(100), 0, u64::MAX),
101    };
102    // Fees taken for the reselling of domain names
103    // | Tier | Percentage of payout    | Requirements   |
104    // | ---- | ----------------------- | -------------- |
105    // | 0    | 5%                      | None           |
106    // | 1    | 3%                      | 500 FIDA       |
107    // | 2    | 2%                      | 5,000 FIDA     |
108    // | 3    | 1.5%                    | 20,000 FIDA    |
109    // | 4    | 1%                      | 40,000 FIDA    |
110}
111
112#[cfg(feature = "devnet")]
113pub mod constants {
114    use phf::phf_map;
115    use solana_program::{pubkey, pubkey::Pubkey};
116
117    pub const VAULT_OWNER_DEPRECATED: Pubkey =
118        pubkey!("SNSaTJbEv2iT3CUrCQYa9zpGjbBVWhFCPaSJHkaJX34");
119    pub const VAULT_OWNER: Pubkey = pubkey!("SNSaTJbEv2iT3CUrCQYa9zpGjbBVWhFCPaSJHkaJX34");
120
121    pub const ROOT_DOMAIN_ACCOUNT: Pubkey = pubkey!("5eoDkP6vCQBXqDV9YN2NdUs3nmML3dMRNmEYpiyVNBm2");
122    // Unused
123    pub const PYTH_MAPPING_ACCOUNT: Pubkey =
124        pubkey!("BmA9Z6FjioHJPpjT39QazZyhDRUdZy2ezwx4GiDdE2u2");
125    pub const REFERRER_WHITELIST: [Pubkey; 5] = [
126        pubkey!("3ogYncmMM5CmytsGCqKHydmXmKUZ6sGWvizkzqwT7zb1"), // Test wallet
127        pubkey!("DM1jJCkZZEwY5tmWbgvKRxsDFzXCdbfrYCCH1CtwguEs"), // 4Everland
128        pubkey!("ADCp4QXFajHrhy4f43pD6GJFtQLkdBY2mjS9DfCk7tNW"), // Bandit network
129        pubkey!("2XTgjw8yi1E3Etgj4CUyRD7Zk49gynH2U9gA5N2MY4NP"), // Altoscan
130        pubkey!("5oDWj8vr3vbcq9JZTtwXqrkCMZggMsDzNietvbr1BNfe"), // Solscan
131    ];
132    /// Percentage of domain name creation cost transfered to the referrer if specified
133    pub const REFERRER_FEES_PCT: u64 = 5;
134    pub static TOKENS_SYM_MINT_DECIMALS: phf::Map<&'static str, (Pubkey, u8)> = phf_map! {
135        "USDC" => (pubkey!("4zMMC9srt5Ri5X14GAgXhaHii3GnPAEERYPJgZJDncDU"),6),
136        "USDT" => (pubkey!("EJwZgeZrdC8TXTQbQBoL6bfuAnFUUy1PVCMB4DYPzVaS"),6), // Saber devnet
137        "SOL" => (pubkey!("So11111111111111111111111111111111111111112"),9),
138        "FIDA" => (pubkey!("fidaWCioBQjieRrUQDxxS5Uxmq1CLi2VuVRyv4dEBey"),6),
139        "INJ" => (pubkey!("DL4ivZm3NVHWk9ZvtcqTchxoKArDK4rT3vbDx2gYVr7P"), 8),
140    };
141    pub const FEES: &[u64] = &[500, 300, 200, 150, 100]; // Fees for low leverage orders for tiers [0, 1 ,2]
142    pub const FEE_TIERS: [u64; 4] = [500_000_000, 5_000_000_000, 20_000_000_000, 40_000_000_000]; // Amount of FIDA tokens (with precision) that the discount account needs to hold
143    pub const FIDA_MINT: Pubkey = pubkey!("fidaWCioBQjieRrUQDxxS5Uxmq1CLi2VuVRyv4dEBey");
144    pub const ADMIN: Pubkey = pubkey!("SNSaTJbEv2iT3CUrCQYa9zpGjbBVWhFCPaSJHkaJX34");
145    pub const AUCTION_PROGRAM_ID: Pubkey = pubkey!("AVWV7vdWbLqXiLKFaP19GhYurhwxaLp2qRBSjT5tR5vT");
146    pub const WOLVES_COLLECTION: Pubkey = pubkey!("Dw74YSxTKVXsztPm3TmwbnfLK8KVaCZw69jVu4LE6uJe");
147    pub const WOLVES_COLLECTION_METADATA: Pubkey =
148        pubkey!("72aLKvXeV4aansAQtxKymeXDevT5ed6sCuz9iN62ugPT");
149
150    // For marketing campaigns with partners
151    // referrer public key -> (discount_pct, start_time, end_time, referrer_pct, start_time, end_time)
152    // Example (Some(5), 1682864495, 1685060126, Some(10), 1682864495, 1685060126)
153    pub type SpecialDiscountFee = (Option<u8>, u64, u64, Option<u8>, u64, u64);
154    pub static REFERRER_DISCOUNT_AND_FEE: phf::Map<&'static str, SpecialDiscountFee> = phf_map! {
155        // Test wallet
156        "3ogYncmMM5CmytsGCqKHydmXmKUZ6sGWvizkzqwT7zb1" => (Some(10), 1682864495, 1779756628, Some(10), 1682864495, 1779756628),
157        // Bandit network
158        "ADCp4QXFajHrhy4f43pD6GJFtQLkdBY2mjS9DfCk7tNW" => (Some(20), 1686700800, 1687046399, Some(0), 0, u64::MAX),
159        // Solscan
160        "5oDWj8vr3vbcq9JZTtwXqrkCMZggMsDzNietvbr1BNfe" => (None, 0, 0, Some(20), 0, u64::MAX)
161    };
162    // Fees taken for the reselling of domain names
163    // | Tier | Percentage of payout    | Requirements   |
164    // | ---- | ----------------------- | -------------- |
165    // | 0    | 5%                      | None           |
166    // | 1    | 3%                      | 500 FIDA       |
167    // | 2    | 2%                      | 5,000 FIDA     |
168    // | 3    | 1.5%                    | 20,000 FIDA    |
169    // | 4    | 1%                      | 40,000 FIDA    |
170}
171
172#[cfg(not(feature = "no-entrypoint"))]
173solana_security_txt::security_txt! {
174    name: env!("CARGO_PKG_NAME"),
175    project_url: "http://sns.id",
176    contacts: "email:contact@sns.id,link:https://x.com/sns",
177    policy: "https://immunefi.com/bounty/sns",
178    preferred_languages: "en",
179    auditors: "Halborn"
180}