feat(pumpswap): forward virtual quote reserve upgrade

This commit is contained in:
0xfnzero
2026-07-17 01:59:54 +08:00
parent 740838f414
commit aab0a3a143
8 changed files with 1237 additions and 13 deletions
@@ -185,7 +185,7 @@ pub(crate) fn pumpswap_pool_from_pb(p: sol_parser_sdk::core::events::PumpSwapPoo
coin_creator: p.coin_creator,
is_mayhem_mode: p.is_mayhem_mode,
is_cashback_coin: p.is_cashback_coin,
reserved: [0u8; 7],
virtual_quote_reserves: p.virtual_quote_reserves,
}
}
+52 -4
View File
@@ -43,10 +43,10 @@ mod tests {
use sol_parser_sdk::core::events::{
EventMetadata, MeteoraDlmmSwapEvent as PbDlmmSwap, OrcaWhirlpoolSwapEvent as PbOrcaSwap,
PumpFunCreateV2TokenEvent as PbPumpCreateV2, PumpFunTradeEvent as PbPumpTrade,
PumpSwapCreatePoolEvent as PbPumpSwapCreatePool, PumpSwapPool as PbPumpSwapPool,
PumpSwapPoolAccountEvent as PbPumpSwapPoolAccount,
RaydiumLaunchlabTradeEvent as PbBonkTrade, TokenInfoEvent as PbTokenInfo,
TradeDirection as PbBonkDir,
PumpSwapBuyEvent as PbPumpSwapBuy, PumpSwapCreatePoolEvent as PbPumpSwapCreatePool,
PumpSwapPool as PbPumpSwapPool, PumpSwapPoolAccountEvent as PbPumpSwapPoolAccount,
PumpSwapSellEvent as PbPumpSwapSell, RaydiumLaunchlabTradeEvent as PbBonkTrade,
TokenInfoEvent as PbTokenInfo, TradeDirection as PbBonkDir,
};
use sol_parser_sdk::DexEvent as PbDexEvent;
use solana_sdk::{pubkey::Pubkey, signature::Signature};
@@ -242,6 +242,52 @@ mod tests {
}
}
#[test]
fn converts_pumpswap_buy_boost_tail() {
let event = PbPumpSwapBuy {
virtual_quote_reserves: -123,
buyback_fee_basis_points: 11,
buyback_fee: 22,
can_boost: true,
base_supply: 33,
..Default::default()
};
let converted =
convert_parser_event(PbDexEvent::PumpSwapBuy(event), None, 999).expect("convert");
let DexEvent::PumpSwapBuyEvent(converted) = converted else {
panic!("expected PumpSwapBuyEvent");
};
assert_eq!(converted.virtual_quote_reserves, -123);
assert_eq!(converted.buyback_fee_basis_points, 11);
assert_eq!(converted.buyback_fee, 22);
assert!(converted.can_boost);
assert_eq!(converted.base_supply, 33);
}
#[test]
fn converts_pumpswap_sell_boost_tail() {
let event = PbPumpSwapSell {
virtual_quote_reserves: 123,
buyback_fee_basis_points: 44,
buyback_fee: 55,
can_boost: true,
base_supply: 66,
..Default::default()
};
let converted =
convert_parser_event(PbDexEvent::PumpSwapSell(event), None, 999).expect("convert");
let DexEvent::PumpSwapSellEvent(converted) = converted else {
panic!("expected PumpSwapSellEvent");
};
assert_eq!(converted.virtual_quote_reserves, 123);
assert_eq!(converted.buyback_fee_basis_points, 44);
assert_eq!(converted.buyback_fee, 55);
assert!(converted.can_boost);
assert_eq!(converted.base_supply, 66);
}
#[test]
fn converts_pumpswap_pool_account_cashback_flag() {
let pool_pubkey = Pubkey::new_unique();
@@ -272,6 +318,7 @@ mod tests {
coin_creator: Pubkey::new_unique(),
is_mayhem_mode: true,
is_cashback_coin: true,
virtual_quote_reserves: -777,
},
};
@@ -283,6 +330,7 @@ mod tests {
assert_eq!(st.pubkey, pool_pubkey);
assert!(st.pool.is_mayhem_mode);
assert!(st.pool.is_cashback_coin);
assert_eq!(st.pool.virtual_quote_reserves, -777);
}
_ => panic!("expected PumpSwapPoolAccountEvent"),
}
@@ -523,6 +523,11 @@ pub(crate) fn pumpswap_buy_full_from_parser(
ix_name: b.ix_name,
cashback_fee_basis_points: b.cashback_fee_basis_points,
cashback: b.cashback,
buyback_fee_basis_points: b.buyback_fee_basis_points,
buyback_fee: b.buyback_fee,
virtual_quote_reserves: b.virtual_quote_reserves,
can_boost: b.can_boost,
base_supply: b.base_supply,
is_pump_pool: b.is_pump_pool,
base_mint: b.base_mint,
quote_mint: b.quote_mint,
@@ -569,6 +574,11 @@ pub(crate) fn pumpswap_sell_full_from_parser(
coin_creator_fee: s.coin_creator_fee,
cashback_fee_basis_points: s.cashback_fee_basis_points,
cashback: s.cashback,
buyback_fee_basis_points: s.buyback_fee_basis_points,
buyback_fee: s.buyback_fee,
virtual_quote_reserves: s.virtual_quote_reserves,
can_boost: s.can_boost,
base_supply: s.base_supply,
is_pump_pool: s.is_pump_pool,
base_mint: s.base_mint,
quote_mint: s.quote_mint,