我有一个基本的节点表达式应用程序。它通过以太和网络套接字连接到我在本地运行的安全帽网络。由于我可以成功地查询块链(例如,await ethers.getBlockNumber()返回正确的块号),所以连接似乎可以工作。
然而,我的事件侦听器似乎不起作用。回调永远不会触发。
代码示例:初始化快速应用程序时,我使用的是加载程序函数。当它被执行时,我连接到websocket提供者。然后,我成功地将当前块号打印到控制台。然后,在“块”事件(取自文档)上注册一个事件侦听器。然而,听者从不开火。
我正在连接到安全帽网络,该网络被配置为每5秒生成一个新的块(我可以看到,在硬件控制台中是这样的)。我希望侦听器每5秒被发射一次,每次都是当一个新的块被挖掘时。
我遗漏了什么?
import { ethers } from "ethers";
export default async ({ expressApp }) => {
const provider = new ethers.providers.WebSocketProvider(
"ws://localhost:8545"
);
console.log(await provider.getBlockNumber());
provider.on("block", () => console.log("new block"));
expressLoader({ app: expressApp });
};编辑:如果我使用JsonRpcProvider而不是WebSocketProvider和下面的url http://localhost:8545,就会触发回调。我需要做什么来实现同样的行为与websocket?
发布于 2021-05-31 07:23:42
我也有同样的问题。
有相关的开放问题
provider.on("block", () => console.log("new block"));上面的代码通过http工作--因为它下面有间隔轮询策略。因此没有通过ws订阅通知它,但是请求是否存在一个新的块。
https://ethereum.stackexchange.com/questions/97082
复制相似问题