sol_parser_sdk/logs/
mod.rs

1//! 日志解析器模块
2//!
3//! 包含所有 DEX 协议的日志解析器实现
4
5pub mod utils;
6pub mod optimized_matcher;
7pub mod raydium_launchpad;
8pub mod pumpfun;
9pub mod pump_amm;
10pub mod raydium_clmm;
11pub mod raydium_cpmm;
12pub mod raydium_amm;
13pub mod orca_whirlpool;
14pub mod meteora_amm;
15pub mod meteora_damm;
16pub mod meteora_dlmm;
17pub mod zero_copy_parser;
18pub mod perf_hints;
19
20// 导出关键的 utils 函数
21pub use utils::extract_discriminator_fast;
22pub use zero_copy_parser::parse_pumpfun_trade;
23
24// 重新导出主要解析函数
25pub use raydium_launchpad::parse_log as parse_raydium_launchpad_log;
26pub use pumpfun::parse_log as parse_pumpfun_log;
27pub use pump_amm::parse_log as parse_pump_amm_log;
28pub use raydium_clmm::parse_log as parse_raydium_clmm_log;
29pub use raydium_cpmm::parse_log as parse_raydium_cpmm_log;
30pub use raydium_amm::parse_log as parse_raydium_amm_log;
31pub use orca_whirlpool::parse_log as parse_orca_whirlpool_log;
32pub use meteora_amm::parse_log as parse_meteora_amm_log;
33pub use meteora_damm::parse_log as parse_meteora_damm_log;
34pub use meteora_dlmm::parse_log as parse_meteora_dlmm_log;
35
36// 重新导出工具函数
37pub use utils::*;
38
39use solana_sdk::{signature::Signature};
40use crate::core::events::DexEvent;
41
42/// 主日志解析入口函数
43pub fn parse_log(
44    log: &str,
45    signature: Signature,
46    slot: u64,
47    tx_index: u64,
48    block_time: Option<i64>,
49    grpc_recv_us: i64,
50    event_type_filter: Option<&crate::grpc::types::EventTypeFilter>,
51    is_created_buy: bool,
52) -> Option<DexEvent> {
53    optimized_matcher::parse_log_optimized(log, signature, slot, tx_index, block_time, grpc_recv_us, event_type_filter, is_created_buy)
54}
55
56/// 统一的日志解析入口函数(优化版本)
57pub fn parse_log_unified(
58    log: &str,
59    signature: Signature,
60    slot: u64,
61    block_time: Option<i64>,
62) -> Option<DexEvent> {
63    let grpc_recv_us = unsafe {
64        let mut ts = libc::timespec { tv_sec: 0, tv_nsec: 0 };
65        libc::clock_gettime(libc::CLOCK_REALTIME, &mut ts);
66        (ts.tv_sec as i64) * 1_000_000 + (ts.tv_nsec as i64) / 1_000
67    };
68    optimized_matcher::parse_log_optimized(log, signature, slot, 0, block_time, grpc_recv_us, None, false)
69}