WebSocket 订阅读:newHeads 与 logs 订阅
摘要:对照 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 取消订阅。

二、官方:newHeads 订阅
同页 newHeads 一节:每当链上追加新块头(含重组时)会推送事件。重组时可能看到同一高度多个头,应以较晚收到的为准。示例请求:
{"jsonrpc":"2.0","id":1,"method":"eth_subscribe","params":["newHeads"]}
返回形如 result: "0x…" 的订阅 ID,随后开始推送块头字段(number / hash / parentHash / baseFeePerGas 等)。

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

四、本机实跑:公开 WSS 订阅读 newHeads + USDT logs
本场用公开端点 wss://ethereum.publicnode.com(只读;公共节点策略会变,遇限流可换其它公开 WSS)。脚本在本目录 ws-demo/subscribe_demo.py,依赖 websockets。订阅:
newHeadslogs:address=主网 USDT0xdAC17F958D2ee523a2206206994597C13D831ec7,topics[0]=ERC-20 Transfer 签名0xddf252ad…b3ef
本场实跑快照(块高、金额会变;时间约 2026-10-15 16:56 CST):
- 订阅 ID:newHeads
0x4fe9f09a…1578;logs0x8352d29c…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 在收到样例后曾出现)——生产环境应处理重连;本文只演示订阅读通路。

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

六、和 eth_getLogs 怎么分工
| 场景 | 更合适的文 | 本篇补充 |
|---|---|---|
| 按区间批量筛历史事件 | eth_getLogs 文 | HTTP 过滤器;本篇是推送 |
| 已知哈希读 Status/Logs | 交易回执文 | 本篇不必先有哈希 |
| 命令行读存储/发测试交易 | cast 文 | 本篇是 eth_subscribe |
| Python 连测试网读余额 | web3.py 文 | Provider 基础;本篇专讲 WSS 订阅 |
成功订阅 → 订阅 ID;之后 method 恒为 eth_subscription。
至少 address 或 topics;USDT 这类高频合约不加过滤会刷爆。
公开 WSS 不需要钱包;需要看测试网时可试用欧易 Web3(创建可填 CHENGXULVTU)。
- 读完 ethereum.org 中文 WebSocket 教程的 eth_subscribe / newHeads。
- 对本机公开 WSS 跑
ws-demo/subscribe_demo.py,对照 HEAD 链式与样例 LOG。 - 拿样例哈希到浏览器 Logs 核对 topic0 与 value。
- 买少量主网 Gas(与本文无关)可在 币安 或 欧易——本场不需要。
相关阅读
- 链上事件监听:eth_getLogs 与过滤器字段
- 以太坊交易回执怎么读:Status、Logs 与 Cumulative Gas
- Foundry cast:读链上存储与发测试交易怎么跑
- web3.py 连 Sepolia:HTTPProvider、读余额与本地账户
说明:配图为 2026-10-15 ethereum.org 中文 WebSocket 教程、geth Pub/Sub newHeads、本机真实 WSS 订阅读输出、Etherscan Event Logs。块高、金额、订阅超时策略会变。本文不构成投资建议。
