sol_parser_sdk/grpc/
program_ids.rs

1// Program IDs for supported DEX protocols
2pub const PUMPFUN_PROGRAM_ID: &str = "6EF8rrecthR5Dkzon8Nwu78hRvfCKubJ14M5uBEwF6P";
3pub const PUMPSWAP_PROGRAM_ID: &str = "pAMMBay6oceH9fJKBRHGP5D4bD4sWpmSwMn52FMfXEA";
4pub const BONK_PROGRAM_ID: &str = "BSwp6bEBihVLdqJRKS58NaebUBSDNjN7MdpFwNaR6gn3";
5pub const RAYDIUM_CPMM_PROGRAM_ID: &str = "CPMMoo8L3F4NbTegBCKVNunggL7H1ZpdTHKxQB5qKP1C";
6pub const RAYDIUM_CLMM_PROGRAM_ID: &str = "CAMMCzo5YL8w4VFF8KVHrK22GGUQtcaMpgYqJPXBDvfE";
7pub const RAYDIUM_AMM_V4_PROGRAM_ID: &str = "675kPX9MHTjS2zt1qfr1NYHuzeLXfQM9H24wFSUt1Mp8";
8
9use crate::grpc::types::Protocol;
10use std::collections::HashMap;
11
12lazy_static::lazy_static! {
13    pub static ref PROTOCOL_PROGRAM_IDS: HashMap<Protocol, Vec<&'static str>> = {
14        let mut map = HashMap::new();
15        map.insert(Protocol::PumpFun, vec![PUMPFUN_PROGRAM_ID]);
16        map.insert(Protocol::PumpSwap, vec![PUMPSWAP_PROGRAM_ID]);
17        map.insert(Protocol::Bonk, vec![BONK_PROGRAM_ID]);
18        map.insert(Protocol::RaydiumCpmm, vec![RAYDIUM_CPMM_PROGRAM_ID]);
19        map.insert(Protocol::RaydiumClmm, vec![RAYDIUM_CLMM_PROGRAM_ID]);
20        map.insert(Protocol::RaydiumAmmV4, vec![RAYDIUM_AMM_V4_PROGRAM_ID]);
21        // 移除不存在的协议,只保留有实际常量的协议
22        map
23    };
24}
25
26pub fn get_program_ids_for_protocols(protocols: &[Protocol]) -> Vec<String> {
27    let mut program_ids = Vec::new();
28    for protocol in protocols {
29        if let Some(ids) = PROTOCOL_PROGRAM_IDS.get(protocol) {
30            for id in ids {
31                program_ids.push(id.to_string());
32            }
33        }
34    }
35    program_ids.sort();
36    program_ids.dedup();
37    program_ids
38}