Files
solana-streamer/src/streaming/event_parser/protocols/raydium_amm_v4/events.rs
T
ysq aee8921ad5 feat: Add account event parser and protocol type definitions
- Add account event parser (account_event_parser.rs) for account-level event handling
- Introduce type definitions for pumpfun, pumpswap, raydium_amm_v4, raydium_clmm, raydium_cpmm protocols
- Enhance event processor to support account event processing alongside transactions
- Improve subscription system with separate transaction and account filters
- Optimize parser configuration using Option types for cleaner code structure
- Update examples and documentation to reflect new capabilities

Changes include:
- 6 new types.rs files for protocol-specific data structures
- Updated event processor for account, transaction, and block meta events
- Refactored subscription manager with account filtering support
- Enhanced metrics and batch processing logic
2025-08-13 23:30:59 +08:00

182 lines
5.5 KiB
Rust
Executable File

use crate::streaming::event_parser::common::EventMetadata;
use crate::{
impl_unified_event, streaming::event_parser::protocols::raydium_amm_v4::types::AmmInfo,
};
use borsh::BorshDeserialize;
use serde::{Deserialize, Serialize};
use solana_sdk::pubkey::Pubkey;
/// 交易
#[derive(Clone, Debug, Default, PartialEq, Eq, Serialize, Deserialize, BorshDeserialize)]
pub struct RaydiumAmmV4SwapEvent {
pub metadata: EventMetadata,
// base in
pub amount_in: u64,
pub minimum_amount_out: u64,
// base out
pub max_amount_in: u64,
pub amount_out: u64,
pub token_program: Pubkey,
pub amm: Pubkey,
pub amm_authority: Pubkey,
pub amm_open_orders: Pubkey,
pub amm_target_orders: Option<Pubkey>,
pub pool_coin_token_account: Pubkey,
pub pool_pc_token_account: Pubkey,
pub serum_program: Pubkey,
pub serum_market: Pubkey,
pub serum_bids: Pubkey,
pub serum_asks: Pubkey,
pub serum_event_queue: Pubkey,
pub serum_coin_vault_account: Pubkey,
pub serum_pc_vault_account: Pubkey,
pub serum_vault_signer: Pubkey,
pub user_source_token_account: Pubkey,
pub user_destination_token_account: Pubkey,
pub user_source_owner: Pubkey,
}
impl_unified_event!(RaydiumAmmV4SwapEvent,);
/// 添加流动性
#[derive(Clone, Debug, Default, PartialEq, Eq, Serialize, Deserialize, BorshDeserialize)]
pub struct RaydiumAmmV4DepositEvent {
pub metadata: EventMetadata,
pub max_coin_amount: u64,
pub max_pc_amount: u64,
pub base_side: u64,
pub token_program: Pubkey,
pub amm: Pubkey,
pub amm_authority: Pubkey,
pub amm_open_orders: Pubkey,
pub amm_target_orders: Pubkey,
pub lp_mint_address: Pubkey,
pub pool_coin_token_account: Pubkey,
pub pool_pc_token_account: Pubkey,
pub serum_market: Pubkey,
pub user_coin_token_account: Pubkey,
pub user_pc_token_account: Pubkey,
pub user_lp_token_account: Pubkey,
pub user_owner: Pubkey,
pub serum_event_queue: Pubkey,
}
impl_unified_event!(RaydiumAmmV4DepositEvent,);
/// 初始化
#[derive(Clone, Debug, Default, PartialEq, Eq, Serialize, Deserialize, BorshDeserialize)]
pub struct RaydiumAmmV4Initialize2Event {
pub metadata: EventMetadata,
pub nonce: u8,
pub open_time: u64,
pub init_pc_amount: u64,
pub init_coin_amount: u64,
pub token_program: Pubkey,
pub spl_associated_token_account: Pubkey,
pub system_program: Pubkey,
pub rent: Pubkey,
pub amm: Pubkey,
pub amm_authority: Pubkey,
pub amm_open_orders: Pubkey,
pub lp_mint: Pubkey,
pub coin_mint: Pubkey,
pub pc_mint: Pubkey,
pub pool_coin_token_account: Pubkey,
pub pool_pc_token_account: Pubkey,
pub pool_withdraw_queue: Pubkey,
pub amm_target_orders: Pubkey,
pub pool_temp_lp: Pubkey,
pub serum_program: Pubkey,
pub serum_market: Pubkey,
pub user_wallet: Pubkey,
pub user_token_coin: Pubkey,
pub user_token_pc: Pubkey,
pub user_lp_token_account: Pubkey,
}
impl_unified_event!(RaydiumAmmV4Initialize2Event,);
/// 移除流动性
#[derive(Clone, Debug, Default, PartialEq, Eq, Serialize, Deserialize, BorshDeserialize)]
pub struct RaydiumAmmV4WithdrawEvent {
pub metadata: EventMetadata,
pub amount: u64,
pub token_program: Pubkey,
pub amm: Pubkey,
pub amm_authority: Pubkey,
pub amm_open_orders: Pubkey,
pub amm_target_orders: Pubkey,
pub lp_mint_address: Pubkey,
pub pool_coin_token_account: Pubkey,
pub pool_pc_token_account: Pubkey,
pub pool_withdraw_queue: Pubkey,
pub pool_temp_lp_token_account: Pubkey,
pub serum_program: Pubkey,
pub serum_market: Pubkey,
pub serum_coin_vault_account: Pubkey,
pub serum_pc_vault_account: Pubkey,
pub serum_vault_signer: Pubkey,
pub user_lp_token_account: Pubkey,
pub user_coin_token_account: Pubkey,
pub user_pc_token_account: Pubkey,
pub user_owner: Pubkey,
pub serum_event_queue: Pubkey,
pub serum_bids: Pubkey,
pub serum_asks: Pubkey,
}
impl_unified_event!(RaydiumAmmV4WithdrawEvent,);
/// 提现
#[derive(Clone, Debug, Default, PartialEq, Eq, Serialize, Deserialize, BorshDeserialize)]
pub struct RaydiumAmmV4WithdrawPnlEvent {
pub metadata: EventMetadata,
pub token_program: Pubkey,
pub amm: Pubkey,
pub amm_config: Pubkey,
pub amm_authority: Pubkey,
pub amm_open_orders: Pubkey,
pub pool_coin_token_account: Pubkey,
pub pool_pc_token_account: Pubkey,
pub coin_pnl_token_account: Pubkey,
pub pc_pnl_token_account: Pubkey,
pub pnl_owner_account: Pubkey,
pub amm_target_orders: Pubkey,
pub serum_program: Pubkey,
pub serum_market: Pubkey,
pub serum_event_queue: Pubkey,
pub serum_coin_vault_account: Pubkey,
pub serum_pc_vault_account: Pubkey,
pub serum_vault_signer: Pubkey,
}
impl_unified_event!(RaydiumAmmV4WithdrawPnlEvent,);
/// 池信息
#[derive(Clone, Debug, Default, PartialEq, Eq, Serialize, Deserialize, BorshDeserialize)]
pub struct RaydiumAmmV4AmmInfoAccountEvent {
pub metadata: EventMetadata,
pub pubkey: String,
pub executable: bool,
pub lamports: u64,
pub owner: String,
pub rent_epoch: u64,
pub amm_info: AmmInfo,
}
impl_unified_event!(RaydiumAmmV4AmmInfoAccountEvent,);
/// 事件鉴别器常量
pub mod discriminators {
// 指令鉴别器
pub const SWAP_BASE_IN: &[u8] = &[9];
pub const SWAP_BASE_OUT: &[u8] = &[11];
pub const DEPOSIT: &[u8] = &[03];
pub const INITIALIZE2: &[u8] = &[01];
pub const WITHDRAW: &[u8] = &[04];
pub const WITHDRAW_PNL: &[u8] = &[07];
/// 池信息鉴别器
pub const AMM_INFO: &[u8] = &[6];
}