OKTC 基于 Tendermint Core 共识引擎,并采用 Cosmos SDK 框架构建,因此继承了其事件格式。然而,为了兼容以太坊风格的 Web3 WebSocket 功能,OKTC 需要将 Tendermint 的响应转换为以太坊类型。
您可以通过在初始化 REST 服务器时使用 --wsport
标志(默认端口为 8546
)来建立与以太坊 WebSocket 的连接。之后,可以使用 ws 或其他 WebSocket 客户端启动订阅。
WebSocket 连接基础
主网 WebSocket URL
主网的 WebSocket 服务可通过标准端口进行访问,具体地址需根据节点配置确定。
创建订阅
通过向服务器发送 RPC 调用,以 eth_subscribe
为方法名,并以订阅名称作为第一个参数,即可创建订阅。成功后,服务器将返回订阅 ID。
参数说明:
- 订阅名称
- 可选参数(视订阅类型而定)
示例请求:
{
"jsonrpc": "2.0",
"id": 1,
"method": "eth_subscribe",
"params": ["newHeads"]
}
取消订阅
通过向服务器发送 RPC 调用,以 eth_unsubscribe
为方法名,并以订阅 ID 作为第一个参数,即可取消订阅。服务器将返回布尔值,表示操作是否成功。
参数说明:
- 订阅 ID
示例请求:
{
"jsonrpc": "2.0",
"id": 1,
"method": "eth_unsubscribe",
"params": ["0x123456789"]
}
支持的订阅类型
newHeads
每当新区块头被添加到链上时(包括链重组情况),触发通知。
参数: 无
示例响应:
{
"jsonrpc": "2.0",
"method": "eth_subscription",
"params": {
"subscription": "0x123456789",
"result": {
"number": "0x1",
"hash": "0xabc...",
"parentHash": "0xdef...",
// 其他区块头字段
}
}
}
Logs
返回新导入区块中包含的日志,且符合指定的筛选条件。
若发生链重组,之前发送的旧链上的日志会重新发送,并标记为已删除(removed
属性为 true
);新链上的交易日志则正常发出。因此,同一交易的日志可能多次触发订阅。
参数说明:
- 包含以下可选字段的对象:
- address:地址或地址数组,仅返回来自这些地址的日志(可选)
- topics:仅匹配指定主题的日志(可选)
示例请求:
{
"jsonrpc": "2.0",
"id": 1,
"method": "eth_subscribe",
"params": ["logs", {"address": "0x123...", "topics": ["0xabc..."]}]
}
newPendingTransactions
返回所有进入待处理状态且由节点可用密钥签名的交易哈希。
若某交易原本属于规范链,但在重组后不再属于新规范链,则该交易会再次触发通知。
参数: 无
示例响应:
{
"jsonrpc": "2.0",
"method": "eth_subscription",
"params": {
"subscription": "0x123456789",
"result": "0x交易哈希"
}
}
syncing
当节点开始或停止同步时触发通知。结果可以是布尔值(true
表示开始同步,false
表示结束),也可以是包含各种进度指标的对象。
参数: 无
示例响应(同步中):
{
"jsonrpc": "2.0",
"method": "eth_subscription",
"params": {
"subscription": "0x123456789",
"result": {
"startingBlock": "0x0",
"currentBlock": "0x100",
"highestBlock": "0x200"
}
}
}
常见问题
如何建立 WebSocket 连接?
启动 OKTC 节点时,通过 --wsport
参数指定 WebSocket 端口(默认为 8546),然后使用任何标准 WebSocket 客户端连接至该端口。
订阅有哪些常见用途?
订阅可用于实时监控新区块、追踪特定合约事件、获取待处理交易通知,以及监控节点同步状态。👉 查看实时监控工具 可帮助您更高效地管理链上活动。
为什么日志会重复发送?
在区块链重组过程中,旧链上的日志会被重新发送并标记为“已删除”,而新链上的日志会再次触发通知。这是为了确保客户端能够正确处理链状态变化。
如何选择适合的订阅类型?
根据需求选择:newHeads
适用于区块头追踪,logs
适合合约事件监听,newPendingTransactions
用于即时交易通知,syncing
则用于同步状态监控。
订阅是否支持多链环境?
当前文档描述的功能主要针对 OKTC 主网,但 WebSocket API 的设计兼容多链场景。具体配置需参考各链的文档说明。
遇到连接问题如何排查?
检查节点是否正确启用 WebSocket 端口,确认防火墙设置允许连接,并验证客户端代码是否兼容以太坊 PubSub API 标准。
通过以上介绍,您应能掌握 OKTC WebSocket API 的基本用法,实现高效的链上事件订阅与实时数据处理。