Skip to content

Latest commit

 

History

History
370 lines (285 loc) · 9.94 KB

File metadata and controls

370 lines (285 loc) · 9.94 KB

⚡ Parser Proxy WebSocket

超低延迟 Solana DEX 事件 WebSocket 代理服务器

高性能 WebSocket 服务器,用于实时推送 Solana DEX 事件,微秒级延迟

Version License

Rust Solana WebSocket gRPC

English | 中文 | Website | Telegram | Discord


基于 sol-parser-sdk 的 Solana DEX 事件 WebSocket 代理服务器。实时监听 PumpFun, Raydium, Orca 等 DEX 交易事件,通过 WebSocket 推送给客户端。

✨ 特性

  • 🔥 超低延迟 - 基于 sol-parser-sdk 的 10-20μs 解析延迟
  • 🌐 WebSocket 实时推送 - 支持多客户端同时连接
  • 📊 多协议支持 - PumpFun, Raydium AMM V4/CLMM/CPMM, Orca Whirlpool, Meteora 等
  • 🎯 事件过滤 - 仅推送关注的事件类型
  • ⚙️ TOML 配置 - 所有参数可通过配置文件灵活调整
  • 🔄 自动重连 - 客户端断线自动清理
  • 📝 多语言客户端 - 提供 HTML, TypeScript, Python 示例

🏗️ 架构

┌─────────────────┐
│ Yellowstone gRPC│
│   (Solana RPC)  │
└────────┬────────┘
         │
         ▼
┌─────────────────┐
│ sol-parser-sdk  │
│  (10-20μs 解析) │
└────────┬────────┘
         │
         ▼
┌─────────────────┐
│  WebSocket 服务器│
│   (广播事件)     │
└────────┬────────┘
         │
         ▼
┌─────────────────────────────────────┐
│  客户端 (HTML/TS/Python/...)         │
│  (实时接收 DEX 事件)                  │
└─────────────────────────────────────┘

📦 安装

1. 克隆仓库

git clone https://github.com/0xfnzero/parser-proxy-ws.git
cd parser-proxy-ws

2. 构建项目

cargo build --release

🚀 快速开始

1. 配置服务器

编辑 config.toml 配置文件:

[server]
host = "127.0.0.1"
port = 9001

[grpc]
endpoint = "https://solana-yellowstone-grpc.publicnode.com:443"
token = ""  # 可选:填入你的 gRPC token
enable_metrics = true
enable_tls = true
connection_timeout_ms = 10000
request_timeout_ms = 30000

[protocols]
pumpfun = true
raydium_amm_v4 = true
raydium_clmm = true
orca_whirlpool = true
# ... 更多协议

[events]
pumpfun_trade = true
pumpfun_create = true
raydium_amm_v4_swap = true
# ... 更多事件类型

2. 启动服务器

方式 1: 使用启动脚本(推荐)

./start-server.sh

方式 2: 直接运行

cargo run --release

服务器将根据配置文件启动(默认 ws://127.0.0.1:9001

3. 启动客户端

方式 1: 使用启动脚本(推荐)

./start-client.sh

脚本会提示选择客户端类型:

  • HTML 客户端(浏览器可视化,自动转换 Pubkey/Signature)
  • TypeScript 客户端(终端,自动转换 Pubkey/Signature)
  • Python 客户端(终端,自动转换 Pubkey/Signature + 延迟计算)

方式 2: 手动启动

使用 HTML 客户端(推荐)

open examples/client.html

特性:

  • 自动将 Pubkey/Signature 转换为 base58 字符串
  • 实时显示延迟(gRPC → 客户端)
  • 延迟颜色标识(🟢 < 50ms, 🟡 < 100ms, 🔴 ≥ 100ms)
  • ⏸️ 暂停/恢复功能 - 点击暂停按钮可暂停事件更新,方便查看详情

使用 TypeScript 客户端

cd examples
npm install
npm start

特性:

  • 使用 @solana/web3.js 和 bs58 自动转换
  • 终端实时显示延迟(带颜色)
  • TypeScript 类型安全

使用 Python 客户端

pip3 install websockets base58
python3 examples/client.py

特性:

  • 使用 base58 库自动转换 Pubkey/Signature
  • 终端彩色延迟显示
  • 微秒级延迟计算

📊 支持的协议和事件类型

支持的 DEX 协议

协议 配置字段 说明
PumpFun protocols.pumpfun PumpFun Meme 币交易
PumpSwap protocols.pumpswap PumpSwap 交换协议
Bonk protocols.bonk Bonk 发射平台
Raydium AMM V4 protocols.raydium_amm_v4 Raydium 自动做市商 V4
Raydium CLMM protocols.raydium_clmm Raydium 集中流动性做市
Raydium CPMM protocols.raydium_cpmm Raydium 恒定乘积做市
Orca Whirlpool protocols.orca_whirlpool Orca Whirlpool 集中流动性
Meteora AMM protocols.meteora_amm Meteora 动态 AMM
Meteora DAMM protocols.meteora_damm Meteora 动态 AMM V2
Meteora DLMM protocols.meteora_dlmm Meteora 动态流动性做市

支持的事件类型

每个协议支持以下事件类型(在 [events] 配置段中启用):

  • 📈 Trade/Swap - 交易/兑换事件
  • 💧 Deposit - 添加流动性
  • 💸 Withdraw - 移除流动性
  • 🏊 Create/Initialize - 池创建/初始化

完整事件列表请参考 config.toml 文件。

🔧 配置说明

服务器配置

[server]
host = "127.0.0.1"     # WebSocket 监听地址
port = 9001             # WebSocket 监听端口

gRPC 配置

[grpc]
endpoint = "https://solana-yellowstone-grpc.publicnode.com:443"
token = ""                    # gRPC 认证 token(可选)
enable_metrics = true         # 启用性能指标
enable_tls = true             # 启用 TLS
connection_timeout_ms = 10000 # 连接超时(毫秒)
request_timeout_ms = 30000    # 请求超时(毫秒)

协议和事件过滤

通过配置文件启用/禁用特定协议和事件:

[protocols]
pumpfun = true           # 启用 PumpFun 协议
raydium_amm_v4 = false   # 禁用 Raydium AMM V4

[events]
pumpfun_trade = true     # 启用 PumpFun 交易事件
pumpfun_create = false   # 禁用 PumpFun 创建事件

注意: 至少需要启用一个协议和一个事件类型,否则服务器启动会失败

📡 WebSocket 消息格式

Pubkey 和 Signature 格式说明

服务器发送的原始数据

  • Pubkey: 32 字节数组
  • Signature: 64 字节数组
{
  "signature": [188, 230, 16, ...],  // 64 字节
  "mint": [208, 230, 16, ...],       // 32 字节
  "user": [123, 45, 67, ...]         // 32 字节
}

客户端显示格式

  • HTML/TypeScript 客户端:自动转换为 base58 字符串
    {
      "signature": "5Jb7XqKGPj8XqKGPj8XqKGPj8XqKGPj...",
      "mint": "D0e610e3f14ed2960e95230e9d74e471...",
      "user": "7xKGPj8XqKGPj8XqKGPj8XqKGPj8Xq..."
    }
  • Python 客户端:使用 base58 库自动转换

事件格式

{
  "PumpFunTrade": {
    "metadata": {
      "signature": [byte array],
      "slot": 123456,
      "block_time": 1234567890,
      "grpc_recv_us": 1234567890123456
    },
    "mint": [byte array],
    "token_amount": 1000000,
    "sol_amount": 500000,
    "is_buy": true,
    "user": [byte array],
    "virtual_sol_reserves": 1000000000,
    "virtual_token_reserves": 1000000000
  }
}

事件类型

每个事件都包含在对应的类型字段中:

  • PumpFunTrade - PumpFun 交易
  • PumpFunCreate - PumpFun 创建
  • RaydiumAmmV4Swap - Raydium AMM 交换
  • RaydiumClmmSwap - Raydium CLMM 交换
  • OrcaWhirlpoolSwap - Orca 交换

🔬 开发

项目结构

parser-proxy-ws/
├── src/
│   ├── main.rs           # 主程序入口
│   ├── config.rs         # 配置文件加载和解析
│   └── ws_server.rs      # WebSocket 服务器实现
├── examples/
│   ├── client.html       # HTML 可视化客户端
│   ├── client.ts         # TypeScript 客户端示例
│   └── client.py         # Python 客户端示例
├── sol-parser-sdk/       # Solana 解析 SDK (子模块)
├── config.toml           # 配置文件
├── Cargo.toml            # Rust 项目配置
└── README.md

运行测试

cargo test

性能监控

启动服务器时会显示性能指标:

📊 gRPC 接收时间: 1234567890 μs
⚡ 事件解析耗时: 15 μs

🎯 使用场景

  1. 交易机器人 - 实时监控 DEX 交易,执行套利策略
  2. 价格监控 - 跟踪特定代币的交易价格
  3. 新币监控 - 监听新代币创建事件
  4. 流动性分析 - 分析 DEX 流动性变化
  5. 数据分析 - 收集链上交易数据进行分析

📄 许可证

MIT License

🔗 相关项目

📞 联系方式

如有问题或建议,请提交 Issue。