【发布时间】:2022-01-06 12:58:35
【问题描述】:
我设法设置了这个函数,它以美元为单位返回合约的代币价值,在某些合约中一切正常,但在其他合约中,我在调用函数“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
如果有人可以向我解释为什么此错误发生在某些令牌中而不是其他令牌中,以及除了“执行恢复”之外,我如何获得错误消息详细信息
谢谢!
【问题讨论】:
-
contractbuy地址是什么?你连接到哪个网络(以太坊主网、BSC 测试网……)? -
我用附加信息编辑了问题,但我正在查询 BSC,contractbuy 是“PANCAKESWAP”
标签: ethereum web3 web3js web3py pancakeswap