pub const CHAIN: &str = "solana";
pub fn rpc_url() -> String {
if let Ok(u) = std::env::var("SOLWATCH_RPC_URL") {
return u;
}
if let Ok(k) = std::env::var("HELIUS_API_KEY") {
if !k.trim().is_empty() {
return format!("https://mainnet.helius-rpc.com/?api-key={}", k.trim());
}
}
"https://api.mainnet-beta.solana.com".to_string()
}
pub fn rpc_concurrency() -> usize {
std::env::var("SOLWATCH_RPC_CONCURRENCY")
.ok()
.and_then(|s| s.parse().ok())
.filter(|n| *n >= 1 && *n <= 64)
.unwrap_or(4)
}
pub fn jupiter_base() -> String {
std::env::var("SOLWATCH_JUPITER").unwrap_or_else(|_| "https://lite-api.jup.ag".to_string())
}
pub fn rokha_link() -> Option<String> {
std::env::var("SOLWATCH_ROKHA_URL")
.ok()
.map(|s| s.trim().to_string())
.filter(|s| !s.is_empty())
}
pub const DEXSCREENER_BASE: &str = "https://api.dexscreener.com";
pub const DEXSCREENER_CHAIN: &str = "solana";
pub const SYSTEM_PROGRAM: &str = "11111111111111111111111111111111";
pub const SPL_TOKEN: &str = "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA";
pub const TOKEN_2022: &str = "TokenzQdBNbLqP5VEhdkAS6EPFLC1PHnBqCXEpPxuEb";
pub const METAPLEX_METADATA: &str = "metaqbxxUerdq28cj1RbAWkYQm3ybzjb6a8bt518x1s";
pub const ASSOCIATED_TOKEN: &str = "ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL";
pub const PUMPFUN_PROGRAM: &str = "6EF8rrecthR5Dkzon8Nwu78hRvfCKubJ14M5uBEwF6P";
pub const INCINERATOR: &str = "1nc1nerator11111111111111111111111111111111";
pub fn locker_program_labels() -> Vec<(&'static str, &'static str)> {
vec![
(
"strmRqUCoQUgGUan5YhzUZa6KqdzwX5L6FpUxfmKg5m",
"Streamflow lock",
),
(
"LocpQgucEQHbqNABEYvBvwoxCPsSbG91A1QaQhQQqjn",
"Jupiter Lock",
),
(
"TokenVestA6qNSLDGRc4KzMRWfPXGqmDFj2CJYhKRWH",
"Bonfida token vesting",
),
(
"CChTq6PthWEHaGSa2cbKDBw3JfaYspbC24oZQYZ1kFa5",
"Bonfida vesting (legacy)",
),
]
}
pub const JITO_TIP_ACCOUNTS: [&str; 8] = [
"96gYZGLnJYVFmbjzopPSU6QiEV5fGqZNyN9nmNhvrZU5",
"HFqU5x63VTqvQss8hp11i4wVV8bD44PvwucfZ2bU7gRe",
"Cw8CFyM9FkoMi7K7Crf6HNQqf4uEMzpKw6QNghXLvLkY",
"ADaUMid9yfUytqMBgopwjb2DTLSokTSzL1zt6iGPaS49",
"DfXygSm4jCyNCybVYYK6DwvWqjKee8pbDmJGcLWNDXjh",
"ADuUkR4vqLUMWXxW9gh6D6L8pMSawimctcNZ5pGwDcEt",
"DttWaMuVvTiduZRnguLF7jNxTgiMBZ1hyAumKUiL2KRL",
"3AVi9Tg9Uo68tJfuvoKvqKNWKkC5wPdSSdeBnizKZ6jT",
];
pub const JITO_BUNDLES_API: &str = "https://bundles.jito.wtf/api/v1/bundles/transaction";
pub fn cex_hot_wallets() -> Vec<(&'static str, &'static str)> {
vec![
("5tzFkiKscXHK5ZXCGbXZxdw7gTjjD1mBwuoFbhUvuAi9", "Binance"),
("2ojv9BAiHUrvsm9gxDe7fJSzbNZSJcxZvf8dqmWGHG8S", "Binance"),
("9WzDXwBbmkg8ZTbNMqUxvQRAyrZzDsGYdLVL9zYtAWWM", "Binance"),
("AC5RDfQFmDS1deWZos921JfqscXdByf8BKHs5ACWjtW2", "Bybit"),
("42brAgAVNzMBP7aaktPvAmBSPEkehnFQejiZc53EpJFd", "Bybit"),
("H8sMJSCQxfKiFTCfDR3DUMLPwcRbM61LGFJ8N4dK3WjS", "Coinbase"),
("2AQdpHJ2JpcEgPiATUXjQxA8QmafFegfQwSLWSprPicm", "Coinbase"),
(
"GJRs4FwHtemZ5ZE9x3FNvJ8TMwitKTh21yxdRPqn7npE",
"Coinbase Hot",
),
("5VCwKtCXgCJ6kit5FybXjvriW3xELsFDhYrPSqtJNmcD", "OKX"),
("9un5wqE3q4oCjyrDkwsdD48KteCJitQX5978Vh7KKxHo", "OKX 2"),
("FWznbcNXWQuHTawe9RxvQ2LdCENssh12dsznf4RiouN5", "Kraken"),
("BmFdpraQhkiDQE6SnfG5omcA1VwzqfXrwtNYBwWTymy6", "Kucoin"),
("ASTyfSima4LLAdDgoFGkgqoKowG1LZFDr9fAQrg7iaJZ", "MEXC"),
("5PAhQiYdLBd6SVdjzBQDxUAEFyDdF5ExNPQfcscnPRj5", "Gate.io"),
("u6PJ8DtQuPFnfmwHbGFULQ4u4EgjDiyYKjVEsynXq2w", "Gate.io 2"),
]
}
pub fn pool_program_labels() -> Vec<(&'static str, &'static str)> {
vec![
(
"6EF8rrecthR5Dkzon8Nwu78hRvfCKubJ14M5uBEwF6P",
"pump.fun bonding curve",
),
(
"pAMMBay6oceH9fJKBRHGP5D4bD4sWpmSwMn52FMfXEA",
"PumpSwap pool",
),
(
"675kPX9MHTjS2zt1qfr1NYHuzeLXfQM9H24wFSUt1Mp8",
"Raydium AMM v4",
),
(
"CAMMCzo5YL8w4VFF8KVHrK22GGUsp5VTaW7grrKgrWqK",
"Raydium CLMM",
),
(
"CPMMoo8L3F4NbTegBCKVNunggL7H1ZpdTHKxQB5qKP1C",
"Raydium CPMM",
),
(
"LanMV9sAd7wArD4vJFi2qDdfnVhFxYSUg6eADduJ3uj",
"Raydium LaunchLab",
),
(
"whirLbMiicVdio4qvUfM5KAg6Ct8VwpYzGff3uctyCc",
"Orca Whirlpool",
),
("9W959DqEETiGZocYWCQPaJ6sBmUzgfxXfqGeTEdp3aQP", "Orca v2"),
(
"Eo7WjKq67rjJQSZxS6z3YkapzY3eMj6Xy8X5EQVn5UaB",
"Meteora DAMM",
),
(
"LBUZKhRxPF3XUpBCjp4YzTKgLccjZhTSDM9YuVaPwxo",
"Meteora DLMM",
),
(
"cpamdpZCGKUy5JxQXB4dcpGPiikHawvSWAd6mEn1sGG",
"Meteora DAMM v2",
),
("dbcij3LWUppWqq96dh6gJWwBifmcGfLSB5D4DuSMaqN", "Meteora DBC"),
(
"srmqPvymJeFKQ4zGQed1GFppgkRHL9kaELCbyksJtPX",
"OpenBook/Serum",
),
("PhoeNiXZ8ByJGLkxNfZRnkUfjvmuYqLR89jjFHGqdXY", "Phoenix"),
("opnb2LAfJYbRMAHHvqjCwQxanZn7ReEHp1k81EohpZb", "OpenBook v2"),
("SSwpkEEcbUqx4vtoEByFjSkhKdCT862DNVb52nZg1UZ", "Saber"),
("MERLuDFBMmsHnsBPZw2sDQZHvXFMwp8EdjudcU2HKky", "Mercurial"),
("stkitrT1Uoy18Dk1fTrgPw8W6MVzoCfYoAFT4MLsmhq", "Sanctum"),
(
"5ocnV1qiCgaQR8Jb8xWnVbApfaygJ8tNoZfgPwsgx9kx",
"Sanctum Infinity",
),
("HEvSKofvBgfaexv23kMabbYqxasxU3mQ4ibBMEmJWHny", "Bonkswap"),
(
"BSwp6bEBihVLdqJRKGgzjcGLHkcTuzmSo1TQkHepzH8p",
"Bonk launchpad",
),
(
"boop8hVGQGqehUK2iVEMEnMrL5RbjywRzHKBmBE7ry4",
"Boop launchpad",
),
("MoonCVVNZFSYkqNXP6bxHLPL6QQJiMagDL3qcqUQTrG", "Moonshot"),
]
}