выполнение web3 python getAmountsOut отменено

Мне удалось настроить эту функцию, которая возвращает значение токена контракта в долларах США, в некоторых контрактах все работает нормально, но в других контрактах я получаю сообщение об ошибке « выполнение возвращено » при вызове функции « 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

если кто-нибудь может объяснить мне, почему эта ошибка возникает в некоторых токенах, а не в других, и как я могу получить подробности сообщения об ошибке, кроме « исполнение отменено »

Спасибо!

1 ответ

Последние указанные адреса токенов не работают с ошибкой, потому что для указанной комбинации адресов нет существующего парного контракта Pancakeswap.

Еще один способ проверить наличие парного контракта — позвонить на фабрику . getPair()функция.

      // 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"
)
Другие вопросы по тегам