如何通过 websockets 连接到 RSK 公共节点?

问题描述

我正在尝试通过 websockets 连接到 RSK 主网或 RSK 测试网。 这是我为 Mainnet 尝试的方法

const wsProvider = new Web3.providers.WebsocketProvider('ws://public-node.rsk.co');
const web3 = new Web3(wsProvider);
web3.eth.subscribe('newBlockHeaders',function(error,blockHeader){
    if (!error) {
        console.log("new blockheader " + blockHeader.number)
    } else {
        console.error(error);
    }
});

结果如下:

connection not open on send()
Error: connection not open

我对测试网做了同样的事情,但使用了 ws://public-node.testnet.rsk.co,得到了类似的结果。 如上面的错误所示,这些都不起作用。 如何连接?

解决方法

米尔顿 我不确定,但我认为公共节点中未启用 websocket。

通常在我知道的其他公共区块链节点中没有启用。

,

RSK 公共节点仅通过 HTTP 公开 JSON-RPC 端点。

他们不会通过 websockets 公开 JSON-RPC 端点, 很遗憾,您无法完全按照您的描述进行操作。

但是,您可以实现相同的目标 通过运行您自己的 RSK 节点, 并使用它来建立 websockets 连接。

这是 RSK configuration options for RPC

另外,你可以看到默认的配置值 在“基本”配置文件中,对于 rpc.providers.ws

  ws {
      enabled = false
      bind_address = localhost
      port = 4445
  }

此外,您应该在端点中包含 /websocket 后缀。运行您自己的节点时的默认 websocket 端点是:ws://localhost:4445/websocket。 因此,更新代码的初始部分, 看起来像这样:

const wsProvider = new Web3.providers.WebsocketProvider('ws://localhost:4445/websocket');
const web3 = new Web3(wsProvider);