use sol_parser_sdk::grpc::{
AccountFilter, ClientConfig, Protocol, TransactionFilter, YellowstoneGrpc,
};
use sol_parser_sdk::DexEvent;
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
let _ = rustls::crypto::ring::default_provider().install_default();
println!("🚀 Quick Test - Subscribing to ALL PumpFun events...");
let mut config: ClientConfig = ClientConfig::default();
config.enable_metrics = true;
const GRPC_ENDPOINT: &str = "https://solana-yellowstone-grpc.publicnode.com:443";
const GRPC_AUTH_TOKEN: &str =
"cd1c3642f88c86f9f8e7f15831faf9f067b997c6ac2b72c81d115e8d071af77a";
let grpc = YellowstoneGrpc::new_with_config(
GRPC_ENDPOINT.to_string(),
Some(std::env::var("GRPC_AUTH_TOKEN").unwrap_or_else(|_| GRPC_AUTH_TOKEN.to_string())),
config,
)?;
let protocols = vec![Protocol::PumpFun];
let transaction_filter = TransactionFilter::for_protocols(&protocols);
let account_filter = AccountFilter::for_protocols(&protocols);
println!("✅ Subscribing... (no event filter - will show ALL events)");
let queue = grpc
.subscribe_dex_events(
vec![transaction_filter],
vec![account_filter],
None, )
.await?;
println!("🎧 Listening for events... (waiting up to 60 seconds)\n");
let mut event_count = 0;
let start = std::time::Instant::now();
loop {
if let Some(event) = queue.pop() {
event_count += 1;
let event_type = match &event {
DexEvent::PumpFunCreate(_) => "PumpFunCreate",
DexEvent::PumpFunTrade(_) => "PumpFunTrade",
DexEvent::PumpFunBuy(_) => "PumpFunBuy",
DexEvent::PumpFunSell(_) => "PumpFunSell",
DexEvent::PumpFunMigrate(_) => "PumpFunMigrate",
_ => "Other",
};
println!("✅ Event #{}: {} (Queue: {})", event_count, event_type, queue.len());
if event_count >= 10 {
println!("\n🎉 Received {} events! Test successful!", event_count);
break;
}
} else {
tokio::task::yield_now().await;
}
if start.elapsed().as_secs() > 60 {
if event_count == 0 {
println!("⏰ Timeout: No events received in 60 seconds.");
println!(" This might indicate:");
println!(" - Network connectivity issues");
println!(" - gRPC endpoint is down");
println!(" - Very low market activity (rare)");
} else {
println!("\n✅ Received {} events in 60 seconds", event_count);
}
break;
}
}
Ok(())
}