原始交易池过滤

quiknode-labs 发布于 2026-07-19 阅读 13

本文介绍了原始交易池过滤的实现,通过币种名称(如BTC)过滤未确认交易。涵盖币种语义解析、配置环境变量、多种语言(JavaScript、Python、Go、Rust)的示例代码、心跳机制以及单元测试,帮助开发者高效订阅并验证交易流。

币种语义

原始内存池消息要么是一个元组,如 [first_seen_time, tx],要么是单个交易对象。两种形式中,signed_actions[].action 包含的是数字资产 ID,而不是面向客户的顶层 coin 字段。

虚拟的 coincoins 过滤器通过服务器当前的资产元数据解析名称。因此,客户可以用 BTC 这样的名称进行订阅,而新上市的市场不需要客户端发布或在示例中维护静态资产表。

当任意一个触碰订单的动作引用了请求的资产时,交易匹配:

操作 资产位置
order(订单) orders[].aorders[].asset
cancel(取消) cancels[].acancels[].asset
cancelByCloid cancels[].assetcancels[].a
batchModify(批量修改) modifies[].order.amodifies[].order.asset 或直接资产字段
modify(修改) order.aorder.asset 或直接资产字段
twapOrder(TWAP 订单) twap.atwap.asset
twapCancel(TWAP 取消) aasset

匹配在交易边界上进行。如果有一个签名动作匹配,服务器会返回完整的原始交易,包括同一元组中不相关的签名动作。示例会解析一份副本进行验证,但不会修改 gRPC data 字符串;使用 --print-raw(Go 中为 -print-raw)打印该原始字符串。

--expected-asset-ids=0 是 BTC 示例使用的客户端侧断言。它不会作为 coin 过滤器的一部分发送,也不是服务器映射的来源。

配置

export GRPC_ENDPOINT="your-endpoint.hype-mainnet.quiknode.pro:10000"
export AUTH_TOKEN="YOUR_QUICKNODE_TOKEN"

凭证仅从环境变量读取。请勿提交端点Token。

可运行示例

所有四个示例默认使用 coin=BTC、5 条匹配消息和 60 秒超时限制。

## JavaScript
node javascript/mempoolFilterExample/mempool_filter_example.js \
  --filter-field=coin --filter-values=BTC --expected-asset-ids=0

## Python
python3 python/mempoolFilterExample/mempool_filter_example.py \
  --filter-field coin --coin BTC --expected-asset-ids 0

## Go
(cd golang && go run ./mempoolFilterExample \
  -filter-field coin -coin BTC -expected-asset-ids 0)

## Rust
(cd rust && cargo run --bin mempool_filter_example -- \
  --filter-field coin --coin BTC --expected-asset-ids 0)

使用一个故意不存在的币种来验证负控制:

node javascript/mempoolFilterExample/mempool_filter_example.js \
  --filter-field=coin --filter-values=__NO_SUCH_COIN__ \
  --expect-no-match --timeout-seconds=20 --max-messages=1

在测试过滤器之前,使用 --unfiltered 确认原始流是否可用。

心跳

所有四个示例都配置了传输层的 gRPC 保活机制,并每 30 秒发送一个应用层的 Ping。它们会打印 PING timestamp=<毫秒> 和相应的 PONG timestamp=<毫秒>,以便客户区分健康的静默过滤器和断开的流。心跳响应不计入 --max-messages,也不满足正向或负向过滤器测试。

使用超过 30 秒的超时时间,即可在静默流上观察到心跳。

单元测试

测试覆盖了元组和对象根、所有支持的触碰订单动作形状、无效资产、心跳请求构造,以及证明客户端提取不会修改解析后的原始值。

node --test javascript/mempoolFilterExample/mempool_filter_example.test.js
python3 -m unittest python/mempoolFilterExample/test_mempool_filter_example.py
(cd golang && go test ./mempoolFilterExample)
(cd rust && cargo test --bin mempool_filter_example)
  • 原文链接: github.com/quiknode-labs...
  • 登链社区 AI 助手,为大家转译优秀英文文章,如有翻译不通的地方,还请包涵~

相关文章

0 条评论