摘要:对照 ethereum.org 中文 WebSocket 教程与 Geth Pub/Sub:用公开 WSS 实跑 eth_subscribe(newHeads + USDT Transfer logs)。与 eth_getLogs(HTTP 拉历史)分工;只读、无私钥。

站内已有 eth_getLogs 过滤器、交易回执 Status / Logs 与 Foundry cast。本篇换角度:不讲 HTTP 拉历史区间,而讲用 WebSocket + eth_subscribe 订阅读——节点主动推送 newHeads(新块头)与 logs(匹配过滤器的新日志)。全程只读公开 WSS,不发交易、不需要私钥或测试网 ETH。

一、官方:eth_subscribe 与订阅事件形状

打开 ethereum.org 中文教程「使用 WebSocket」。文档写明:连上 WebSocket 后可用 eth_subscribe / eth_unsubscribe。调用成功会返回订阅 ID;之后收到的推送是 method: "eth_subscription" 的对象,并把该 ID 附在 params.subscription 上,方便多路订阅对照,也可用同一 ID 取消订阅。

WebSocket 订阅读:newHeads 与 logs 订阅-程序旅途
图1:ethereum.org/zh/…/using-websockets/#eth-subscribe:订阅类型、可选参数、订阅 ID、eth_subscription;简体中文,2026-10-15 实拍

二、官方:newHeads 订阅

同页 newHeads 一节:每当链上追加新块头(含重组时)会推送事件。重组时可能看到同一高度多个头,应以较晚收到的为准。示例请求:

{"jsonrpc":"2.0","id":1,"method":"eth_subscribe","params":["newHeads"]}

返回形如 result: "0x…" 的订阅 ID,随后开始推送块头字段(number / hash / parentHash / baseFeePerGas 等)。

WebSocket 订阅读:newHeads 与 logs 订阅-程序旅途
图2:ethereum.org/zh … using-websockets:newHeads 说明与 JSON-RPC 示例;简体中文,2026-10-15 实拍

三、客户端文档:Geth Pub/Sub 的 newHeads

go-ethereum「Real-time Events」对 newHeads 写得更偏实现:每次追加新头就通知;追块时若一次收到多块,可能只发最后一个;重组时订阅可能在同一高度发出多个头。请求示例与 ethereum.org 一致:params: ["newHeads"]。

WebSocket 订阅读:newHeads 与 logs 订阅-程序旅途
图3:geth.ethereum.org/docs/…/rpc/pubsub:newHeads 说明与 eth_subscribe 示例;界面英文,2026-10-15 实拍

四、本机实跑:公开 WSS 订阅读 newHeads + USDT logs

本场用公开端点 wss://ethereum.publicnode.com(只读;公共节点策略会变,遇限流可换其它公开 WSS)。脚本在本目录 ws-demo/subscribe_demo.py,依赖 websockets。订阅:

  • newHeads
  • logs:address=主网 USDT 0xdAC17F958D2ee523a2206206994597C13D831ec7,topics[0]=ERC-20 Transfer 签名 0xddf252ad…b3ef

本场实跑快照(块高、金额会变;时间约 2026-10-15 16:56 CST):

  • 订阅 ID:newHeads 0x4fe9f09a…1578;logs 0x8352d29c…83b4
  • 样例头:块 26196862 hash 0x5729a386…ed72;下一块 26196863 的 parentHash 前缀对齐上一块 hash
  • 样例日志:同块 Transfer,tx 0xe1d7232a…9cf9,logIndex 2,removed=false;raw value 240973065,USDT decimals=6 → 约 240.973065 USDT
  • eth_unsubscribe 两路均返回 true

公共节点对长时间 logs 订阅有时会推 Subscription timed out(本场 logs 在收到样例后曾出现)——生产环境应处理重连;本文只演示订阅读通路。

WebSocket 订阅读:newHeads 与 logs 订阅-程序旅途
图4:本机 Python + publicnode WSS:订阅 ID、样例 HEAD/LOG、eth_unsubscribe true;只读;2026-10-15

五、浏览器对照:同一笔的 Event Logs

把样例哈希打开 Etherscan 的 Logs 标签,应能找到与订阅推送一致的 Transfer(topic0 / 合约地址 / value)。这和站内 eth_getLogs 文是同一类数据——差别是:getLogs 拉历史区间;本篇是 WSS推送新块里的新日志。

WebSocket 订阅读:newHeads 与 logs 订阅-程序旅途
图5:etherscan.io/tx/0xe1d7232a…#eventlog:与 WSS 推送同笔;界面英文,2026-10-15 实拍

六、和 eth_getLogs 怎么分工

场景 更合适的文 本篇补充
按区间批量筛历史事件 eth_getLogs 文 HTTP 过滤器;本篇是推送
已知哈希读 Status/Logs 交易回执文 本篇不必先有哈希
命令行读存储/发测试交易 cast 文 本篇是 eth_subscribe
Python 连测试网读余额 web3.py 文 Provider 基础;本篇专讲 WSS 订阅
先认推送形状
成功订阅 → 订阅 ID;之后 method 恒为 eth_subscription。
logs 务必加过滤
至少 address 或 topics;USDT 这类高频合约不加过滤会刷爆。
只读即可
公开 WSS 不需要钱包;需要看测试网时可试用欧易 Web3(创建可填 CHENGXULVTU)。
  1. 读完 ethereum.org 中文 WebSocket 教程的 eth_subscribe / newHeads。
  2. 对本机公开 WSS 跑 ws-demo/subscribe_demo.py,对照 HEAD 链式与样例 LOG。
  3. 拿样例哈希到浏览器 Logs 核对 topic0 与 value。
  4. 买少量主网 Gas(与本文无关)可在 币安 或 欧易——本场不需要。

相关阅读

说明:配图为 2026-10-15 ethereum.org 中文 WebSocket 教程、geth Pub/Sub newHeads、本机真实 WSS 订阅读输出、Etherscan Event Logs。块高、金额、订阅超时策略会变。本文不构成投资建议。