SuperAPI AI 工具集

bitcoin-core-zmq

通用与其它

查看项目

更新于 10-15 17:35

技能介绍

用途:Bitcoin Core 可通过 ZeroMQ 发布事件,实现低延迟、推送式的实时集成,优于轮询 RPC。

配置:在 bitcoin.conf 中为各主题分别指定端点,例如 zmqpubrawblock=tcp://127.0.0.1:28332、zmqpubrawtx=tcp://127.0.0.1:28333、zmqpubhashblock=tcp://127.0.0.1:28334、zmqpubhashtx=tcp://127.0.0.1:28335、zmqpubsequence=tcp://127.0.0.1:28336。绑定地址可用 tcp://127.0.0.1:端口(仅本机)、tcp://0.0.0.0:端口(所有接口,需防火墙)、ipc:///tmp/socket.ipc(Unix socket)或 inproc://(仅同进程)。

主题:rawblock 为完整区块字节(新 tip 时),rawtx 为完整交易字节(内存池接纳与入块),hashblock 为 32 字节区块哈希,hashtx 为 32 字节 txid,sequence 为 txid 加状态字节。wire 上的哈希已是反转字节序(与 RPC 显示一致),十六进制编码时按收到的字节即可,再次反转将无法与 RPC 匹配。使用 assumeutxo 时,连接到后台校验链状态的 historical blocks 不发出 rawblock 和 hashblock(Core 26.0 起有文档说明)。

sequence 格式:32 字节哈希、1 字节状态('A' 内存池添加、'R' 内存池移除、'C' 区块连接、'D' 区块断开)、8 字节内存池序列号(仅 A/R)。序列号按节点重启单调递增,可用于检测丢消息。

订阅:Python 用 pyzmq,SETSUBSCRIBE 主题名后 recv_multipart 得到 topic、body 和 4 字节小端消息计数器;Node 用 zeromq 包的 Subscriber。注意 ZMQ 默认无界缓冲,慢消费者会导致内存增长,应设置 HWM(如 RCVHWM=1000)丢弃旧消息。同主题按到达顺序,跨主题顺序不保证。

常见模式:闪电节点用 rawblock 检查承诺交易确认、rawtx 找手续费提升机会、sequence 快速检测对手方广播;BTCPay Server 订阅 rawblock 与 rawtx 更新发票状态;Electrs、Fulcrum 等索引用 hashblock 触发增量更新;内存池监控订阅 sequence 维护集合。

限制:同主题同一对端按序,跨主题不保证;TCP 断开会自动重连但可能漏消息,需用序列号加 RPC 补齐。ZMQ 无内置 TLS,跨主机请用 stunnel 或 VPN。用 bitcoin-cli getzmqnotifications 可查看已配置端点。注意空主题过滤器会收到全部消息,且不要将 0.0.0.0 暴露到公网。