Optimize SWQOS dual fee lane submission

This commit is contained in:
0xfnzero
2026-05-19 06:21:37 +08:00
parent 05ac079d6d
commit 6dab47f8f9
9 changed files with 581 additions and 140 deletions
+29 -19
View File
@@ -212,7 +212,7 @@ pub fn is_amm_fee_recipient(pubkey: &Pubkey) -> bool {
#[inline]
pub fn is_standard_bonding_fee_recipient(pubkey: &Pubkey) -> bool {
*pubkey == global_constants::FEE_RECIPIENT || is_amm_fee_recipient(pubkey)
*pubkey == global_constants::FEE_RECIPIENT
}
#[inline]
@@ -242,11 +242,12 @@ pub fn reconcile_mayhem_mode_for_trade(
#[inline]
pub fn fee_recipient_ok_for_bonding_curve_mode(pk: &Pubkey, is_mayhem_mode: bool) -> bool {
let is_m = is_mayhem_fee_recipient(pk);
let is_amm = is_amm_fee_recipient(pk);
let is_s = is_standard_bonding_fee_recipient(pk);
if is_mayhem_mode {
!(is_s && !is_m)
is_m || (!is_s && !is_amm && *pk != Pubkey::default())
} else {
!(is_m && !is_s)
is_s || (!is_m && !is_amm && *pk != Pubkey::default())
}
}
@@ -260,18 +261,10 @@ pub fn get_mayhem_fee_recipient_meta_random() -> AccountMeta {
#[inline]
pub fn get_standard_fee_recipient_meta_random() -> AccountMeta {
const POOL: &[Pubkey] = &[
global_constants::FEE_RECIPIENT,
global_constants::PUMPFUN_AMM_FEE_1,
global_constants::PUMPFUN_AMM_FEE_2,
global_constants::PUMPFUN_AMM_FEE_3,
global_constants::PUMPFUN_AMM_FEE_4,
global_constants::PUMPFUN_AMM_FEE_5,
global_constants::PUMPFUN_AMM_FEE_6,
global_constants::PUMPFUN_AMM_FEE_7,
];
let recipient = *POOL.choose(&mut rand::rng()).unwrap_or(&global_constants::FEE_RECIPIENT);
AccountMeta { pubkey: recipient, is_signer: false, is_writable: true }
// Historical name kept for API compatibility. Do not randomize across static AMM fee
// recipients for bonding-curve buy/sell; stale AMM protocol fee accounts can fail
// Pump.fun authorization with error 6000 when Global has rotated.
AccountMeta { pubkey: global_constants::FEE_RECIPIENT, is_signer: false, is_writable: true }
}
#[inline]
@@ -707,12 +700,12 @@ mod tests {
#[test]
fn reconcile_mayhem_prefers_fee_when_log_says_true_but_fee_is_standard_pool() {
let fee = global_constants::PUMPFUN_AMM_FEE_4;
let fee = global_constants::FEE_RECIPIENT;
assert!(!reconcile_mayhem_mode_for_trade(Some(true), &fee));
}
#[test]
fn pump_fee_meta_rejects_standard_fee_when_building_mayhem_ix() {
fn pump_fee_meta_rejects_amm_fee_when_building_mayhem_ix() {
let fee = global_constants::PUMPFUN_AMM_FEE_4;
let m = pump_fun_fee_recipient_meta(fee, true);
assert!(
@@ -723,11 +716,28 @@ mod tests {
}
#[test]
fn pump_fee_meta_uses_observed_standard_fee_for_standard_ix() {
let fee = global_constants::PUMPFUN_AMM_FEE_7;
fn pump_fee_meta_uses_observed_non_amm_fee_for_standard_ix() {
let fee = Pubkey::new_unique();
let m = pump_fun_fee_recipient_meta(fee, false);
assert_eq!(m.pubkey, fee);
assert!(m.is_writable);
assert!(!m.is_signer);
}
#[test]
fn pump_fee_meta_rejects_amm_fee_for_standard_ix() {
let fee = global_constants::PUMPFUN_AMM_FEE_7;
let m = pump_fun_fee_recipient_meta(fee, false);
assert_eq!(m.pubkey, global_constants::FEE_RECIPIENT);
assert!(m.is_writable);
assert!(!m.is_signer);
}
#[test]
fn pump_fee_meta_default_standard_uses_main_fee_recipient() {
let m = pump_fun_fee_recipient_meta(Pubkey::default(), false);
assert_eq!(m.pubkey, global_constants::FEE_RECIPIENT);
assert!(m.is_writable);
assert!(!m.is_signer);
}
}