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

调用Chainlink VRF的rollDice函数报cannot estimate gas错误如何解决

错误原因
  • 合约调用地址不匹配:报错日志中交易的目标地址为0x5887946875A01D1BB79d6Fb357BceeA5A0096D2e,但你实际部署成功的合约地址为0x7b72d80670512c87605ab8ac7e6113fda9c57de4,调用错误地址要么对应地址未部署对应合约,要么该地址没有转入足够LINK,会触发rollDice函数第一个require校验回滚,导致节点无法预估gas。
  • 重复调用触发校验规则:如果参数传入的地址0x014Da1D627E6ceB555975F09D26B048644382Ac6已经发起过掷骰子请求,会触发第二个require(s_results[roller] == 0, "Already rolled")校验回滚,同样会引发gas预估失败。
  • 配置文件gas参数不合理:hardhat.config.js里Kovan网络的gas参数设置为2700000000,远超过Kovan测试网的区块gas上限(约3000万),错误的gas参数会干扰交易预估和发送流程。
修复方案
  • 修正调用合约地址:将quickRun.js中的address变量替换为你实际部署的合约地址0x7b72d80670512c87605ab8ac7e6113fda9c57de4,同时确认你转入LINK的地址就是该部署地址,且余额≥0.1 LINK(你代码中设置的s_fee为1e17 wei即0.1 LINK)。
  • 避免重复调用:如果已经用当前地址调用过rollDice,可以换一个新地址作为参数传入,也可以新增一个重置测试状态的函数方便多次测试。
  • 修正hardhat配置参数:将hardhat.config.js里Kovan网络的gas参数调整为合理值,比如gas: 3000000,删除多余的不合理gas限制。
  • 手动指定gas limit临时验证:如果调整后仍然报错,可以在调用rollDice时手动指定gas limit,修改调用代码为:
var sendPromise = contract.rollDice('0x014Da1D627E6ceB555975F09D26B048644382Ac6', {gasLimit: 3000000});

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 00:24:02