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

无法从BSC合约获取响应:原正常运行的ethers代码突然失效求助

排查Ethers.js合约事件监听与数据获取失效问题

你的代码如下:

const { JsonRpcProvider } = require("@ethersproject/providers")
const { Contract } = require("ethers") 
const { Wallet } = require("@ethersproject/wallet");

const abi = require('./abi.json');

const GLOBAL_CONFIG = { 
  PPV2_ADDRESS: "0x18B2A687610328590Bc8F2e5fEdDe3b582A49cdA",
  PRIVATE_KEY: "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
  BSC_RPC: "https://bsc-mainnet.public.blastapi.io"
};

const signer = new Wallet(GLOBAL_CONFIG.PRIVATE_KEY, new JsonRpcProvider(GLOBAL_CONFIG.BSC_RPC));

const contract = new Contract(GLOBAL_CONFIG.PPV2_ADDRESS, abi, signer)

const predictionContract = contract.connect(
  signer
)

predictionContract.on("StartRound", async (epoch) => {
    console.log("\nStarted Epoch", epoch.toString())
});

针对代码突然失效的情况,按以下步骤排查:

  • 检查RPC节点可用性
    你使用的BlastAPI节点可能出现临时故障、限流或服务调整。替换为官方或稳定的BSC RPC节点试试,比如https://bsc-dataseed1.binance.org/,修改GLOBAL_CONFIG里的BSC_RPC值后重启脚本。
    验证节点是否正常:打开终端执行以下命令,看是否能返回最新区块号,超时或报错则说明节点不可用:

    curl -X POST https://bsc-mainnet.public.blastapi.io -H "Content-Type: application/json" -d '{"jsonrpc":"2.0","method":"eth_blockNumber","params":[],"id":1}'
    
  • 更新合约ABI
    目标合约(0x18B2A687610328590Bc8F2e5fEdDe3b582A49cdA)可能已升级,本地ABI过时会导致事件监听和数据读取失败。去BSCscan搜索该合约地址,进入「Contract」标签复制最新ABI,覆盖本地的abi.json文件。

  • 简化事件监听代码
    你的代码中contract.connect(signer)属于重复操作(初始化Contract时已传入signer),可能引发监听异常。直接使用contract对象绑定事件:

    // 去掉这一行:const predictionContract = contract.connect(signer)
    contract.on("StartRound", async (epoch) => {
        console.log("\nStarted Epoch", epoch.toString())
    });
    

    另外,添加全局错误捕获,避免脚本静默退出:

    process.on('uncaughtException', (err) => {
      console.error('脚本错误:', err);
    });
    
  • 确认合约事件是否正常触发
    去BSCscan查看该合约的「Events」标签,检查最近是否有StartRound事件产生。如果确实没有新事件,说明是合约本身未触发,而非代码问题。

  • 锁定依赖版本并重新安装
    虽然你没手动更新代码,但依赖包可能被自动更新导致兼容问题。删除node_modules和package-lock.json,在package.json中指定固定版本:

    "dependencies": {
      "@ethersproject/providers": "^5.7.2",
      "ethers": "^5.7.2",
      "@ethersproject/wallet": "^5.7.0"
    }
    

    然后执行npm install,重启脚本。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 00:50:25