这是一个JitoShred解析PUMP交易监控与狙击框架,使用Rust开发,专注于跟踪PUMP的代币创建活动。该工具通过连接JitoShred节点获取第一手数据,实时解析交易并过滤出重要信息,特别是针对同时包含Create和Buy指令的交易进行重点监控。
感谢您的打赏,让开源更和谐. Solana打赏地址:BwPzuiSNf6bDDYuosUfCFVJUn4J3g2nMZGvBxwy42mcZ
交易构建请自行完成,该项目仅为狙击框架。
- 实时监控:直接连接Jito网络获取链上交易,提供毫秒级响应
- 精准识别:专门识别并解析PUMP、PUMP_AMM和BOOP合约的关键交易指令
- 交易过滤:特别关注同时包含Create和Buy指令的交易,迅速发现新币种创建并立即购买的机会
- 白名单机制:支持按地址过滤交易,专注监控特定目标账户的活动
- 多线程处理:采用并行架构和批处理技术,高效处理大量交易数据
项目当前重点关注以下交易类型:
- Buy - 从绑定曲线购买代币的交易
- Create - 创建新代币和绑定曲线的交易
- 同时包含Create和Buy - 特别监控创建后立即购买的交易模式
代码中的相关部分:
// 检查是否同时包含Create和Buy指令,提前过滤
let has_create = pump_tx.instructions.iter().any(|ix| matches!(ix.instruction_type, PumpInstructionType::Create));
let has_buy = pump_tx.instructions.iter().any(|ix| matches!(ix.instruction_type, PumpInstructionType::Buy));
if has_create && has_buy {
// 只有在同时满足条件时才添加结果
batch_results.push(pump_tx);
}- Rust 1.85+ - 保证高性能和内存安全
- Tokio异步运行时 - 非阻塞I/O处理
- Jito Shredstream API - 直接连接验证节点获取交易数据
- Rayon并行计算库 - 高效的多线程处理
- Once Cell - 线程安全的全局状态管理
- 批处理机制 - 优化大量交易的处理性能
src/
├── config/ # 配置管理
│ ├── mod.rs # 核心配置和常量定义
│ └── whitelist.rs # 白名单过滤实现
├── jito_protos/ # Jito网络通信协议
├── models/ # 交易解析模型
│ ├── pump_parser.rs # PUMP交易解析逻辑
│ ├── transaction.rs # 交易结果数据结构
│ └── mod.rs # 模块导出
├── services/ # 核心服务
│ ├── jito_client.rs # Jito网络连接客户端
│ ├── transaction_processor.rs # 交易处理逻辑
│ └── mod.rs # 模块导出
├── utils/ # 工具函数
│ └── mod.rs # 工具类定义
├── lib.rs # 库入口,导出公共API
└── main.rs # 程序入口
└── keypair.json # JitoShred私钥
- 连接初始化:程序启动时连接到Jito服务器,开始监控交易流
- 数据接收:从Jito网络接收原始区块数据
- 交易解析:使用并行处理解析区块中的交易
- 指令识别:识别PUMP交易的特定指令类型
- 条件过滤:筛选同时包含Create和Buy的交易
- 白名单过滤:根据配置过滤指定地址的交易
- 结果输出:将满足条件的交易以结构化形式输出
代码流程:
// 主流程调用链
fn main() -> Result<(), Error> {
let config = read_config()?;
if config.whitelist_enabled {
whitelist::init_whitelist(&config.whitelist)?;
whitelist::set_whitelist_enabled(true);
}
whitelist::print_status();
JitoClient::start(config.jito_url)
}- Rust 1.85+环境
- Jito网络API访问权限
git clone --recursive https://github.com/jito-labs/shredstream-proxy.git
cd shredstream-proxy
#启动
RUST_LOG=info cargo run --release --bin jito-shredstream-proxy -- shredstream \
--block-engine-url https://mainnet.block-engine.jito.wtf \ //
--auth-keypair keypair.json \ //jito_shred 私钥
--desired-regions amsterdam,ny \ //要接受的区域
--dest-ip-ports 127.0.0.1:8001,10.0.0.1:8001
--grpc-service-port 9999# 克隆仓库
git clone https://github.com/vnxfsc/shreds-client.git
cd shreds-client
# 编译
cargo build --release创建env.toml配置文件:
## Jito-Shred URL - 连接地址
JITO-SHRED-URL=http://45.77.55.124:9999
## 白名单配置
# 是否启用白名单过滤 (true/false)
WHITELIST-ENABLED=false
# 白名单地址列表,用逗号分隔
WHITELIST=5Hyf6srdbrrD1HLjqxcFbXJRFBHgnwoZc7aZRj8vDuk5,白名单功能通过线程安全的全局状态管理,允许精确过滤交易:
- 启用白名单时,只有白名单中的地址相关交易会被处理
- 禁用白名单时,所有交易都会被处理
- 支持运行时动态更新白名单状态
cargo run --release程序会输出符合条件的PUMP交易信息:
--------------------------------------------------------
slot: 337746422
timestamp: 1746351335
signature: 1rdxzH2DonXTnaDNJMY7M57U6E7TURmStvJP9RnbCe4HpZarKrv5adAAQheJVUKHJVYvRpHNJqfcBhUxf23fcG5
mint: 27JdqU5iDGtkwS1xBxai6LHwQNmy2tKfDQqKtoktpump
bonding_curve: 3LosWKUzxQhtwv7ytt7VXqsGLYYGLynBu5VUxVULG5eP
user: F23b8KDph9QDKacvmktWya6LQ937Z6qMzUzHuaxrnE3t
token_amount: 37589171944844
max_sol_cost: 1100000000
sol_reserves: 31089108909
token_reserves: 1035410828055156
price: 0.000000030026
name: most valuable AI
symbol: grok
uri: https://ipfs.io/ipfs/QmYYFo9WeGCSi9pKjQee6ySxUGCVnznjYQjumY2w68cMU9
creator: F23b8KDph9QDKacvmktWya6LQ937Z6qMzUzHuaxrnE3t
--------------------------------------------------------
项目中包含多项性能优化:
-
批处理交易:将交易按批次处理,每批次默认800笔
// 批处理大小 - 可以根据系统性能调整 const BATCH_SIZE: usize = 800; // 增加批处理大小以提高并行效率
-
容器预分配:预先分配合适的内存空间,减少重分配
// 预分配所有交易空间 let total_txs = entries.iter().map(|e| e.transactions.len()).sum::<usize>(); let mut all_transactions = Vec::with_capacity(total_txs);
-
并行处理:使用rayon库实现高效的并行处理
// 并行处理 all_transactions.par_chunks(BATCH_SIZE).for_each(|chunk| { // 处理当前批次的交易 });
-
局部结果收集:减少锁争用,提高并行效率
// 创建局部结果,减少锁争用 let mut batch_results = Vec::with_capacity(chunk.len() / 20); // 一次性获取锁并添加所有结果 if !batch_results.is_empty() { let mut results_lock = results.lock().unwrap(); results_lock.pump_transactions.reserve(batch_results.len()); for tx in batch_results { results_lock.add_pump_transaction(tx); } }
-
指数退避重连:网络连接中断时智能重连
// 等待一段时间后重试 sleep(retry_delay).await; // 指数退避策略,但限制最大重试间隔 retry_delay = std::cmp::min(retry_delay * 2, MAX_RETRY_DELAY);
- 交易狙击:快速发现并参与新代币创建交易
- 市场监控:实时追踪特定账户或代币的交易活动
- 风险监控:监控特定地址的异常交易行为
- 量化分析:收集交易数据用于后续分析
程序当前监控的核心合约:
// PUMP程序ID
pub const PUMP_PROGRAM_ID: &str = "6EF8rrecthR5Dkzon8Nwu78hRvfCKubJ14M5uBEwF6P";本工具仅供技术研究和合法交易使用。用户应遵守所有适用法律法规,不得用于任何违法活动。使用本工具产生的任何风险和后果由用户自行承担。