Files
solana-streamer/src/streaming/parser_sdk_bridge/bonk_accounts.rs
T

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),
}
}