币种语义
原始内存池消息要么是一个元组,如 [first_seen_time, tx],要么是单个交易对象。两种形式中,signed_actions[].action 包含的是数字资产 ID,而不是面向客户的顶层 coin 字段。
虚拟的 coin 和 coins 过滤器通过服务器当前的资产元数据解析名称。因此,客户可以用 BTC 这样的名称进行订阅,而新上市的市场不需要客户端发布或在示例中维护静态资产表。
当任意一个触碰订单的动作引用了请求的资产时,交易匹配:
| 操作 | 资产位置 |
|---|---|
order(订单) | orders[].a 或 orders[].asset |
cancel(取消) | cancels[].a 或 cancels[].asset |
cancelByCloid | cancels[].asset 或 cancels[].a |
batchModify(批量修改) | modifies[].order.a、modifies[].order.asset 或直接资产字段 |
modify(修改) | order.a、order.asset 或直接资产字段 |
twapOrder(TWAP 订单) | twap.a 或 twap.asset |
twapCancel(TWAP 取消) | a 或 asset |
匹配在交易边界上进行。如果有一个签名动作匹配,服务器会返回完整的原始交易,包括同一元组中不相关的签名动作。示例会解析一份副本进行验证,但不会修改 gRPC data 字符串;使用 --print-raw(Go 中为 -print-raw)打印该原始字符串。
--expected-asset-ids=0 是 BTC 示例使用的客户端侧断言。它不会作为 coin 过滤器的一部分发送,也不是服务器映射的来源。
配置
- 1
- 2
export GRPC_ENDPOINT="your-endpoint.hype-mainnet.quiknode.pro:10000" export AUTH_TOKEN="YOUR_QUICKNODE_TOKEN"
凭证仅从环境变量读取。请勿提交端点Token。
可运行示例
所有四个示例默认使用 coin=BTC、5 条匹配消息和 60 秒超时限制。
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
## 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)
使用一个故意不存在的币种来验证负控制:
- 1
- 2
- 3
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 秒的超时时间,即可在静默流上观察到心跳。
单元测试
测试覆盖了元组和对象根、所有支持的触碰订单动作形状、无效资产、心跳请求构造,以及证明客户端提取不会修改解析后的原始值。
- 1
- 2
- 3
- 4
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)
免责声明: 市场具有风险,投资需要谨慎。本文不构成投资建议。用户应考虑本文中的任何意见、观点或结论是否与其具体情况相符。基于此的投资风险自负。
