sol-parser-sdk 0.5.3

A lightweight Rust library for real-time event streaming from Solana DEX trading programs. Supports PumpFun, PumpSwap, Bonk, and Raydium protocols with Yellowstone gRPC and ShredStream.
Documentation
use crate::core::events::{DexEvent, EventMetadata};

pub mod discriminators {
    pub const SWAP: [u8; 16] =
        [64, 198, 205, 232, 38, 8, 113, 226, 155, 167, 108, 32, 122, 76, 173, 64];
    pub const INCREASE_LIQUIDITY: [u8; 16] =
        [49, 79, 105, 212, 32, 34, 30, 84, 155, 167, 108, 32, 122, 76, 173, 64];
    pub const DECREASE_LIQUIDITY: [u8; 16] =
        [58, 222, 86, 58, 68, 50, 85, 56, 155, 167, 108, 32, 122, 76, 173, 64];
    pub const LIQUIDITY_CHANGE: [u8; 16] =
        [126, 240, 175, 206, 158, 88, 153, 107, 155, 167, 108, 32, 122, 76, 173, 64];
    pub const CONFIG_CHANGE: [u8; 16] =
        [247, 189, 7, 119, 106, 112, 95, 151, 155, 167, 108, 32, 122, 76, 173, 64];
    pub const CREATE_PERSONAL_POSITION: [u8; 16] =
        [100, 30, 87, 249, 196, 223, 154, 206, 155, 167, 108, 32, 122, 76, 173, 64];
    pub const LIQUIDITY_CALCULATE: [u8; 16] =
        [237, 112, 148, 230, 57, 84, 180, 162, 155, 167, 108, 32, 122, 76, 173, 64];
    pub const OPEN_LIMIT_ORDER: [u8; 16] =
        [106, 24, 71, 85, 57, 169, 158, 216, 155, 167, 108, 32, 122, 76, 173, 64];
    pub const INCREASE_LIMIT_ORDER: [u8; 16] =
        [11, 120, 13, 204, 199, 87, 19, 200, 155, 167, 108, 32, 122, 76, 173, 64];
    pub const DECREASE_LIMIT_ORDER: [u8; 16] =
        [70, 48, 40, 221, 219, 237, 212, 163, 155, 167, 108, 32, 122, 76, 173, 64];
    pub const SETTLE_LIMIT_ORDER: [u8; 16] =
        [88, 119, 77, 164, 125, 124, 10, 194, 155, 167, 108, 32, 122, 76, 173, 64];
    pub const UPDATE_REWARD_INFOS: [u8; 16] =
        [109, 127, 186, 78, 114, 65, 37, 236, 155, 167, 108, 32, 122, 76, 173, 64];
    pub const CREATE_POOL: [u8; 16] =
        [25, 94, 75, 47, 112, 99, 53, 63, 155, 167, 108, 32, 122, 76, 173, 64];
    pub const COLLECT_PERSONAL_FEE: [u8; 16] =
        [166, 174, 105, 192, 81, 161, 83, 105, 155, 167, 108, 32, 122, 76, 173, 64];
    pub const COLLECT_PROTOCOL_FEE: [u8; 16] =
        [206, 87, 17, 79, 45, 41, 213, 61, 155, 167, 108, 32, 122, 76, 173, 64];
}

#[inline]
pub fn parse_raydium_clmm_inner_instruction(
    discriminator: &[u8; 16],
    data: &[u8],
    metadata: EventMetadata,
) -> Option<DexEvent> {
    match discriminator {
        &discriminators::SWAP => crate::logs::raydium_clmm::parse_swap_from_data(data, metadata),
        &discriminators::INCREASE_LIQUIDITY => {
            crate::logs::raydium_clmm::parse_increase_liquidity_from_data(data, metadata)
        }
        &discriminators::DECREASE_LIQUIDITY => {
            crate::logs::raydium_clmm::parse_decrease_liquidity_from_data(data, metadata)
        }
        &discriminators::LIQUIDITY_CHANGE => {
            crate::logs::raydium_clmm::parse_liquidity_change_from_data(data, metadata)
        }
        &discriminators::CONFIG_CHANGE => {
            crate::logs::raydium_clmm::parse_config_change_from_data(data, metadata)
        }
        &discriminators::CREATE_PERSONAL_POSITION => {
            crate::logs::raydium_clmm::parse_create_personal_position_from_data(data, metadata)
        }
        &discriminators::LIQUIDITY_CALCULATE => {
            crate::logs::raydium_clmm::parse_liquidity_calculate_from_data(data, metadata)
        }
        &discriminators::OPEN_LIMIT_ORDER => {
            crate::logs::raydium_clmm::parse_open_limit_order_from_data(data, metadata)
        }
        &discriminators::INCREASE_LIMIT_ORDER => {
            crate::logs::raydium_clmm::parse_increase_limit_order_from_data(data, metadata)
        }
        &discriminators::DECREASE_LIMIT_ORDER => {
            crate::logs::raydium_clmm::parse_decrease_limit_order_from_data(data, metadata)
        }
        &discriminators::SETTLE_LIMIT_ORDER => {
            crate::logs::raydium_clmm::parse_settle_limit_order_from_data(data, metadata)
        }
        &discriminators::UPDATE_REWARD_INFOS => {
            crate::logs::raydium_clmm::parse_update_reward_infos_from_data(data, metadata)
        }
        &discriminators::CREATE_POOL => {
            crate::logs::raydium_clmm::parse_create_pool_from_data(data, metadata)
        }
        &discriminators::COLLECT_PERSONAL_FEE => {
            crate::logs::raydium_clmm::parse_collect_personal_fee_from_data(data, metadata)
        }
        &discriminators::COLLECT_PROTOCOL_FEE => {
            crate::logs::raydium_clmm::parse_collect_protocol_fee_from_data(data, metadata)
        }
        _ => None,
    }
}