Solana Raydium CPMM Swap

 avatar
unknown
rust
14 days ago
1.4 kB
8
Indexable
impl From<&RaydiumCpmmSwapEvent> for TradeEventOutput {
    fn from(event: &RaydiumCpmmSwapEvent) -> Self {
    // pub input_token_mint: Pubkey,     // 输入代币的铸币地址
    // pub output_token_mint: Pubkey,    // 输出代币的铸币地址
    const SOL_MINT: &str = "So11111111111111111111111111111111111111112";

    let is_buy = event.input_token_mint.to_string() == SOL_MINT;
    let (sol_amount, token_amount, token_mint, trade_type) = if is_buy {
        (
            event.amount_in as f64,                // sol_amount
            event.amount_out as f64,               // token_amount
            event.output_token_mint.to_string(),   // token_mint
            "buy".to_string()
        )
    } else {
        (
            event.amount_out as f64,               // sol_amount
            event.amount_in as f64,                // token_amount
            event.input_token_mint.to_string(),    // token_mint
            "sell".to_string()
        )
    };
    TradeEventOutput {
        signature: event.metadata.signature.clone(),
        block_time: event.metadata.program_received_time_ms / 1000,
        slot: event.metadata.slot,
        wallet_address: event.payer.to_string(),
        actions: vec![TradeAction {
            trade_type,
            sol_amount,
            token_amount,
            token_mint,
        }],
        platform: "raydium_cpmm".to_string(),
    }
    }
}
Editor is loading...
Leave a Comment