Путь контрактов к токенам обмена Web3py

Пытаюсь поменять местами токены с web3py с помощью функции swapExactETHForTokensSupportingFeeOnTransferTokens , с некоторыми токенами работает отлично, с другими получаю ошибку " execution reverted: PancakeRouter: INSUFFICIENT_OUTPUT_AMOUNT " Сообщаю параметр " amountOutMin (uint256) " для управления проскальзывание . то, что я видел по-разному в токенах, которые работают и что не работают, — это путь контрактов, используемых для свопа.

На веб-сайте poocoin, когда я совершаю сделку, а путь контракта « WBNB > TOKEN », то есть от BNB напрямую к TOKEN, он также работает с использованием функции « swapExactETHForTokensSupportingFeeOnTransferTokens », когда есть какой-то другой контракт посередине, например « WBNB ». > WUSD > TOKEN » не работает, и эти пути меняются на один и тот же токен, см. изображения ниже:

Как poocoin определяет, какие контракты использовать для обмена BNB на TOKEN? как определить контакты, которые я должен использовать в параметре « путь (адрес []) »

      swapExactETHForTokensSupportingFeeOnTransferTokens(
                amountOutMin,
                [WBNB, ????, ???? TOKEN_BUY], # path (address[])
                sender_address,
                (int(time.time()) + 10000)

Благодарность!

1 ответ

Я ищу то же самое, на данный момент ответ находится в этом https://cryptomarketpool.com/use-web3-py-in-python-to-call-uniswap/

Более точно: вы локально получаете все перечисленные пары

      ...
allPairsLength = factory_contract.functions.allPairsLength().call()
...

затем вы найдете свой маршрут вручную. Собрав локально все торговые пары, вы можете найти, как именно добраться из X в Y, потому что у вас есть все пары X (X/X1, X/X2 ... X/Xn) и все пары Y (Y/Y1, Y/X3, ... Y/Yn).

Вы можете получить одну пару по ее идентификатору

      for i in range(1, PUTTHECOUNTOFTRADINGPAIRSHERE):
    allPairs_address = factory_contract.functions.allPairs(i).call()
    contract = web3.eth.contract(address=allPairs_address, abi=pairs_abi)
    symbol = contract.functions.name().call()
    supply = contract.functions.totalSupply().call()
    print(allPairs_address, supply)

Например

Другие вопросы по тегам