use solana_program::pubkey; use solana_sdk::pubkey::Pubkey; pub const JITO_TIP_ACCOUNTS: &[Pubkey] = &[ pubkey!("96gYZGLnJYVFmbjzopPSU6QiEV5fGqZNyN9nmNhvrZU5"), pubkey!("HFqU5x63VTqvQss8hp11i4wVV8bD44PvwucfZ2bU7gRe"), pubkey!("Cw8CFyM9FkoMi7K7Crf6HNQqf4uEMzpKw6QNghXLvLkY"), pubkey!("ADaUMid9yfUytqMBgopwjb2DTLSokTSzL1zt6iGPaS49"), pubkey!("DfXygSm4jCyNCybVYYK6DwvWqjKee8pbDmJGcLWNDXjh"), pubkey!("ADuUkR4vqLUMWXxW9gh6D6L8pMSawimctcNZ5pGwDcEt"), pubkey!("DttWaMuVvTiduZRnguLF7jNxTgiMBZ1hyAumKUiL2KRL"), pubkey!("3AVi9Tg9Uo68tJfuvoKvqKNWKkC5wPdSSdeBnizKZ6jT"), ]; /// Helius Sender tip accounts (fee recipient addresses). pub const HELIUS_TIP_ACCOUNTS: &[Pubkey] = &[ pubkey!("4ACfpUFoaSD9bfPdeu6DBt89gB6ENTeHBXCAi87NhDEE"), pubkey!("D2L6yPZ2FmmmTKPgzaMKdhu6EWZcTpLy1Vhx8uvZe7NZ"), pubkey!("9bnz4RShgq1hAnLnZbP8kbgBg1kEmcJBYQq3gQbmnSta"), pubkey!("5VY91ws6B2hMmBFRsXkoAAdsPHBJwRfBht4DXox3xkwn"), pubkey!("2nyhqdwKcJZR2vcqCyrYsaPVdAnFoJjiksCXJ7hfEYgD"), pubkey!("2q5pghRs6arqVjRvT5gfgWfWcHWmw1ZuCzphgd5KfWGJ"), pubkey!("wyvPkWjVZz1M8fHQnMMCDTQDbkManefNNhweYk5WkcF"), pubkey!("3KCKozbAaF75qEU33jtzozcJ29yJuaLJTy2jFdzUY8bT"), pubkey!("4vieeGHPYPG2MmyPRcYjdiDmmhN3ww7hsFNap8pVN3Ey"), pubkey!("4TQLFNWK8AovT1gFvda5jfw2oJeRMKEmw7aH6MGBJ3or"), ]; pub const NEXTBLOCK_TIP_ACCOUNTS: &[Pubkey] = &[ pubkey!("NextbLoCkVtMGcV47JzewQdvBpLqT9TxQFozQkN98pE"), pubkey!("NexTbLoCkWykbLuB1NkjXgFWkX9oAtcoagQegygXXA2"), pubkey!("NeXTBLoCKs9F1y5PJS9CKrFNNLU1keHW71rfh7KgA1X"), pubkey!("NexTBLockJYZ7QD7p2byrUa6df8ndV2WSd8GkbWqfbb"), pubkey!("neXtBLock1LeC67jYd1QdAa32kbVeubsfPNTJC1V5At"), pubkey!("nEXTBLockYgngeRmRrjDV31mGSekVPqZoMGhQEZtPVG"), pubkey!("NEXTbLoCkB51HpLBLojQfpyVAMorm3zzKg7w9NFdqid"), pubkey!("nextBLoCkPMgmG8ZgJtABeScP35qLa2AMCNKntAP7Xc"), ]; pub const ZEROSLOT_TIP_ACCOUNTS: &[Pubkey] = &[ pubkey!("Eb2KpSC8uMt9GmzyAEm5Eb1AAAgTjRaXWFjKyFXHZxF3"), pubkey!("FCjUJZ1qozm1e8romw216qyfQMaaWKxWsuySnumVCCNe"), pubkey!("ENxTEjSQ1YabmUpXAdCgevnHQ9MHdLv8tzFiuiYJqa13"), pubkey!("6rYLG55Q9RpsPGvqdPNJs4z5WTxJVatMB8zV3WJhs5EK"), pubkey!("Cix2bHfqPcKcM233mzxbLk14kSggUUiz2A87fJtGivXr"), ]; pub const NOZOMI_TIP_ACCOUNTS: &[Pubkey] = &[ pubkey!("TEMPaMeCRFAS9EKF53Jd6KpHxgL47uWLcpFArU1Fanq"), pubkey!("noz3jAjPiHuBPqiSPkkugaJDkJscPuRhYnSpbi8UvC4"), pubkey!("noz3str9KXfpKknefHji8L1mPgimezaiUyCHYMDv1GE"), pubkey!("noz6uoYCDijhu1V7cutCpwxNiSovEwLdRHPwmgCGDNo"), pubkey!("noz9EPNcT7WH6Sou3sr3GGjHQYVkN3DNirpbvDkv9YJ"), pubkey!("nozc5yT15LazbLTFVZzoNZCwjh3yUtW86LoUyqsBu4L"), pubkey!("nozFrhfnNGoyqwVuwPAW4aaGqempx4PU6g6D9CJMv7Z"), pubkey!("nozievPk7HyK1Rqy1MPJwVQ7qQg2QoJGyP71oeDwbsu"), pubkey!("noznbgwYnBLDHu8wcQVCEw6kDrXkPdKkydGJGNXGvL7"), pubkey!("nozNVWs5N8mgzuD3qigrCG2UoKxZttxzZ85pvAQVrbP"), pubkey!("nozpEGbwx4BcGp6pvEdAh1JoC2CQGZdU6HbNP1v2p6P"), pubkey!("nozrhjhkCr3zXT3BiT4WCodYCUFeQvcdUkM7MqhKqge"), pubkey!("nozrwQtWhEdrA6W8dkbt9gnUaMs52PdAv5byipnadq3"), pubkey!("nozUacTVWub3cL4mJmGCYjKZTnE9RbdY5AP46iQgbPJ"), pubkey!("nozWCyTPppJjRuw2fpzDhhWbW355fzosWSzrrMYB1Qk"), pubkey!("nozWNju6dY353eMkMqURqwQEoM3SFgEKC6psLCSfUne"), pubkey!("nozxNBgWohjR75vdspfxR5H9ceC7XXH99xpxhVGt3Bb"), ]; pub const BLOX_TIP_ACCOUNTS: &[Pubkey] = &[ pubkey!("HWEoBxYs7ssKuudEjzjmpfJVX7Dvi7wescFsVx2L5yoY"), pubkey!("95cfoy472fcQHaw4tPGBTKpn6ZQnfEPfBgDQx6gcRmRg"), pubkey!("3UQUKjhMKaY2S6bjcQD6yHB7utcZt5bfarRCmctpRtUd"), pubkey!("FogxVNs6Mm2w9rnGL1vkARSwJxvLE8mujTv3LK8RnUhF"), ]; pub const NODE1_TIP_ACCOUNTS: &[Pubkey] = &[ pubkey!("node1PqAa3BWWzUnTHVbw8NJHC874zn9ngAkXjgWEej"), pubkey!("node1UzzTxAAeBTpfZkQPJXBAqixsbdth11ba1NXLBG"), pubkey!("node1Qm1bV4fwYnCurP8otJ9s5yrkPq7SPZ5uhj3Tsv"), pubkey!("node1PUber6SFmSQgvf2ECmXsHP5o3boRSGhvJyPMX1"), pubkey!("node1AyMbeqiVN6eoQzEAwCA6Pk826hrdqdAHR7cdJ3"), pubkey!("node1YtWCoTwwVYTFLfS19zquRQzYX332hs1HEuRBjC"), ]; pub const FLASHBLOCK_TIP_ACCOUNTS: &[Pubkey] = &[ pubkey!("FLaShB3iXXTWE1vu9wQsChUKq3HFtpMAhb8kAh1pf1wi"), pubkey!("FLashhsorBmM9dLpuq6qATawcpqk1Y2aqaZfkd48iT3W"), pubkey!("FLaSHJNm5dWYzEgnHJWWJP5ccu128Mu61NJLxUf7mUXU"), pubkey!("FLaSHR4Vv7sttd6TyDF4yR1bJyAxRwWKbohDytEMu3wL"), pubkey!("FLASHRzANfcAKDuQ3RXv9hbkBy4WVEKDzoAgxJ56DiE4"), pubkey!("FLasHstqx11M8W56zrSEqkCyhMCCpr6ze6Mjdvqope5s"), pubkey!("FLAShWTjcweNT4NSotpjpxAkwxUr2we3eXQGhpTVzRwy"), pubkey!("FLasHXTqrbNvpWFB6grN47HGZfK6pze9HLNTgbukfPSk"), pubkey!("FLAshyAyBcKb39KPxSzXcepiS8iDYUhDGwJcJDPX4g2B"), pubkey!("FLAsHZTRcf3Dy1APaz6j74ebdMC6Xx4g6i9YxjyrDybR"), ]; pub const BLOCKRAZOR_TIP_ACCOUNTS: &[Pubkey] = &[ pubkey!("FjmZZrFvhnqqb9ThCuMVnENaM3JGVuGWNyCAxRJcFpg9"), pubkey!("6No2i3aawzHsjtThw81iq1EXPJN6rh8eSJCLaYZfKDTG"), pubkey!("A9cWowVAiHe9pJfKAj3TJiN9VpbzMUq6E4kEvf5mUT22"), pubkey!("Gywj98ophM7GmkDdaWs4isqZnDdFCW7B46TXmKfvyqSm"), pubkey!("68Pwb4jS7eZATjDfhmTXgRJjCiZmw1L7Huy4HNpnxJ3o"), pubkey!("4ABhJh5rZPjv63RBJBuyWzBK3g9gWMUQdTZP2kiW31V9"), pubkey!("B2M4NG5eyZp5SBQrSdtemzk5TqVuaWGQnowGaCBt8GyM"), pubkey!("5jA59cXMKQqZAVdtopv8q3yyw9SYfiE3vUCbt7p8MfVf"), pubkey!("5YktoWygr1Bp9wiS1xtMtUki1PeYuuzuCF98tqwYxf61"), pubkey!("295Avbam4qGShBYK7E9H5Ldew4B3WyJGmgmXfiWdeeyV"), pubkey!("EDi4rSy2LZgKJX74mbLTFk4mxoTgT6F7HxxzG2HBAFyK"), pubkey!("BnGKHAC386n4Qmv9xtpBVbRaUTKixjBe3oagkPFKtoy6"), pubkey!("Dd7K2Fp7AtoN8xCghKDRmyqr5U169t48Tw5fEd3wT9mq"), pubkey!("AP6qExwrbRgBAVaehg4b5xHENX815sMabtBzUzVB4v8S"), ]; pub const ASTRALANE_TIP_ACCOUNTS: &[Pubkey] = &[ pubkey!("astrazznxsGUhWShqgNtAdfrzP2G83DzcWVJDxwV9bF"), pubkey!("astra4uejePWneqNaJKuFFA8oonqCE1sqF6b45kDMZm"), pubkey!("astra9xWY93QyfG6yM8zwsKsRodscjQ2uU2HKNL5prk"), pubkey!("astraRVUuTHjpwEVvNBeQEgwYx9w9CFyfxjYoobCZhL"), pubkey!("astraEJ2fEj8Xmy6KLG7B3VfbKfsHXhHrNdCQx7iGJK"), pubkey!("astraubkDw81n4LuutzSQ8uzHCv4BhPVhfvTcYv8SKC"), pubkey!("astraZW5GLFefxNPAatceHhYjfA1ciq9gvfEg2S47xk"), pubkey!("astrawVNP4xDBKT7rAdxrLYiTSTdqtUr63fSMduivXK"), ]; pub const STELLIUM_TIP_ACCOUNTS: &[Pubkey] = &[ pubkey!("ste11JV3MLMM7x7EJUM2sXcJC1H7F4jBLnP9a9PG8PH"), pubkey!("ste11MWPjXCRfQryCshzi86SGhuXjF4Lv6xMXD2AoSt"), pubkey!("ste11p5x8tJ53H1NbNQsRBg1YNRd4GcVpxtDw8PBpmb"), pubkey!("ste11p7e2KLYou5bwtt35H7BM6uMdo4pvioGjJXKFcN"), pubkey!("ste11TMV68LMi1BguM4RQujtbNCZvf1sjsASpqgAvSX"), ]; // Lightspeed (Solana Vibe Station) tip accounts pub const LIGHTSPEED_TIP_ACCOUNTS: &[Pubkey] = &[ pubkey!("53PhM3UTdMQWu5t81wcd35AHGc5xpmHoRjem7GQPvXjA"), pubkey!("9tYF5yPDC1NP8s6diiB3kAX6ZZnva9DM3iDwJkBRarBB"), ]; pub const SOYAS_TIP_ACCOUNTS: &[Pubkey] = &[ pubkey!("soyas4s6L8KWZ8rsSk1mF3d1mQScoTGGAgjk98bF8nP"), pubkey!("soyascXFW5wEEYiwfEmHy2pNwomqzvggJosGVD6TJdY"), pubkey!("soyasDBdKjADwPz3xk82U3TNPRDKEWJj7wWLajNHZ1L"), pubkey!("soyasE2abjBAynmHbGWgEwk4ctBy7JMTUCNrMbjcnyH"), ]; pub const SPEEDLANDING_TIP_ACCOUNTS: &[Pubkey] = &[ pubkey!("SpEEdz8S1KorkMZqjMUxfxrmWwofmp6ReNP2Nx6CUmq"), pubkey!("SpeeDy3GJM4wcrQmk1itRFWgidvxX4rwjTLMv78wwjE"), pubkey!("SPeEdva37vW8vRtqgYjprQs1g3965icfVN5Rt7SMAyh"), pubkey!("speEdrSEpox5GUfHWcBc7tQjRuSfUin2yvB7qoYvvJh"), pubkey!("SPeEDmkHkN3A2roSZf6aZyEMsmrGqTHKqwP51y2Y4rV"), pubkey!("SpeedLdTJXh2RKpXEaP8JCxkWoUVXhtdPQ1EnxBJMxc"), pubkey!("SpEediGKLbbXndSYTzwmz6Z3NDgHQLDcTDEvGFkSMH9"), pubkey!("speede8xCcUq2Tiv1efXeTuE3k9TDNq8TnGKaKSc6J4"), ]; // NewYork, // Frankfurt, // Amsterdam, // SLC, // Tokyo, // London, // LosAngeles, // Default, pub const SWQOS_ENDPOINTS_JITO: [&str; 8] = [ "https://ny.mainnet.block-engine.jito.wtf", "https://frankfurt.mainnet.block-engine.jito.wtf", "https://amsterdam.mainnet.block-engine.jito.wtf", "https://slc.mainnet.block-engine.jito.wtf", "https://tokyo.mainnet.block-engine.jito.wtf", "https://london.mainnet.block-engine.jito.wtf", "https://ny.mainnet.block-engine.jito.wtf", "https://mainnet.block-engine.jito.wtf", ]; pub const SWQOS_ENDPOINTS_NEXTBLOCK: [&str; 8] = [ "http://ny.nextblock.io", "http://frankfurt.nextblock.io", "http://amsterdam.nextblock.io", "http://slc.nextblock.io", "http://tokyo.nextblock.io", "http://london.nextblock.io", "http://singapore.nextblock.io", "http://frankfurt.nextblock.io", ]; pub const SWQOS_ENDPOINTS_ZERO_SLOT: [&str; 8] = [ "http://ny.0slot.trade", "http://de2.0slot.trade", // Use de2 for TSW, and de1 for OVH "http://ams.0slot.trade", "http://ny.0slot.trade", "http://jp.0slot.trade", "http://ams.0slot.trade", "http://la.0slot.trade", "http://de2.0slot.trade", // Use de2 for TSW, and de1 for OVH ]; pub const SWQOS_ENDPOINTS_TEMPORAL: [&str; 8] = [ "http://ewr1.nozomi.temporal.xyz", "http://fra2.nozomi.temporal.xyz", "http://ams1.nozomi.temporal.xyz", "http://ewr1.nozomi.temporal.xyz", "http://tyo1.nozomi.temporal.xyz", "http://sgp1.nozomi.temporal.xyz", "http://pit1.nozomi.temporal.xyz", "http://fra2.nozomi.temporal.xyz", ]; pub const SWQOS_ENDPOINTS_BLOX: [&str; 8] = [ "https://ny.solana.dex.blxrbdn.com", "https://germany.solana.dex.blxrbdn.com", "https://amsterdam.solana.dex.blxrbdn.com", "https://ny.solana.dex.blxrbdn.com", "https://tokyo.solana.dex.blxrbdn.com", "https://uk.solana.dex.blxrbdn.com", "https://la.solana.dex.blxrbdn.com", "https://global.solana.dex.blxrbdn.com", ]; pub const SWQOS_ENDPOINTS_NODE1: [&str; 8] = [ "http://ny.node1.me", "http://fra.node1.me", "http://ams.node1.me", "http://ny.node1.me", "http://tk.node1.me", "http://lon.node1.me", "http://ny.node1.me", "http://fra.node1.me", ]; /// Node1 QUIC: port 16666. Region order: NewYork, Frankfurt, Amsterdam, SLC→ny, Tokyo, London, LosAngeles→ny, Default→ny. /// server_name = host part (e.g. ny.node1.me). Auth: first bi stream = 16-byte UUID; each tx = new bi stream, bincode body. pub const SWQOS_ENDPOINTS_NODE1_QUIC: [&str; 8] = [ "ny.node1.me:16666", "fra.node1.me:16666", "ams.node1.me:16666", "ny.node1.me:16666", // SLC → ny "tk.node1.me:16666", "lon.node1.me:16666", "ny.node1.me:16666", // LA → ny "ny.node1.me:16666", // Default → ny ]; pub const SWQOS_ENDPOINTS_FLASHBLOCK: [&str; 8] = [ "http://ny.flashblock.trade", "http://fra.flashblock.trade", "http://ams.flashblock.trade", "http://slc.flashblock.trade", "http://singapore.flashblock.trade", "http://london.flashblock.trade", "http://ny.flashblock.trade", "http://ny.flashblock.trade", ]; /// BlockRazor Send Transaction v2: plain-text Base64 body, auth in URI, Content-Type: text/plain. Keep-alive: POST /v2/health. /// 若 HTTP 返回 500,可尝试 HTTPS:https://.solana.blockrazor.io/v2/sendTransaction(Frankfurt/NewYork/Tokyo),通过 custom_url 覆盖。 pub const SWQOS_ENDPOINTS_BLOCKRAZOR: [&str; 8] = [ "http://newyork.solana.blockrazor.xyz:443/v2/sendTransaction", "http://frankfurt.solana.blockrazor.xyz:443/v2/sendTransaction", "http://amsterdam.solana.blockrazor.xyz:443/v2/sendTransaction", "http://newyork.solana.blockrazor.xyz:443/v2/sendTransaction", "http://tokyo.solana.blockrazor.xyz:443/v2/sendTransaction", "http://london.solana.blockrazor.xyz:443/v2/sendTransaction", "http://newyork.solana.blockrazor.xyz:443/v2/sendTransaction", "http://frankfurt.solana.blockrazor.xyz:443/v2/sendTransaction", ]; /// Astralane binary API path (no Base64; use with ?api-key=...&method=sendTransaction|getHealth). pub const ASTRALANE_PATH_IRISB: &str = "irisb"; pub const SWQOS_ENDPOINTS_ASTRALANE: [&str; 8] = [ "http://ny.gateway.astralane.io/irisb", "http://fr.gateway.astralane.io/irisb", "http://ams.gateway.astralane.io/irisb", "http://ny.gateway.astralane.io/irisb", "http://jp.gateway.astralane.io/irisb", "http://ny.gateway.astralane.io/irisb", "http://lax.gateway.astralane.io/irisb", "http://lim.gateway.astralane.io/irisb", ]; /// Astralane QUIC endpoints (port 7000). Region order: NewYork, Frankfurt, Amsterdam, SLC, Tokyo, London, LosAngeles, Default. /// See: https://github.com/Astralane/astralane-quic-client. We use fr, ams, la, ny, lim, sg only (avoid ams2/fr2 for lower latency). pub const SWQOS_ENDPOINTS_ASTRALANE_QUIC: [&str; 8] = [ "ny.gateway.astralane.io:7000", // NewYork "fr.gateway.astralane.io:7000", // Frankfurt "ams.gateway.astralane.io:7000", // Amsterdam "lim.gateway.astralane.io:7000", // SLC (no slc, use lim) "sg.gateway.astralane.io:7000", // Tokyo (Asia) "ams.gateway.astralane.io:7000", // London (Europe, avoid ams2) "la.gateway.astralane.io:7000", // LosAngeles "lim.gateway.astralane.io:7000", // Default ]; pub const SWQOS_ENDPOINTS_STELLIUM: [&str; 8] = [ "http://ewr1.flashrpc.com", "http://fra1.flashrpc.com", "http://ams1.flashrpc.com", "http://ewr1.flashrpc.com", "http://tyo1.flashrpc.com", "http://lhr1.flashrpc.com", "http://ewr1.flashrpc.com", "http://fra1.flashrpc.com", ]; pub const SWQOS_ENDPOINTS_SOYAS: [&str; 8] = [ "nyc.landing.soyas.xyz:9000", "fra.landing.soyas.xyz:9000", "ams.landing.soyas.xyz:9000", "nyc.landing.soyas.xyz:9000", "tyo.landing.soyas.xyz:9000", "lon.landing.soyas.xyz:9000", "nyc.landing.soyas.xyz:9000", "fra.landing.soyas.xyz:9000", ]; pub const SWQOS_ENDPOINTS_SPEEDLANDING: [&str; 8] = [ "nyc.speedlanding.trade:17778", "fra.speedlanding.trade:17778", "ams.speedlanding.trade:17778", "nyc.speedlanding.trade:17778", "tyo.speedlanding.trade:17778", "fra.speedlanding.trade:17778", "nyc.speedlanding.trade:17778", "fra.speedlanding.trade:17778", ]; /// Helius Sender: POST /fast, dual routing to validators and Jito. API key optional (custom TPS only). /// Region order: NewYork(EWR), Frankfurt, Amsterdam, SLC, Tokyo, London, LosAngeles(SG), Default(Global). pub const SWQOS_ENDPOINTS_HELIUS: [&str; 8] = [ "http://ewr-sender.helius-rpc.com/fast", "http://fra-sender.helius-rpc.com/fast", "http://ams-sender.helius-rpc.com/fast", "http://slc-sender.helius-rpc.com/fast", "http://tyo-sender.helius-rpc.com/fast", "http://lon-sender.helius-rpc.com/fast", "http://sg-sender.helius-rpc.com/fast", "https://sender.helius-rpc.com/fast", ]; pub const SWQOS_MIN_TIP_DEFAULT: f64 = 0.00001; // 其它SWQOS默认最低小费 pub const SWQOS_MIN_TIP_JITO: f64 = 0.00001; pub const SWQOS_MIN_TIP_NEXTBLOCK: f64 = 0.001; pub const SWQOS_MIN_TIP_ZERO_SLOT: f64 = 0.0001; pub const SWQOS_MIN_TIP_TEMPORAL: f64 = 0.0001; pub const SWQOS_MIN_TIP_BLOXROUTE: f64 = 0.0001; pub const SWQOS_MIN_TIP_NODE1: f64 = 0.0001; // 如需更高阈值可调整 pub const SWQOS_MIN_TIP_FLASHBLOCK: f64 = 0.0001; pub const SWQOS_MIN_TIP_BLOCKRAZOR: f64 = 0.0001; pub const SWQOS_MIN_TIP_ASTRALANE: f64 = 0.00001; pub const SWQOS_MIN_TIP_STELLIUM: f64 = 0.0001; // Stellium requires minimum 0.001 SOL tip pub const SWQOS_MIN_TIP_LIGHTSPEED: f64 = 0.0001; // Lightspeed requires minimum 0.001 SOL tip pub const SWQOS_MIN_TIP_SOYAS: f64 = 0.001; // Soyas requires minimum 0.001 SOL tip pub const SWQOS_MIN_TIP_SPEEDLANDING: f64 = 0.001; // Speedlanding requires minimum 0.001 SOL tip /// Helius Sender: 0.0002 SOL when not swqos_only; use SWQOS_MIN_TIP_HELIUS_SWQOS_ONLY when swqos_only=true. pub const SWQOS_MIN_TIP_HELIUS: f64 = 0.0002; /// Helius Sender with swqos_only: minimum 0.000005 SOL (much lower tip allowed). pub const SWQOS_MIN_TIP_HELIUS_SWQOS_ONLY: f64 = 0.000005;