Solana Pump gRPC SDK
这是一个用于监听 Solana 链上 Pump 和 PumpAmm 程序事件的 高性能 Rust SDK。基于 yellowstone-grpc,提供简单易用的 API 来处理各种事件。
特性
- ⚡ 高性能:基于 Tokio 异步运行时,支持高并发事件处理,单连接可处理数千 TPS
- 🚀 简单易用:基于 trait 的事件处理器,只需实现感兴趣的事件处理方法
- 🔌 灵活配置:支持自定义连接超时、请求超时、承诺级别等配置
- 📦 类型安全:完整的事件类型定义,编译时类型检查
- 🎯 多程序支持:可同时订阅多个程序的事件,每个订阅独立异步处理
- 🛡️ 错误处理:完善的错误处理机制,提供详细的错误信息
- 📝 事件支持:完整支持 Pump 和 PumpAmm 程序的所有事件类型
- 🎨 事件过滤:内置事件过滤器,可选择性地处理特定类型的事件,减少不必要开销
- ⏱️ 性能监控:自动记录事件处理耗时,便于性能优化
- 🔄 连接复用:支持 keep-alive 和连接池,减少连接建立开销
支持的事件
Pump 程序 6EF8rrecthR5Dkzon8Nwu78hRvfCKubJ14M5uBEwF6P
CreateEvent / CreateV2Event:创建代币(含is_mayhem_mode标记)CompleteEvent:曲线完成TradeEvent:买卖撮合
PumpAmm 程序 pAMMBay6oceH9fJKBRHGP5D4bD4sWpmSwMn52FMfXEA
BuyEvent:买入SellEvent:卖出CreatePoolEvent:创建池
安装
从 crates.io 安装(推荐)
在你的 Cargo.toml 中添加依赖:
[]
= "0.1.0"
= { = "1.48", = ["full"] }
= "0.4"
= "0.5"
从 GitHub 安装
[]
= { = "https://github.com/vnxfsc/solana-pump-grpc-sdk" }
本地开发
[]
= { = "../solana-pump-grpc-sdk" }
然后运行:
性能特点
- 异步非阻塞:基于 Tokio 异步运行时,所有 I/O 操作都是非阻塞的,单线程可处理大量并发事件
- 零拷贝解析:使用高效的 Borsh 反序列化,最小化内存分配和拷贝
- 批量处理:单次订阅可接收多个事件,自动批量解析和处理
- 低延迟:直接监听 gRPC 流式数据,实时处理链上事件,延迟通常在毫秒级
- 高吞吐量:支持单连接处理数千 TPS(每秒交易数),多连接可线性扩展
- 资源高效:使用连接复用和 keep-alive,最小化网络开销和连接建立时间
快速开始
基本使用(使用内置日志处理器)
use ;
use ring;
async
自定义事件处理器
如果需要自定义事件处理逻辑,可以实现 EventHandler trait:
use ;
use *;
use ring;
;
async
高级配置
use ;
use Duration;
use CommitmentLevel;
// 自定义配置
let config = new
.with_connect_timeout
.with_timeout
.with_keep_alive
.with_commitment;
let client = new;
API 文档
Config
客户端配置结构体。
方法:
new(url: String) -> Self:创建新配置with_connect_timeout(timeout: Duration) -> Self:设置连接超时with_timeout(timeout: Duration) -> Self:设置请求超时with_keep_alive(keep_alive: bool) -> Self:设置是否保持连接with_commitment(commitment: CommitmentLevel) -> Self:设置承诺级别
GrpcClient
gRPC 客户端。
EventHandler
事件处理器 trait。所有方法都有默认的空实现,只需实现感兴趣的事件处理方法。
LoggingEventHandler
内置的日志事件处理器,自动将所有事件记录到日志中。
;
使用示例:
let handler = LoggingEventHandler;
client.subscribe.await?;
EventFilter 和 FilteredLoggingEventHandler
事件过滤器,用于选择性地打印特定类型的事件。
方法:
all() -> Self:启用所有事件(默认)none() -> Self:禁用所有事件pump_only() -> Self:只启用 Pump 相关事件(Create, CreateV2, Complete, Trade)pumpamm_only() -> Self:只启用 PumpAmm 相关事件(Buy, Sell, CreatePool)
使用示例:
// 使用预定义过滤器
let filter = pump_only;
let handler = new;
// 或自定义过滤器
let filter = EventFilter ;
let handler = new;
EventContext
事件上下文,包含事件发生的上下文信息。
运行示例
项目包含一个基本使用示例:
# 运行示例(无需设置环境变量)
# 或者设置日志级别
RUST_LOG=debug
项目结构
.
├── Cargo.toml
├── README.md
├── src/
│ ├── lib.rs # 库入口
│ ├── client/ # gRPC 客户端
│ │ ├── mod.rs
│ │ ├── config.rs # 配置结构
│ │ ├── handler.rs # 事件处理器 trait
│ │ └── grpc.rs # gRPC 客户端实现
│ ├── models/ # 事件模型
│ │ └── mod.rs
│ ├── parser/ # 事件解析器
│ │ ├── mod.rs
│ │ └── events.rs # EventTrait 和 discriminator 常量定义
│ └── error.rs # 错误类型
└── examples/
└── basic.rs # 基本使用示例
错误处理
SDK 使用 Result<T, Error> 类型进行错误处理。错误类型包括:
GrpcClient:gRPC 客户端错误GrpcBuilder:gRPC 客户端构建错误GrpcConnection:gRPC 连接错误TlsConfig:TLS 配置错误SubscribeError:订阅错误ParseError:事件解析错误BorshDeserialize:Borsh 反序列化错误SignatureParse:签名解析错误
依赖
tokio:异步运行时yellowstone-grpc-client:Yellowstone gRPC 客户端borsh:Borsh 序列化/反序列化solana-sdk:Solana SDKthiserror:错误处理
许可证
MIT
参考
- Crates.io - 在 crates.io 上查看
- 文档 - 完整 API 文档
- GitHub - 源代码和问题追踪
- Pump 官方文档
- Yellowstone gRPC