mirror of
https://github.com/0xfnzero/solana-streamer.git
synced 2026-08-16 18:38:05 +00:00
221 lines
7.1 KiB
Rust
221 lines
7.1 KiB
Rust
//! Bonk plus Token / Nonce / PumpSwap account event mapping.
|
|
use crate::streaming::event_parser::common::EventMetadata;
|
|
use crate::streaming::event_parser::core::account_event_parser::{
|
|
NonceAccountEvent, TokenAccountEvent, TokenInfoEvent,
|
|
};
|
|
use crate::streaming::event_parser::protocols::bonk::events::{
|
|
BonkMigrateToAmmEvent, BonkPoolCreateEvent, BonkTradeEvent,
|
|
};
|
|
use crate::streaming::event_parser::protocols::bonk::types::{
|
|
CurveParams, MintParams, PoolStatus, TradeDirection as BonkTradeDirection, VestingParams,
|
|
};
|
|
use crate::streaming::event_parser::protocols::pumpswap::events::{
|
|
PumpSwapGlobalConfigAccountEvent, PumpSwapPoolAccountEvent,
|
|
};
|
|
use crate::streaming::event_parser::protocols::pumpswap::types::{GlobalConfig, Pool};
|
|
use sol_parser_sdk::core::events::{
|
|
RaydiumLaunchlabTradeEvent as PbBonkTrade, TradeDirection as PbBonkTradeDirection,
|
|
};
|
|
use solana_sdk::pubkey::Pubkey;
|
|
|
|
#[inline]
|
|
pub(crate) fn pb_bonk_trade_direction(d: PbBonkTradeDirection) -> BonkTradeDirection {
|
|
match d {
|
|
PbBonkTradeDirection::Buy => BonkTradeDirection::Buy,
|
|
PbBonkTradeDirection::Sell => BonkTradeDirection::Sell,
|
|
}
|
|
}
|
|
|
|
/// Align SDK Bonk trades with the four native Bonk trade instruction variants.
|
|
#[inline]
|
|
pub(crate) fn sdk_bonk_trade_event_type(
|
|
b: &PbBonkTrade,
|
|
) -> crate::streaming::event_parser::common::types::EventType {
|
|
use crate::streaming::event_parser::common::types::EventType;
|
|
match (&b.trade_direction, b.exact_in) {
|
|
(&PbBonkTradeDirection::Buy, true) => EventType::BonkBuyExactIn,
|
|
(&PbBonkTradeDirection::Buy, false) => EventType::BonkBuyExactOut,
|
|
(&PbBonkTradeDirection::Sell, true) => EventType::BonkSellExactIn,
|
|
(&PbBonkTradeDirection::Sell, false) => EventType::BonkSellExactOut,
|
|
}
|
|
}
|
|
|
|
/// SDK Bonk trade events do not expose reserves or fee rates; keep those fields at streamer
|
|
/// defaults.
|
|
pub(crate) fn bonk_trade_from_parser(
|
|
b: sol_parser_sdk::core::events::RaydiumLaunchlabTradeEvent,
|
|
meta: EventMetadata,
|
|
) -> BonkTradeEvent {
|
|
BonkTradeEvent {
|
|
metadata: meta,
|
|
pool_state: b.pool_state,
|
|
total_base_sell: 0,
|
|
virtual_base: 0,
|
|
virtual_quote: 0,
|
|
real_base_before: 0,
|
|
real_quote_before: 0,
|
|
real_base_after: 0,
|
|
real_quote_after: 0,
|
|
amount_in: b.amount_in,
|
|
amount_out: b.amount_out,
|
|
protocol_fee: 0,
|
|
platform_fee: 0,
|
|
creator_fee: 0,
|
|
share_fee: 0,
|
|
trade_direction: pb_bonk_trade_direction(b.trade_direction),
|
|
pool_status: PoolStatus::Trade,
|
|
exact_in: b.exact_in,
|
|
payer: b.user,
|
|
..Default::default()
|
|
}
|
|
}
|
|
|
|
pub(crate) fn bonk_pool_create_from_parser(
|
|
p: sol_parser_sdk::core::events::RaydiumLaunchlabPoolCreateEvent,
|
|
meta: EventMetadata,
|
|
) -> BonkPoolCreateEvent {
|
|
BonkPoolCreateEvent {
|
|
metadata: meta,
|
|
pool_state: p.pool_state,
|
|
creator: p.creator,
|
|
config: Pubkey::default(),
|
|
base_mint_param: MintParams {
|
|
decimals: p.base_mint_param.decimals,
|
|
name: p.base_mint_param.name.clone(),
|
|
symbol: p.base_mint_param.symbol.clone(),
|
|
uri: p.base_mint_param.uri.clone(),
|
|
},
|
|
curve_param: CurveParams::default(),
|
|
vesting_param: VestingParams::default(),
|
|
amm_fee_on: None,
|
|
..Default::default()
|
|
}
|
|
}
|
|
|
|
pub(crate) fn bonk_migrate_to_amm_from_parser(
|
|
m: sol_parser_sdk::core::events::RaydiumLaunchlabMigrateAmmEvent,
|
|
meta: EventMetadata,
|
|
) -> BonkMigrateToAmmEvent {
|
|
BonkMigrateToAmmEvent {
|
|
metadata: meta,
|
|
payer: m.user,
|
|
pool_state: m.old_pool,
|
|
amm_pool: m.new_pool,
|
|
..Default::default()
|
|
}
|
|
}
|
|
|
|
pub(crate) fn token_account_from_parser(
|
|
e: sol_parser_sdk::core::events::TokenAccountEvent,
|
|
meta: EventMetadata,
|
|
) -> TokenAccountEvent {
|
|
TokenAccountEvent {
|
|
metadata: meta,
|
|
pubkey: e.pubkey,
|
|
executable: e.executable,
|
|
lamports: e.lamports,
|
|
owner: e.owner,
|
|
rent_epoch: e.rent_epoch,
|
|
amount: e.amount,
|
|
token_owner: e.token_owner,
|
|
}
|
|
}
|
|
|
|
pub(crate) fn token_info_from_parser(
|
|
e: sol_parser_sdk::core::events::TokenInfoEvent,
|
|
meta: EventMetadata,
|
|
) -> TokenInfoEvent {
|
|
TokenInfoEvent {
|
|
metadata: meta,
|
|
pubkey: e.pubkey,
|
|
executable: e.executable,
|
|
lamports: e.lamports,
|
|
owner: e.owner,
|
|
rent_epoch: e.rent_epoch,
|
|
supply: e.supply,
|
|
decimals: e.decimals,
|
|
}
|
|
}
|
|
|
|
pub(crate) fn nonce_account_from_parser(
|
|
e: sol_parser_sdk::core::events::NonceAccountEvent,
|
|
meta: EventMetadata,
|
|
) -> NonceAccountEvent {
|
|
NonceAccountEvent {
|
|
metadata: meta,
|
|
pubkey: e.pubkey,
|
|
executable: e.executable,
|
|
lamports: e.lamports,
|
|
owner: e.owner,
|
|
rent_epoch: e.rent_epoch,
|
|
nonce: e.nonce,
|
|
authority: e.authority,
|
|
}
|
|
}
|
|
|
|
pub(crate) fn pumpswap_global_config_from_pb(
|
|
g: sol_parser_sdk::core::events::PumpSwapGlobalConfig,
|
|
) -> GlobalConfig {
|
|
GlobalConfig {
|
|
admin: g.admin,
|
|
lp_fee_basis_points: g.lp_fee_basis_points,
|
|
protocol_fee_basis_points: g.protocol_fee_basis_points,
|
|
disable_flags: g.disable_flags,
|
|
protocol_fee_recipients: g.protocol_fee_recipients,
|
|
coin_creator_fee_basis_points: g.coin_creator_fee_basis_points,
|
|
admin_set_coin_creator_authority: g.admin_set_coin_creator_authority,
|
|
whitelist_pda: g.whitelist_pda,
|
|
reserved_fee_recipient: g.reserved_fee_recipient,
|
|
mayhem_mode_enabled: g.mayhem_mode_enabled,
|
|
reserved_fee_recipients: g.reserved_fee_recipients,
|
|
}
|
|
}
|
|
|
|
pub(crate) fn pumpswap_pool_from_pb(p: sol_parser_sdk::core::events::PumpSwapPool) -> Pool {
|
|
Pool {
|
|
pool_bump: p.pool_bump,
|
|
index: p.index,
|
|
creator: p.creator,
|
|
base_mint: p.base_mint,
|
|
quote_mint: p.quote_mint,
|
|
lp_mint: p.lp_mint,
|
|
pool_base_token_account: p.pool_base_token_account,
|
|
pool_quote_token_account: p.pool_quote_token_account,
|
|
lp_supply: p.lp_supply,
|
|
coin_creator: p.coin_creator,
|
|
is_mayhem_mode: p.is_mayhem_mode,
|
|
is_cashback_coin: p.is_cashback_coin,
|
|
virtual_quote_reserves: p.virtual_quote_reserves,
|
|
}
|
|
}
|
|
|
|
pub(crate) fn pumpswap_global_config_account_from_parser(
|
|
e: sol_parser_sdk::core::events::PumpSwapGlobalConfigAccountEvent,
|
|
meta: EventMetadata,
|
|
) -> PumpSwapGlobalConfigAccountEvent {
|
|
PumpSwapGlobalConfigAccountEvent {
|
|
metadata: meta,
|
|
pubkey: e.pubkey,
|
|
executable: e.executable,
|
|
lamports: e.lamports,
|
|
owner: e.owner,
|
|
rent_epoch: e.rent_epoch,
|
|
global_config: pumpswap_global_config_from_pb(e.global_config),
|
|
}
|
|
}
|
|
|
|
pub(crate) fn pumpswap_pool_account_from_parser(
|
|
e: sol_parser_sdk::core::events::PumpSwapPoolAccountEvent,
|
|
meta: EventMetadata,
|
|
) -> PumpSwapPoolAccountEvent {
|
|
PumpSwapPoolAccountEvent {
|
|
metadata: meta,
|
|
pubkey: e.pubkey,
|
|
executable: e.executable,
|
|
lamports: e.lamports,
|
|
owner: e.owner,
|
|
rent_epoch: e.rent_epoch,
|
|
pool: pumpswap_pool_from_pb(e.pool),
|
|
}
|
|
}
|