如何通过 websockets 在本地 RSK 节点上订阅 `newBlockHeaders`?

How to subscribe to `newBlockHeaders` on local RSK node over websockets?

我正在使用以下端点连接到 RSKj:

ws://localhost:4444/

...但是,我无法连接。

请注意,等效的 HTTP 端点 http://localhost:4444/ 为我工作,所以我知道我的 RSKj 节点 运行 正确。

我需要监听 newBlockHeaders,所以我更喜欢使用 WebSockets(而不是 HTTP)。

我该怎么做?

RSKj 默认使用 4444 作为 HTTP 传输的端口; 4445 作为 Websockets 传输的端口。 另请注意,websockets 端点不在 /, 而是 websocket。 因此,请使用 ws://localhost:4445/websocket 作为您的端点。

如果您使用 web3.js, 您可以创建一个 web3 通过 Websockets 连接的实例 使用以下内容:

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

你的问题的第二部分可以做 在 newBlockHeaders 上使用 eth_subscribe。 像这样使用上面的 web3 实例:

// eth_subscribe newBlockHeaders
web3.eth.subscribe('newBlockHeaders', function(error, blockHeader) {
  if (!error) {
    // TODO something with blockHeader
  } else {
    // TODO something with error
  }
});