mcpField
D
dflow-market-data

dflow-market-data

github.com/dflowprotocol其他039 次安装3 周前更新
代码仓库

关于 dflow-market-data

用于通过 WebSocket 只读获取 Solana 现货市场数据的技能,涵盖实时报价、订单簿深度和优先费估算,并说明浏览器代理访问与订阅重连方式。

主要功能

  1. 01推送实时最优买卖报价
  2. 02提供订单簿每侧十档深度
  3. 03推送优先费估算
  4. 04支持订阅多个交易对
  5. 05说明代理转发与重连处理

适用场景

  1. 01展示 Solana 交易对实时价格
  2. 02构建订单簿深度视图
  3. 03无需轮询地监控优先费估算
  4. 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。

评论

支持 Markdown