web3 python getAmountsOut 执行恢复

web3 python getAmountsOut execution reverted

我设法设置了这个函数,returns 合约的美元代币价值,在某些合约中一切正常,但在其他合约中我收到错误“执行恢复”调用函数“getAmountsOut”时有人知道它是什么吗?我从 bscscan 的同一个地方获得合同,有些合同有效,有些无效。

bsc = 'https://bsc-dataseed.binance.org/'
web3 = Web3(Web3.HTTPProvider(bsc))
panRouterContractAddress = '0x10ED43C718714eb63d5aA57B78B54704E256024E'
panabi = '[{...}]'
contractbuy = web3.eth.contract(address=panRouterContractAddress, abi=panabi)  # PANCAKESWAP

def get_price(self):
    try:
        # Base currency token instantiate and ABI
        baseCurrency = web3.toChecksumAddress("0xe9e7CEA3DedcA5984780Bafc599bD69ADd087D56")  # BUSD

        # get symbol token
        sellTokenContract = web3.eth.contract(self.token_to_buy, abi=sellAbi)
        symbol = sellTokenContract.functions.symbol().call()

        # Selling token instance and contract
        tokenToSell = web3.toChecksumAddress(self.token_to_buy)  # TOKEN PRICE
        sellAmount = web3.toWei(1, 'ether')

        # Calculate minimum amount of tokens to receive
        amountOut = contractbuy.functions.getAmountsOut(sellAmount, [tokenToSell, baseCurrency]).call() # Error here

        amountOutMin = web3.fromWei(int(amountOut[1]), 'ether')
        print("Valor do token: ", str(amountOutMin))
        str_format = "{:." + self.decs_usd + "f}"
        return float(str_format.format(amountOutMin)), symbol

    except Exception as ex:
        print("ERRO:ver_preco:", ex)
        return "", ""

合同正常:

https://bscscan.com/address/0x5649e392a1bac3e21672203589adf8f6c99f8db3

https://bscscan.com/address/0x00e1656e45f18ec6747f5a8496fd39b50b38396d

合同错误:

https://bscscan.com/address/0x9376e6b29b5422f38391a2a315623cb853c3c68e

https://bscscan.com/address/0xe786d5a4b985bfe5e371f8e94413cfb440f6618a

如果有人能向我解释为什么这个错误发生在某些令牌中而不是其他令牌中,以及除了“执行已恢复”之外我如何获得错误消息详细信息

谢谢!

后一个指定的代币地址失败并出现错误,因为指定地址组合不存在现有的 Pancakeswap 配对合约。

检查配对合约是否存在的另一种方法是调用 factorygetPair() 函数。

// returns the existing pair contract address 0x5f7A2a0A32C0616898cA7957C1D58BC92a7E2f6f
getPair(
    // ZDC token specified in your question as OK
    "0x5649e392A1BAC3e21672203589aDF8f6C99f8dB3",

    // BUSD
    "0xe9e7CEA3DedcA5984780Bafc599bD69ADd087D56"
)
// returns the zero address 0x0000000000000000000000000000000000000000
// because there's no pair contract for these specified tokens
getPair(
    // DGZV token specified in your question as NOTOK
    "0x9376E6B29b5422f38391A2a315623cB853c3c68e",

    // BUSD
    "0xe9e7CEA3DedcA5984780Bafc599bD69ADd087D56"
)