Skip to main content

sol_parser_sdk/logs/
mod.rs

1//! Log parser module
2//!
3//! Contains log parsers for all DEX protocols
4
5// Allow dead code for fallback text parsers (kept for future use)
6#![allow(dead_code)]
7#![allow(unused_imports)]
8#![allow(unused_variables)]
9
10pub mod discriminator_lut;
11pub mod meteora_amm;
12pub mod meteora_damm;
13pub mod meteora_dlmm;
14pub mod optimized_matcher;
15pub mod orca_whirlpool;
16pub mod perf_hints;
17pub mod pump;
18pub mod pump_amm;
19pub mod raydium_amm;
20pub mod raydium_clmm;
21pub mod raydium_cpmm;
22pub mod raydium_launchpad;
23pub mod utils;
24pub mod zero_copy_parser;
25
26// 导出关键的 utils 函数
27pub use discriminator_lut::{
28    discriminator_to_name, discriminator_to_protocol, lookup_discriminator,
29    parse_with_discriminator,
30};
31pub use utils::extract_discriminator_fast;
32pub use zero_copy_parser::parse_pumpfun_trade;
33
34// 重新导出主要解析函数
35pub use meteora_amm::parse_log as parse_meteora_amm_log;
36pub use meteora_damm::parse_log as parse_meteora_damm_log;
37pub use meteora_dlmm::parse_log as parse_meteora_dlmm_log;
38pub use orca_whirlpool::parse_log as parse_orca_whirlpool_log;
39pub use pump::parse_log as parse_pumpfun_log;
40pub use pump_amm::parse_log as parse_pump_amm_log;
41pub use raydium_amm::parse_log as parse_raydium_amm_log;
42pub use raydium_clmm::parse_log as parse_raydium_clmm_log;
43pub use raydium_cpmm::parse_log as parse_raydium_cpmm_log;
44pub use raydium_launchpad::parse_log as parse_raydium_launchpad_log;
45
46// 重新导出工具函数
47pub use utils::*;
48
49use crate::core::clock::now_us;
50use crate::core::events::DexEvent;
51use solana_sdk::signature::Signature;
52
53/// 主日志解析入口函数
54#[inline(always)] // 零延迟优化:内联热路径
55/// `recent_blockhash`: pass as `Some(&buf)` so it is only cloned when an event is produced (not per log line).
56pub fn parse_log(
57    log: &str,
58    signature: Signature,
59    slot: u64,
60    tx_index: u64,
61    block_time_us: Option<i64>,
62    grpc_recv_us: i64,
63    event_type_filter: Option<&crate::grpc::types::EventTypeFilter>,
64    is_created_buy: bool,
65    recent_blockhash: Option<&[u8]>,
66) -> Option<DexEvent> {
67    optimized_matcher::parse_log_optimized(
68        log,
69        signature,
70        slot,
71        tx_index,
72        block_time_us,
73        grpc_recv_us,
74        event_type_filter,
75        is_created_buy,
76        recent_blockhash,
77    )
78}
79
80/// 统一的日志解析入口函数(优化版本)
81#[inline(always)] // 零延迟优化:内联热路径
82pub fn parse_log_unified(
83    log: &str,
84    signature: Signature,
85    slot: u64,
86    block_time_us: Option<i64>,
87) -> Option<DexEvent> {
88    let grpc_recv_us = now_us();
89    optimized_matcher::parse_log_optimized(
90        log,
91        signature,
92        slot,
93        0,
94        block_time_us,
95        grpc_recv_us,
96        None,
97        false,
98        None,
99    )
100}