我试图创建一个简单的脚本来测试Web3的事件监听功能.js CreatedPairs.然而,我的脚本在代码中运行了一次,然后退出,而不是继续侦听创建的对,我不知道为什么.

const Web3 = require('web3')
const web3 = new Web3(Web3.givenProvider || 'https://mynodeishere');

const IUniswapV2Factory = require("@uniswap/v2-core/build/IUniswapV2Factory.json")
const UNI_FACTORY_ADDRESS = '0x5C69bEe701ef814a2B6a3EDD4B1652CB9cc5aA6f'
const uFactory = new web3.eth.Contract(IUniswapV2Factory.abi, UNI_FACTORY_ADDRESS)


const main = async () => {

    // Create event listener to listen to PairCreated
    uFactory.events.PairCreated({}, async (error, event) => {
    
        console.log(`New pair detected...\n`)

    })
}

main()

结果是我跑了node ./myapp.js英里.代码进入并将New pair detected...记录到控制台,然后退出.立即发生的这种情况告诉我,当检测到一对新代码时,它不会执行,而只是单步执行代码.

然而,我预料到的是,应用程序只有在检测到新的配对时才能继续运行并登录到控制台.我确信我忽略了一些小事情,但任何帮助都将不胜感激.

推荐答案

在此上下文中,Web3.givenProvidernull,因此使用HTTP提供程序.

为了能够订阅事件,您需要使用WSS提供程序.

// example connection to a WSS provider
const web3 = new Web3('wss://mainnet.infura.io/ws/v3/<yourtoken>');

Node.js相关问答推荐

postgresql层与应用层的序列化

未显示NPM版本

在 Docker 容器内创建一个 cron 作业(job)来执行 run.js 文件中的函数

如何使用Next.js/Node/TS正确地上传至S3

在mongoose虚拟属性中处理异步操作

使用 NPM 三个 mocha+typescript 进行测试

如何修改这个flake.nix,这样我就不用每次加载环境都加载nix包了

为什么后端开发需要单独的服务器?

看起来这段代码try GET 请求发送的值变为空白

在系统启动时启动本地 node 服务器

在将用作 nodejs/expressjs 中的中间件的函数中使用 keycloak.protect()

try 在 Heroku 中部署 PRN 应用程序并获得 404

Firestore promise 在退货前等待产品详细信息

node.js 是否支持yields ?

什么使用/尊重 .node-version 文件?

如何在 Joi 字符串验证中使用枚举值

代理后面的凉亭

node.js 模块和函数中this的含义

在 Node 中连接和缩小 JS 文件

使用 node 的内置调试器判断变量?