use crate::impl_unified_event;
use crate::streaming::event_parser::common::EventMetadata;
use crate::streaming::event_parser::protocols::bonk::types::{
CurveParams, MintParams, PoolStatus, TradeDirection, VestingParams,
};
use borsh::BorshDeserialize;
use serde::{Deserialize, Serialize};
use solana_sdk::pubkey::Pubkey;
#[derive(Clone, Debug, Default, PartialEq, Eq, Serialize, Deserialize, BorshDeserialize)]
pub struct BonkTradeEvent {
#[borsh(skip)]
pub metadata: EventMetadata,
pub pool_state: Pubkey,
pub total_base_sell: u64,
pub virtual_base: u64,
pub virtual_quote: u64,
pub real_base_before: u64,
pub real_quote_before: u64,
pub real_base_after: u64,
pub real_quote_after: u64,
pub amount_in: u64,
pub amount_out: u64,
pub protocol_fee: u64,
pub platform_fee: u64,
pub share_fee: u64,
pub trade_direction: TradeDirection,
pub pool_status: PoolStatus,
#[borsh(skip)]
pub minimum_amount_out: u64,
#[borsh(skip)]
pub maximum_amount_in: u64,
#[borsh(skip)]
pub share_fee_rate: u64,
#[borsh(skip)]
pub payer: Pubkey,
#[borsh(skip)]
pub user_base_token: Pubkey,
#[borsh(skip)]
pub user_quote_token: Pubkey,
#[borsh(skip)]
pub base_vault: Pubkey,
#[borsh(skip)]
pub quote_vault: Pubkey,
#[borsh(skip)]
pub base_token_mint: Pubkey,
#[borsh(skip)]
pub quote_token_mint: Pubkey,
#[borsh(skip)]
pub is_dev_create_token_trade: bool,
#[borsh(skip)]
pub is_bot: bool,
}
impl_unified_event!(
BonkTradeEvent,
pool_state,
total_base_sell,
virtual_base,
virtual_quote,
real_base_before,
real_quote_before,
real_base_after,
real_quote_after,
amount_in,
amount_out,
protocol_fee,
platform_fee,
share_fee,
trade_direction,
pool_status
);
#[derive(Clone, Debug, Default, PartialEq, Eq, Serialize, Deserialize, BorshDeserialize)]
pub struct BonkPoolCreateEvent {
#[borsh(skip)]
pub metadata: EventMetadata,
pub pool_state: Pubkey,
pub creator: Pubkey,
pub config: Pubkey,
pub base_mint_param: MintParams,
pub curve_param: CurveParams,
pub vesting_param: VestingParams,
#[borsh(skip)]
pub payer: Pubkey,
#[borsh(skip)]
pub base_mint: Pubkey,
#[borsh(skip)]
pub quote_mint: Pubkey,
#[borsh(skip)]
pub base_vault: Pubkey,
#[borsh(skip)]
pub quote_vault: Pubkey,
#[borsh(skip)]
pub global_config: Pubkey,
#[borsh(skip)]
pub platform_config: Pubkey,
}
impl_unified_event!(
BonkPoolCreateEvent,
pool_state,
creator,
config,
base_mint_param,
curve_param,
vesting_param
);
#[derive(Clone, Debug, Default, PartialEq, Eq, Serialize, Deserialize, BorshDeserialize)]
pub struct BonkMigrateToAmmEvent {
#[borsh(skip)]
pub metadata: EventMetadata,
pub base_lot_size: u64,
pub quote_lot_size: u64,
pub market_vault_signer_nonce: u8,
#[borsh(skip)]
pub payer: Pubkey,
#[borsh(skip)]
pub base_mint: Pubkey,
#[borsh(skip)]
pub quote_mint: Pubkey,
#[borsh(skip)]
pub openbook_program: Pubkey,
#[borsh(skip)]
pub market: Pubkey,
#[borsh(skip)]
pub request_queue: Pubkey,
#[borsh(skip)]
pub event_queue: Pubkey,
#[borsh(skip)]
pub bids: Pubkey,
#[borsh(skip)]
pub asks: Pubkey,
#[borsh(skip)]
pub market_vault_signer: Pubkey,
#[borsh(skip)]
pub market_base_vault: Pubkey,
#[borsh(skip)]
pub market_quote_vault: Pubkey,
#[borsh(skip)]
pub amm_program: Pubkey,
#[borsh(skip)]
pub amm_pool: Pubkey,
#[borsh(skip)]
pub amm_authority: Pubkey,
#[borsh(skip)]
pub amm_open_orders: Pubkey,
#[borsh(skip)]
pub amm_lp_mint: Pubkey,
#[borsh(skip)]
pub amm_base_vault: Pubkey,
#[borsh(skip)]
pub amm_quote_vault: Pubkey,
#[borsh(skip)]
pub amm_target_orders: Pubkey,
#[borsh(skip)]
pub amm_config: Pubkey,
#[borsh(skip)]
pub amm_create_fee_destination: Pubkey,
#[borsh(skip)]
pub authority: Pubkey,
#[borsh(skip)]
pub pool_state: Pubkey,
#[borsh(skip)]
pub global_config: Pubkey,
#[borsh(skip)]
pub base_vault: Pubkey,
#[borsh(skip)]
pub quote_vault: Pubkey,
#[borsh(skip)]
pub pool_lp_token: Pubkey,
#[borsh(skip)]
pub spl_token_program: Pubkey,
#[borsh(skip)]
pub associated_token_program: Pubkey,
#[borsh(skip)]
pub system_program: Pubkey,
#[borsh(skip)]
pub rent_program: Pubkey,
}
impl_unified_event!(
BonkMigrateToAmmEvent,
base_lot_size,
quote_lot_size,
market_vault_signer_nonce
);
#[derive(Clone, Debug, Default, PartialEq, Eq, Serialize, Deserialize, BorshDeserialize)]
pub struct BonkMigrateToCpswapEvent {
pub metadata: EventMetadata,
pub payer: Pubkey,
pub base_mint: Pubkey,
pub quote_mint: Pubkey,
pub platform_config: Pubkey,
pub cpswap_program: Pubkey,
pub cpswap_pool: Pubkey,
pub cpswap_authority: Pubkey,
pub cpswap_lp_mint: Pubkey,
pub cpswap_base_vault: Pubkey,
pub cpswap_quote_vault: Pubkey,
pub cpswap_config: Pubkey,
pub cpswap_create_pool_fee: Pubkey,
pub cpswap_observation: Pubkey,
pub lock_program: Pubkey,
pub lock_authority: Pubkey,
pub lock_lp_vault: Pubkey,
pub authority: Pubkey,
pub pool_state: Pubkey,
pub global_config: Pubkey,
pub base_vault: Pubkey,
pub quote_vault: Pubkey,
pub pool_lp_token: Pubkey,
pub base_token_program: Pubkey,
pub quote_token_program: Pubkey,
pub associated_token_program: Pubkey,
pub system_program: Pubkey,
pub rent_program: Pubkey,
pub metadata_program: Pubkey,
pub remaining_accounts: Vec<Pubkey>,
}
impl_unified_event!(BonkMigrateToCpswapEvent,);
pub mod discriminators {
pub const TRADE_EVENT: &str = "0xe445a52e51cb9a1dbddb7fd34ee661ee";
pub const POOL_CREATE_EVENT: &str = "0xe445a52e51cb9a1d97d7e20976a173ae";
pub const BUY_EXACT_IN: &[u8] = &[250, 234, 13, 123, 213, 156, 19, 236];
pub const BUY_EXACT_OUT: &[u8] = &[24, 211, 116, 40, 105, 3, 153, 56];
pub const SELL_EXACT_IN: &[u8] = &[149, 39, 222, 155, 211, 124, 152, 26];
pub const SELL_EXACT_OUT: &[u8] = &[95, 200, 71, 34, 8, 9, 11, 166];
pub const INITIALIZE: &[u8] = &[175, 175, 109, 31, 13, 152, 155, 237];
pub const MIGRATE_TO_AMM: &[u8] = &[207, 82, 192, 145, 254, 207, 145, 223];
pub const MIGRATE_TO_CP_SWAP: &[u8] = &[136, 92, 200, 103, 28, 218, 144, 140];
}