未捕获承诺错误:返回错误:执行已恢复

问题描述

嘿嘿!

当我运行连接到我的智能合约的 Dapp 应用程序时出现以下错误:未捕获(承诺)错误:返回错误:执行已恢复。

我猜测错误发生在我的多调用函数调用的地方。我已经从 pancakeswap 分叉了这个函数

1.    const rawEarnings = await multicall(masterchefABI,calls)

2.     const parsedEarnings = rawEarnings.map((earnings) => {

3.       return new BigNumber(earnings).toJSON()

这是函数代码

export const multicall = async (abi: any[],calls: Call[],requireSuccess = true) => {
  const web3 = getWeb3NoAccount()
  const multi = new web3.eth.Contract(MultiCallAbi as unkNown as AbiItem,getMulticallAddress())
  const itf = new Interface(abi)

  const calldata = calls.map((call) => [call.address.toLowerCase(),itf.encodefunctionData(call.name,call.params)])
  const returnData = await multi.methods.aggregate(requireSuccess,calldata).call()
  const res = returnData.map((call,i) => {
    const [result,data] = call
    return {
      result,data: itf.decodefunctionResult(calls[i].name,data),}
  })

  return res
}

聚合函数

function aggregate(Call[] memory calls) public returns (uint256 blockNumber,bytes[] memory returnData) {
        blockNumber = block.number;
        returnData = new bytes[](calls.length);
        for (uint256 i = 0; i < calls.length; i++) {
            (bool success,bytes memory ret) = calls[i].target.call(calls[i].callData);
            require(success);
            returnData[i] = ret;
        }
    }

调用

interface Call {
  address: string // Address of the contract
  name: string // Function name on the contract (example: balanceOf)
  params?: any[] // Function params
}

所以我在第 1 行调用我的函数代码也通过这一行运行(console.log 在第 1 行之后)。但是rawEarnings中的returnValue一直没有保存,代码等待,出现错误

Web 应用程序仅适用于特定的 masterChef 地址,但一旦我更改地址,它就会停止工作。也许我需要添加一些与我的主厨地址相对应的其他内容

但是,它仍然没有解释为什么不保存 returnValue .. 请帮忙

非常感谢您提前

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)