carbon_pumpfun_decoder/events/
trade_event.rs1use {crate::types::Shareholder, solana_pubkey::Pubkey};
3
4#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
5#[derive(Debug, Clone, borsh::BorshSerialize, borsh::BorshDeserialize, PartialEq)]
6pub struct TradeEventEvent {
7 pub mint: Pubkey,
8 pub sol_amount: u64,
9 pub token_amount: u64,
10 pub is_buy: bool,
11 pub user: Pubkey,
12 pub timestamp: i64,
13 pub virtual_sol_reserves: u64,
14 pub virtual_token_reserves: u64,
15 pub real_sol_reserves: u64,
16 pub real_token_reserves: u64,
17 pub fee_recipient: Pubkey,
18 pub fee_basis_points: u64,
19 pub fee: u64,
20 pub creator: Pubkey,
21 pub creator_fee_basis_points: u64,
22 pub creator_fee: u64,
23 pub track_volume: bool,
24 pub total_unclaimed_tokens: u64,
25 pub total_claimed_tokens: u64,
26 pub current_sol_volume: u64,
27 pub last_update_timestamp: i64,
28 pub ix_name: String,
29 pub mayhem_mode: bool,
30 pub cashback_fee_basis_points: u64,
31 pub cashback: u64,
32 pub buyback_fee_basis_points: u64,
33 pub buyback_fee: u64,
34 pub shareholders: Vec<Shareholder>,
35 pub quote_mint: Pubkey,
36 pub quote_amount: u64,
37 pub virtual_quote_reserves: u64,
38 pub real_quote_reserves: u64,
39}
40
41impl TradeEventEvent {
42 pub fn decode(data: &[u8]) -> Option<Self> {
43 if data.len() < 8 {
44 return None;
45 }
46 let discriminator = &data[0..8];
47 if discriminator != [189, 219, 127, 211, 78, 230, 97, 238] {
48 return None;
49 }
50
51 let mut data_slice = data;
52
53 data_slice = &data_slice[8..];
54
55 borsh::BorshDeserialize::deserialize(&mut data_slice).ok()
56 }
57}