关于 dflow-market-data
用于通过 WebSocket 只读获取 Solana 现货市场数据的技能,涵盖实时报价、订单簿深度和优先费估算,并说明浏览器代理访问与订阅重连方式。
主要功能
- 01推送实时最优买卖报价
- 02提供订单簿每侧十档深度
- 03推送优先费估算
- 04支持订阅多个交易对
- 05说明代理转发与重连处理
适用场景
- 01展示 Solana 交易对实时价格
- 02构建订单簿深度视图
- 03无需轮询地监控优先费估算
- 04通过后端向浏览器转发数据流
MCP 相关
该技能将 DFlow docs MCP 指定为数据流消息结构的参考,并要求在实现数据流前通过它加载相应文档。
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ dflowprotocol/ dflow-skills --skill dflow-market-data安装后在 Claude Code 中输入/dflow-market-data确认已加载。
详细介绍
DFlow 市场数据(流式)
通过 WebSocket 获取 Solana 现货交易对的实时市场数据。只读:此流会传输价格、深度和手续费估算,供展示和分析。要执行交换,请使用 dflow-spot-trading。
三种数据流
它们都是 DFlow Trade API WebSocket 主机上的路径(生产环境 wss://quote-api.dflow.net,开发环境 wss://dev-quote-api.dflow.net)。使用一个连接;按交易对订阅。
| 数据流 | 路径 | 提供内容 |
|---|---|---|
| 报价 | /quote-stream | 交易对的实时最优买价/卖价 |
| 订单簿 | /book-stream | 每侧十档深度 |
| 优先费 | /priority-fees/stream | 实时优先费估算(无需轮询) |
将密钥保存在后端(代理数据流)
作为安全最佳实践,请将 DFlow API 密钥保存在后端,而不是放在任何人都能读取的浏览器代码中。通过持有密钥、连接 DFlow 并将消息转发给浏览器的后端代理来传输数据流。
服务端应用(Node/CLI,无浏览器)本身就是可信的后端,因此会在 x-api-key 标头中携带密钥直接连接。
// Backend relay (Node, `ws`). The browser connects to THIS; the backend holds the key.
import { WebSocketServer, WebSocket } from "ws";
const wss = new WebSocketServer({ server }); // same origin as your app
wss.on("connection", (client) => {
const up = new WebSocket(`${process.env.DFLOW_TRADE_API_WS_URL}/book-stream`,
{ headers: { "x-api-key": process.env.DFLOW_API_KEY } });
const q = [];
up.on("open", () => { q.forEach((m) => up.send(m)); q.length = 0; });
up.on("message", (d) => client.readyState === 1 && client.send(d.toString()));
client.on("message", (m) => up.readyState === 1 ? up.send(m.toString()) : q.push(m.toString()));
client.on("close", () => up.close()); up.on("close", () => client.close());
});
先决条件
- DFlow docs MCP(
https://pond.dflow.net/mcp):此技能提供操作方法;MCP 提供参考资料。在接入特定数据流之前,使用search_d_flow/query_docs_filesystem_d_flow加载其消息架构页面:/resources/trading-api/websockets/{overview,quote-stream,book-stream,priority-fees-stream}。不要猜测字段名称。 - 一个 DFlow API 密钥(参见“需要询问的内容”)。
在生产环境中,报价和订单簿数据流的访问权限按密钥授予:可用于
/order的密钥可能需要启用数据流访问权限,因此即使密钥有效,在团队启用权限之前,仍可能无法访问数据流。优先费数据流不受此限制。
订阅并处理帧(报价和订单簿)
- 订阅:
{ "op": "subscribe", "base_mint": "<mint>", "quote_mint": "<mint>" },使用 base58 铸币地址,而不是代币符号。unsubscribe与之对应。一个连接可以复用来处理多个交易对。 - 帧按 slot 批量发送:
{ u: <slot>, ts, updates: [ { sb, sq, ... } ] }。updates[]中的每个条目都由其主题铸币地址(sb/sq)标识;每个交易对的错误会以内联形式{ e: <code>, sb, sq }到达,应单独处理,不要断开整个数据流。加载数据流的文档页面,以了解各档位字段的确切信息(b/a、mid、tick、cumulative_size_human等)。 - **重新连接并重新订阅。**WebSocket 可能会断开;重新打开连接后,使用退避机制重新发送所有订阅。跟踪 slot
u(以及skipped;数据流正常跟上时该值为 0),以检测数据缺口。
优先费数据流
优先费数据流的工作方式与报价和订单簿不同:无需发送订阅消息,连接后直接读取即可。每条消息都是扁平的 { mediumMicroLamports, highMicroLamports, veryHighMicroLamports } 对象(与 GET /priority-fees 的结构相同),且此数据流不受访问限制。详情:通过 docs MCP 加载 /resources/trading-api/websockets/priority-fees-stream。
注意事项:明确预期
订单簿和报价档位都是近似值:订单簿仅包含直接路由(10 档);报价包含直接路由和一跳路由,基于约 10 USDC 的往返交易计算。它们可能与交易时实际的 /order 报价不同。不要将其描述为交易所级别的订单簿,也不要将其视为可执行价格。若要了解用户实际能获得的价格,请查询 /order(参见 dflow-spot-trading)。
需要询问的内容
- **API 密钥。**中性地询问:“您有 DFlow API 密钥吗?” DFlow 的所有服务共用一个密钥(REST API 和 WebSocket 数据流使用相同的
x-api-key)。有:生产环境wss://quote-api.dflow.net。没有:开发环境wss://dev-quote-api.dflow.net(受速率限制,仅供测试)。生产环境密钥:https://pond.dflow.net/get-started/api-key。 - **运行环境。**浏览器还是服务端?浏览器应用通过其后端代理(见上文);服务端应用使用标头直接连接。
遇到不适用的情况
各流的消息架构、ping/keepalive、优先费字段:参阅 docs MCP(/resources/trading-api/websockets/*)。可运行的参考示例:DFlow 订单簿可视化演示(完整的 /book-stream 和代理构建),以及文档教程 /spot/recipes/stream-order-book 和 /spot/recipes/stream-quotes。
相关技能
dflow-spot-trading:执行兑换,或收取构建平台费用。“显示实时价格 / 订单簿 / 深度”的任务属于此处;“买入 / 兑换 / 转换”的任务应归入dflow-spot-trading。