You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用web3.js和Infura API订阅合约事件时遇TypeError错误求助

解决web3.js v4事件订阅TypeError问题

核心原因

web3.js v4完全重构了事件订阅API,你用的contract.events.Paused.on()是v3的旧写法,v4里这套逻辑已经被替换,所以会出现on未定义的错误。

正确实现方式

方式1:直接用合约实例的on()方法订阅

这是v4官方推荐的写法,直接绑定事件监听:

// 假设已初始化web3实例和合约实例contract
contract.on('Paused', (event) => {
  console.log('触发Paused事件:', event);
}).on('error', (error) => {
  console.error('订阅出错:', error);
});

方式2:先获取事件对象再订阅

如果需要先确认事件存在,可以先拿到事件对象再绑定监听:

const pausedEvent = contract.events.getEvent('Paused');
pausedEvent.on('data', (event) => {
  console.log('触发Paused事件:', event);
}).on('error', (error) => {
  console.error('订阅出错:', error);
});

额外排查要点

  • 确认合约ABI里包含Paused事件的完整定义,ABI缺失会导致事件无法被识别
  • 事件订阅必须用Infura的WebSocket端点(格式为wss://sepolia.infura.io/ws/v3/你的项目ID),HTTP端点不支持实时事件推送
  • 用npm list web3命令检查本地web3.js版本是否确实是v4,避免版本混淆

内容的提问来源于stack exchange,提问作者Jong

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.28 05:42:05