use solana_streamer_sdk::{ match_event, streaming::{ event_parser::{ core::traits::BlockMetaEvent, protocols::{ bonk::{BonkPoolCreateEvent, BonkTradeEvent}, pumpfun::{PumpFunCreateTokenEvent, PumpFunTradeEvent}, pumpswap::{ PumpSwapBuyEvent, PumpSwapCreatePoolEvent, PumpSwapDepositEvent, PumpSwapSellEvent, PumpSwapWithdrawEvent, }, raydium_clmm::{RaydiumClmmSwapEvent, RaydiumClmmSwapV2Event}, raydium_cpmm::RaydiumCpmmSwapEvent, }, Protocol, UnifiedEvent, }, ShredStreamGrpc, YellowstoneGrpc, }, }; #[tokio::main] async fn main() -> Result<(), Box> { test_grpc().await?; // test_shreds().await?; Ok(()) } async fn test_grpc() -> Result<(), Box> { println!("正在订阅 GRPC 事件..."); let grpc = YellowstoneGrpc::new( "https://solana-yellowstone-grpc.publicnode.com:443".to_string(), None, )?; let callback = create_event_callback(); let protocols = vec![ // Protocol::PumpFun, // Protocol::PumpSwap, Protocol::Bonk, // Protocol::RaydiumCpmm, // Protocol::RaydiumClmm, ]; println!("开始监听事件,按 Ctrl+C 停止..."); grpc.subscribe_events(protocols, None, None, None, None, None, callback) .await?; Ok(()) } async fn test_shreds() -> Result<(), Box> { println!("正在订阅 ShredStream 事件..."); let shred_stream = ShredStreamGrpc::new("http://127.0.0.1:10800".to_string()).await?; let callback = create_event_callback(); let protocols = vec![ Protocol::PumpFun, Protocol::PumpSwap, Protocol::Bonk, Protocol::RaydiumCpmm, Protocol::RaydiumClmm, ]; println!("开始监听事件,按 Ctrl+C 停止..."); shred_stream .shredstream_subscribe(protocols, None, callback) .await?; Ok(()) } fn create_event_callback() -> impl Fn(Box) { |event: Box| { match_event!(event, { BlockMetaEvent => |e: BlockMetaEvent| { // println!("BlockMetaEvent: {:?}", e.slot); }, BonkPoolCreateEvent => |e: BonkPoolCreateEvent| { // println!("BonkPoolCreateEvent: {:?}", e.base_mint_param.symbol); }, BonkTradeEvent => |e: BonkTradeEvent| { println!("BonkTradeEvent: {:?}", e); }, PumpFunTradeEvent => |e: PumpFunTradeEvent| { println!("PumpFunTradeEvent: {:?}", e); }, PumpFunCreateTokenEvent => |e: PumpFunCreateTokenEvent| { println!("PumpFunCreateTokenEvent: {:?}", e); }, PumpSwapBuyEvent => |e: PumpSwapBuyEvent| { println!("Buy event: {:?}", e); }, PumpSwapSellEvent => |e: PumpSwapSellEvent| { println!("Sell event: {:?}", e); }, PumpSwapCreatePoolEvent => |e: PumpSwapCreatePoolEvent| { println!("CreatePool event: {:?}", e); }, PumpSwapDepositEvent => |e: PumpSwapDepositEvent| { println!("Deposit event: {:?}", e); }, PumpSwapWithdrawEvent => |e: PumpSwapWithdrawEvent| { println!("Withdraw event: {:?}", e); }, RaydiumCpmmSwapEvent => |e: RaydiumCpmmSwapEvent| { println!("RaydiumCpmmSwapEvent: {:?}", e); }, RaydiumClmmSwapEvent => |e: RaydiumClmmSwapEvent| { println!("RaydiumClmmSwapEvent: {:?}", e); }, RaydiumClmmSwapV2Event => |e: RaydiumClmmSwapV2Event| { println!("RaydiumClmmSwapV2Event: {:?}", e); } }); } }