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

如果有人能向我解释为什么这个错误发生在一些令牌中而不是其他令牌中,以及我如何获得除">执行被恢复";

后一个指定的令牌地址失败并出现错误,因为指定的地址组合没有现有的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"
)

最新更新