【免费下载链接】rs-clob-client
Polymarket Rust CLOB Client
rs-clob-client 是 Polymarket 推出的官方 Rust 客户端 SDK(crate 名polymarket-client-sdk),内置基于 WebSocket 的实时行情订阅能力。本教程面向新手,带你完整跑通 CLOB 订单簿的五大行情流:订单簿快照、价格变动、中间价、最新成交价,以及用户订单与成交流。只需开启ws特性,几行代码即可实时盯盘 Polymarket。
⚠️ 提示:当前仓库已归档,官方建议新项目迁移到 V2 客户端。本文介绍的核心 WebSocket 订阅模式与消息结构,对学习 Polymarket CLOB 实时接口仍有参考价值。
认识 rs-clob-client:Polymarket 官方 Rust 行情客户端
rs-clob-client 是一个异步优先的 Rust SDK,覆盖 Polymarket 的核心服务:
| 特性 | 作用 |
|---|---|
clob | 核心 CLOB 客户端:下单、行情、认证 |
ws | WebSocket 实时流:订单簿、价格、用户事件(本文主角) |
data | 持仓、成交、排行榜等数据 API |
gamma | 市场/事件发现与搜索 |
tracing | 结构化日志,方便调试 |
本项目的 WebSocket 模块位于 src/clob/ws/,客户端主入口是 src/clob/ws/client.rs,所有收到的消息都会反序列化为强类型枚举 WsMessage,包括book、price_change、last_trade_price、trade、order等 9 种事件。
五大行情流一览:先搞清楚订阅什么
在动手之前,先建立全局认知。Client提供了五个核心订阅方法(定义见 src/clob/ws/client.rs):
| # | 行情流 | 订阅方法 | 返回消息 | 需要认证 |
|---|---|---|---|---|
| 1 | 订单簿快照 | subscribe_orderbook() | BookUpdate(完整买/卖盘口) | ❌ |
| 2 | 价格变动 | subscribe_prices() | PriceChange(最优买卖价变化) | ❌ |
| 3 | 中间价 | subscribe_midpoints() | MidpointUpdate(买卖均价) | ❌ |
| 4 | 最新成交价 | subscribe_last_trade_price() | LastTradePrice | ❌ |
| 5 | 用户订单与成交 | subscribe_orders()/subscribe_trades() | OrderMessage/TradeMessage | ✅ |
- Market 频道(
/ws/market)承载前四类公开行情,无需任何凭证; - User 频道(
/ws/user)承载第五类私有事件,需要 API Key 认证。
连接端点默认为wss://ws-subscriptions-clob.polymarket.com,SDK 会自动拼接/ws/market或/ws/user后缀,见 Client::default()。
快速上手:两步启用 WebSocket 订阅
第 1 步:添加依赖并开启 ws 特性
在Cargo.toml中加入依赖(Rust 版本需 ≥ 1.88,见 Cargo.toml):
polymarket-client-sdk = { version = "0.4", features = ["ws"] }第 2 步:运行官方示例验证连通
项目自带完整的 WebSocket 示例,位于 examples/clob/ws/。最快体验方式是直接运行订单簿订阅示例:
cargo run --example websocket_orderbook --features ws跑起来后你会在终端看到持续的盘口更新日志(示例源码:examples/clob/ws/orderbook.rs)。看到 bids/asks 数量在跳动,说明实时行情流已经打通 ✅。
五大行情流逐个上手
以下示例都只需Client::default()创建客户端,再调用对应的订阅方法拿到Stream,用stream.next().await循环消费即可。
1️⃣ 订单簿快照:subscribe_orderbook
subscribe_orderbook(asset_ids)传入资产 ID 列表,返回的每条 BookUpdate 都包含当时的完整盘口:bids(买盘,价格降序)、asks(卖盘,价格升序)以及校验hash。这是维护本地订单簿副本的主力数据源。
2️⃣ 价格变动:subscribe_prices
当最优买价或卖价变化时触发PriceChange事件,消息体包含变动方向(BUY/SELL)、变动后最优买/卖价等字段。如果你只关心 Top of Book 而不在乎全量盘口,它比订单簿快照轻量得多(定义见 subscribe_prices)。
3️⃣ 中间价:subscribe_midpoints
中间价 =(最优买价 + 最优卖价) / 2,是衡量市场公允价格的常用指标。该方法内部直接复用订单簿流并本地计算(见 subscribe_midpoints),适合做估值面板或套利触发线。
4️⃣ 最新成交价:subscribe_last_trade_price
每当有真实成交发生,就推送一条LastTradePrice,含成交价、成交方向、成交数量与费率(bps)。做行情回放或"最新价"展示时用它最直观(方法定义:src/clob/ws/client.rs#L182)。
5️⃣ 用户订单与成交:需要认证的私有流
前四条流是公开数据;而你自己的订单状态和成交回报走 User 频道,必须先用 API Key 凭证认证客户端:
let credentials = Credentials::new(api_key, api_secret, api_passphrase); let client = Client::default().authenticate(credentials, address)?; let mut stream = client.subscribe_user_events(Vec::new())?;认证示例参考 examples/clob/ws/user.rs,需要设置环境变量POLYMARKET_API_KEY、POLYMARKET_API_SECRET、POLYMARKET_API_PASSPHRASE、POLYMARKET_ADDRESS。认证后subscribe_orders()能拿到订单放置/成交/撤单全生命周期事件,subscribe_trades()则只推成交回报(含 maker/taker 侧、对手订单明细)。
SDK 采用类型状态机设计:未认证的Client在编译期就调不了subscribe_orders,从根源上避免误用私有接口(见 src/clob/ws/client.rs#L428)。
订阅管理技巧:多路复用、退订与连接状态
盯盘场景中你经常会"同一资产既看盘口又看中间价",SDK 帮你做了几件省事的事:
- 自动多路复用:多个订阅方法指向同一资产时,只占一条连接、一份服务端订阅;引用计数归零才会真正退订(官方演示:examples/clob/ws/unsubscribe.rs);
- 优雅退订:调用
unsubscribe_orderbook(&asset_ids)等方法,底层 unsubscribe_and_cleanup 会在无引用时自动断开空闲频道,避免无效流量; - 连接状态可查:
is_connected()/connection_state()随时检查频道是否在线,断线重连由 SDK 内部的重连处理器自动完成,你只需继续消费 stream; - 消息按需过滤:底层 MessageInterest 位标记确保不关心的事件在解析阶段就被丢弃,高频率行情下能省不少 CPU。
新手常见问题 FAQ
Q1:订阅公开行情需要钱包或 API Key 吗?不需要。前四条流(盘口/价格/中间价/成交价)对任何人开放,Client::default()直接用。只有 User 频道(订单/成交回报)需要认证。
Q2:midpoint 是服务器算的还是本地算的?本地计算。它基于订单簿快照取最优买卖价求平均,因此订阅中间价实际会收到底层 book 消息,注意评估带宽。
Q3:能只收到部分事件类型吗?能。连接层通过 InterestTracker 追踪兴趣集合,parse_if_interested只解析你关心的event_type,未知或无效事件在批量消息中会被跳过而非报错(见 src/clob/ws/types/response.rs#L495)。
Q4:asset_id 和 market 是什么关系?一个市场(market,B256 条件 ID)通常对应多张结果代币(asset,U256 ID,如 Yes/No)。公开行情流按asset_id订阅,User 频道按market订阅。
Q5:想额外接收 best_bid_ask、新市场、市场结算事件怎么办?SDK 已封装好subscribe_best_bid_ask()、subscribe_new_markets()、subscribe_market_resolutions()(见 src/clob/ws/client.rs#L298),它们会自动开启服务端custom_feature_enabled开关,用法与其他订阅方法一致。
写在最后
用 rs-clob-client 盯盘 Polymarket 订单簿的核心路径就是:开ws特性 → 选对订阅方法 → 循环消费 stream。公开行情四条流零门槛,私有订单/成交流加一次authenticate()即可。建议先把 examples/clob/ws/orderbook.rs 跑通,再对照 src/clob/ws/types/response.rs 里的消息结构按需取数,就能搭出一个低延迟的实时行情终端了 📈。
【免费下载链接】rs-clob-client
Polymarket Rust CLOB Client
相关推荐
零门槛只读Polymarket行情:rs-clob-client未认证客户端获取订单簿与K线实战教程
零门槛只读Polymarket行情:rs clob client未认证客户端获取订单簿与K线实战教程 rs clob client 是 Polymarket 官
WuKongIM 发送积压诊断实录:5000 频道 4500 SEND/s 下的 SENDACK 停滞根因追踪
WuKongIM 发送积压诊断实录:5000 频道 4500 SEND/s 下的 SENDACK 停滞根因追踪 本文基于 WuKongIM 仓库中的诊断报告 2
如何用kraken-cli流式订阅实时行情:WebSocket流式数据实战教程
如何用kraken cli流式订阅实时行情:WebSocket流式数据实战教程 kraken cli 是首个 AI 原生的加密货币、股票、外汇与衍生品交易 CL
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考