简体   繁体   English

web3 python getAmountsOut 执行已恢复

[英]web3 python getAmountsOut execution reverted

I managed to set up this function that returns the token value in USD of a contract, everything works fine in some contracts, but in other contracts I get the error " execution reverted " when calling the function " getAmountsOut " does anyone have any idea what it can be?我设法设置了这个 function,它返回合约的美元代币价值,在某些合约中一切正常,但在其他合约中,当调用 function“ getAmountsOut ”时,我收到错误“执行恢复”有可能? I get the contracts from the same place in bscscan and for some it works and for some it doesn't.我从 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 "", ""

contracts ok:合同确定:

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

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

contracts error:合约错误:

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

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

if anyone can explain to me why this error occurs in some tokens and not others, and how can i get error message details besides " execution reverted "如果有人可以向我解释为什么此错误发生在某些令牌中而不是其他令牌中,以及除了“执行恢复”之外,我如何获得错误消息详细信息

Thanks!谢谢!

The latter specified token addresses fail with the error because there is no existing Pancakeswap pair contract for the specified address combination.后者指定的代币地址因错误而失败,因为指定地址组合没有现有的 Pancakeswap 对合约。

Another way of checking the existence of a pair contract is by calling the factory 's getPair() function.检查配对合约是否存在的另一种方法是调用工厂getPair() function。

// 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"
)

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM