【问题标题】:Exception in fetchPairData() : call revert exception in method getReserves()fetchPairData() 中的异常:在方法 getReserves() 中调用恢复异常
【发布时间】:2021-08-06 12:19:04
【问题描述】:

我正在尝试调用“fetchPairData”函数 (https://uniswap.org/docs/v2/SDK/fetcher/),但出现以下错误。

Error: call revert exception (method="getReserves()", errorSignature=null, errorArgs=[null], reason=null, code=CALL_EXCEPTION, version=abi/5.1.2)
    at Logger.makeError (C:\Users\*\Desktop\ProyectoTransaccion\v2\node_modules\@ethersproject\logger\lib\index.js:180:21)
    at Logger.throwError (C:\Users\*\Desktop\ProyectoTransaccion\v2\node_modules\@ethersproject\logger\lib\index.js:189:20)
    at Interface.decodeFunctionResult (C:\Users\*\Desktop\ProyectoTransaccion\v2\node_modules\@ethersproject\abi\lib\interface.js:289:23)
    at Contract.<anonymous> (C:\Users\*\Desktop\ProyectoTransaccion\v2\node_modules\@ethersproject\contracts\lib\index.js:329:56)
    at step (C:\Users\*\Desktop\ProyectoTransaccion\v2\node_modules\@ethersproject\contracts\lib\index.js:48:23)
    at Object.next (C:\Users\*\Desktop\ProyectoTransaccion\v2\node_modules\@ethersproject\contracts\lib\index.js:29:53)
    at fulfilled (C:\Users\*\Desktop\ProyectoTransaccion\v2\node_modules\@ethersproject\contracts\lib\index.js:20:58)
    at processTicksAndRejections (internal/process/task_queues.js:93:5) {
  reason: null,
  code: 'CALL_EXCEPTION',
  method: 'getReserves()',
  errorSignature: null,
  errorArgs: [ null ],
  address: '0x80f836E71a6C92acebf6A49ad39038609c780070',
  args: [],
  transaction: {
    data: '0x0902f1ac',
    to: '0x80f836E71a6C92acebf6A49ad39038609c780070'
  }
}

相关代码:

const {ChainId, Token, TokenAmount, Fetcher, Pair, Route, Trade, TradeType, Percent} = require('@pancakeswap-libs/sdk');

    const INPUT_TOKEN = new Token(ChainId.MAINNET,InputTokenAddr, 18);
    const OUTPUT_TOKEN = new Token(ChainId.MAINNET, OutputTokenAddr, 18);


    try {
        
        pair = await Fetcher.fetchPairData(INPUT_TOKEN, OUTPUT_TOKEN, provider);
        
    } catch (ex)
    {

        console.log("Debug.INPUT_TOKEN: " + JSON.stringify(INPUT_TOKEN));
        console.log("Debug.OUTPUT_TOKEN: " + JSON.stringify(OUTPUT_TOKEN));
        console.log("Debug.provider: " + JSON.stringify(provider));
        console.log(ex)
        pair = null;
    }

调试:

Debug.INPUT_TOKEN: {"decimals":18,"chainId":56,"address":"0xbb4CdB9CBd36B01bD1cBaEBF2De08d9173bc095c"}
Debug.OUTPUT_TOKEN: {"decimals":18,"chainId":56,"address":"0xe9e7CEA3DedcA5984780Bafc599bD69ADd087D56"}
Debug.provider: {"_isProvider":true,"_events":[],"_emitted":{"block":-2},"formatter":{"formats":{"transaction":{},"transactionRequest":{},"receiptLog":{},"receipt":{},"block":{},"blockWithTransactions":{},"filter":{},"filterLog":{}}},"anyNetwork":false,"_networkPromise":{},"_maxInternalBlockNumber":-1024,"_lastBlockNumber":-2,"_pollingInterval":4000,"_fastQueryDate":0,"connection":{"url":"https://bsc-dataseed.binance.org/"},"_nextId":45,"_eventLoopCache":{"detectNetwork":null,"eth_chainId":null},"_network":{"chainId":56,"name":"unknown"}}

我已验证交换在 pancakeswap 网络界面中正常工作。网上没有指明路由,所以好像是直接交换。

使用其他标记,调用会返回预期的内容。例如对 WBNB, BUSD。

I found for this error on another site with this comment

我遇到了同样的问题,问题是我试图获取 一个不存在的游泳池的价格。

池存在。有流动性,也很直接,不需要路线。

【问题讨论】:

    标签: node.js swap smartcontracts web3 binance-smart-chain


    【解决方案1】:

    调用恢复异常发生在

    • 客户端没有收到响应

      (地址上没有部署合约)

    • 或者当合约代码执行还原时。

      pragma solidity ^0.8;
      
      contract MyContract {
          function foo() external view {
              revert();
          }
      }
      

      (也可以是当你调用一个未定义的函数并且合约中没有fallback()


    您的问题没有具体说明您尝试在哪个网络上执行呼叫,但mainnettestnet 上的失败地址都没有合同。

    因此,您的客户端应用程序正在尝试直接调用这个不存在的合约,或者调用链中的某个合约正在尝试调用它。

    transaction: {
        data: '0x0902f1ac',
        to: '0x80f836E71a6C92acebf6A49ad39038609c780070'
    }
    

    【讨论】:

    • 我在我的问题(2 个令牌和提供者)中使用“调试:”中出现的参数调用 Fetcher.fetchPairData,我不明白为什么在 fetchPairData 的错误跟踪中,合同确实如果我已将存在的令牌的地址指示为输入(检查“调试:”),则会出现不存在。调用在主网(ChainId.MAINNET)
    • 这很可能是由Fetcher 合约未能在不存在的0x80f836... 合约上调用getReserves() 引起的。 Fetcher 地址是什么?
    • 在代码中只有一个对“Fetcher”的引用,它是这样的:-> const {ChainId, Token, TokenAmount, Fetcher, Pair, Route, Trade, TradeType, Percent} = 要求('@pancakeswap-libs/sdk');
    • 看来address 字段(来自PairGitHub link)是不正确的0x80f836...。它可能需要一些 Pancakeswap SDK 配置,但这不是我的专业领域,所以我不确定要配置什么。但我有根据的猜测是 Pair 使用了一些默认值或配置错误。
    • 非常准确的评估@PetrHejda,Pair.getAddress 肯定会为许多代币返回错误的配对地址。 @user2983041 你能找到任何解决方案吗?
    猜你喜欢
    • 2022-12-30
    • 1970-01-01
    • 1970-01-01
    • 2016-07-10
    • 1970-01-01
    • 1970-01-01
    • 2018-01-01
    • 2021-02-09
    • 1970-01-01
    相关资源
    最近更新 更多