Files
2026-06-01 20:20:01 +08:00

58 lines
1.8 KiB
Rust

//! PumpFun subscription with metrics enabled.
//!
//! Usage: cargo run --example pumpfun_with_metrics --release
use solana_streamer_sdk::streaming::event_parser::protocols::pumpfun::parser::PUMPFUN_PROGRAM_ID;
use solana_streamer_sdk::streaming::event_parser::{DexEvent, Protocol};
use solana_streamer_sdk::streaming::grpc::ClientConfig;
use solana_streamer_sdk::streaming::yellowstone_grpc::{
AccountFilter, TransactionFilter, YellowstoneGrpc,
};
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
let _ = rustls::crypto::ring::default_provider().install_default();
println!("PumpFun with metrics (solana-streamer)\n");
let config = ClientConfig { enable_metrics: true, ..Default::default() };
let grpc = YellowstoneGrpc::new_with_config(
std::env::var("GRPC_ENDPOINT")
.unwrap_or_else(|_| "https://solana-yellowstone-grpc.publicnode.com:443".to_string()),
std::env::var("GRPC_AUTH_TOKEN").ok(),
config,
)?;
let transaction_filter = TransactionFilter {
account_include: vec![PUMPFUN_PROGRAM_ID.to_string()],
account_exclude: vec![],
account_required: vec![],
};
let account_filter = AccountFilter {
account: vec![],
owner: vec![PUMPFUN_PROGRAM_ID.to_string()],
filters: vec![],
};
let callback = |event: DexEvent| {
println!("Event: {:?}", event.metadata().event_type);
};
grpc.subscribe_events_immediate(
vec![Protocol::PumpFun],
None,
vec![transaction_filter],
vec![account_filter],
None,
None,
callback,
)
.await?;
println!("Press Ctrl+C to stop (metrics printed periodically)...\n");
tokio::signal::ctrl_c().await?;
grpc.stop().await;
Ok(())
}