Добавить новость

На Казанском вокзале в Москве презентовали вагон-купе для инвалидов

Продажу зданий в центре Ярославля оценили, как Рижский вокзал в Москве

"Школа 21" для подготовки ИТ-специалистов открылась в Нижнем Новгороде

Михаил Ведерников возложил венок к Могиле Неизвестного Солдата в Москве



Новости сегодня

Новости от TheMoneytizer

Правильно обработать транзакцию Uniswap v3

Пишу скрипт автоматической ребалансировки позиции на Uniswap v3. Вот функция минта новой позиции, с которой у меня основные проблемы.

def add_liquidity(web3, wallet_address, private_key, new_range_lower, new_range_upper, token_id, amount0=None,
                  amount1=None):
    """
    Добавляет ликвидность в новый диапазон.
    :param web3: Экземпляр Web3 для взаимодействия с блокчейном.
    :param wallet_address: Адрес кошелька.
    :param private_key: Приватный ключ кошелька.
    :param new_range_lower: Новая нижняя граница диапазона.
    :param new_range_upper: Новая верхняя граница диапазона.
    :param amount0: Количество первого токена для добавления.
    :param amount1: Количество второго токена для добавления.
    :param token_id: ID позиции NFT на Uniswap.
    """
    token0 = TOKEN0  # WETH
    token1 = TOKEN1  # USDC

    logger = setup_logger(wallet_address)
    logger.info(f"Добавление ликвидности в диапазон {new_range_lower} - {new_range_upper} начато.")

    tick_lower, tick_upper = price_to_tick(new_range_lower), price_to_tick(new_range_upper)
    price_ticked_lower, price_ticked_upper = tick_to_price(tick_lower), tick_to_price(tick_upper)

    try:
        # Если amount0 не передано, вычисляем их динамически
        if amount0 is None:
            amount0, amount1 = AMOUNT0, AMOUNT1
            logger.info(f"Вычислены значения для кошелька {wallet_address}: amount0 = {amount0}, amount1 = {amount1}")
        else:
            amount1 = eth_to_usdc(price_ticked_lower, price_ticked_upper, get_eth_price(), amount0)
            logger.info(f"Используются переданные значения для кошелька {wallet_address}: amount0 = {amount0}, amount1 = {amount1}")
        # Получаем контракт
        position_manager = get_contract(POSITION_MANAGER_ADDRESS, POSITION_MANAGER_ABI_PATH)

        params = (
            Web3.to_checksum_address(token0),
            Web3.to_checksum_address(token1),
            3000,
            tick_lower,
            tick_upper,
            Web3.to_wei(amount0, 'ether'),
            int(amount1 * (10**6)),
            0,
            0,
            Web3.to_checksum_address(wallet_address),
            int(time.time()) + 60
        )
        print(Web3.to_checksum_address(token0),
            Web3.to_checksum_address(token1),
            3000,
            tick_lower,
            tick_upper,
            Web3.to_wei(amount0, 'ether'),
            int(amount1 * (10**6)),
            0,
            0,
            Web3.to_checksum_address(wallet_address),
            int(time.time()) + 60)
        add_liquidity_txn = position_manager.functions.mint(params).build_transaction({
            "from": wallet_address,
            "value": 0,
            "gasPrice": int(web3.eth.gas_price * GAS_PRICE_MULTIPLIER),
            "nonce": web3.eth.get_transaction_count(wallet_address),
        })

        # Оценка газа для mint
        estimated_gas = web3.eth.estimate_gas(add_liquidity_txn)
        add_liquidity_txn['gas'] = int(estimated_gas * 1.2)  # Добавляем запас 20%
        signed_tx = web3.eth.account.sign_transaction(add_liquidity_txn, private_key=private_key)

        tx_hash = web3.eth.send_raw_transaction(signed_tx.raw_transaction)

        logger.info(f"Ликвидность успешно добавлена для кошелька {wallet_address}. Хэш транзакции: {tx_hash}")
    except Exception as e:
        logger.error(f"Ошибка при добавлении ликвидности для кошелька {wallet_address}: {e}")
Вот, что лежит в params 0x4200000000000000000000000000000000000006 0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913 3000 -194630 -194351 100000000000000 379277 0 0 0xdb9733BE614A69a62ad717f3158BBA383b2F740B 1732838297

Проблема в том, что при таких параметрах вечно получаю ошибку

2024-11-29 02:57:18,546 - ERROR - Ошибка при добавлении ликвидности для кошелька 0xdb9733BE614A69a62ad717f3158BBA383b2F740B: ('execution reverted', 'no data')

Когда меняю тики, то выходит

0xdb9733BE614A69a62ad717f3158BBA383b2F740B: ('execution reverted: STF', '0x08c379a0000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000035354460000000000000000000000000000000000000000000000000000000000')

Читайте на 123ru.net


Новости 24/7 DirectAdvert - доход для вашего сайта



Частные объявления в Вашем городе, в Вашем регионе и в России



Smi24.net — ежеминутные новости с ежедневным архивом. Только у нас — все главные новости дня без политической цензуры. "123 Новости" — абсолютно все точки зрения, трезвая аналитика, цивилизованные споры и обсуждения без взаимных обвинений и оскорблений. Помните, что не у всех точка зрения совпадает с Вашей. Уважайте мнение других, даже если Вы отстаиваете свой взгляд и свою позицию. Smi24.net — облегчённая версия старейшего обозревателя новостей 123ru.net. Мы не навязываем Вам своё видение, мы даём Вам срез событий дня без цензуры и без купюр. Новости, какие они есть —онлайн с поминутным архивом по всем городам и регионам России, Украины, Белоруссии и Абхазии. Smi24.net — живые новости в живом эфире! Быстрый поиск от Smi24.net — это не только возможность первым узнать, но и преимущество сообщить срочные новости мгновенно на любом языке мира и быть услышанным тут же. В любую минуту Вы можете добавить свою новость - здесь.




Новости от наших партнёров в Вашем городе

Ria.city

Продажу зданий в центре Ярославля оценили, как Рижский вокзал в Москве

В Донском женщину отправили в колонию за убийство знакомого

В Москве открыли 28 пунктов сбора новогодних подарков для участников СВО и детей из новых регионов

Туляка осудили на девять лет за покушение на убийство работника охраны ж/д вокзала

Музыкальные новости

Песков сообщил о начале создания альтернативной системы международных соревнований в России

Генерал-полковник Алексей Воробьев вручил награды артистам Академического ансамбля песни и пляски Росгвардии

Новогодний хит! от MYAKESH Слушайте «Новогоднюю»!

Фонд борьбы с инсультом ОРБИ при поддержке Т-Банка запустили платформу волонтерского фандрайзинга

Новости России

Второй день крупнейшей Международной курортной выставки "MedTravelExpo" в Москве, где Крым в числе 158 экспонентов из 12 стран мира представляет на едином стенде Министерства курортов и туризма лучшие программы и разработки...

Сервис упрощённого получения мест под фандоматы заработает в Подмосковье в декабре

В Подмосковье задержали директора магазина по подозрению в убийстве покупателя

Более 4 тысяч нижегородцев приняли участие в  памятных акциях в День неизвестного солдата

Экология в России и мире

Как сделать кормушку для птиц своими руками: из чего ее можно сделать. 10 способов

Хейли Бибер вышла на связь после слухов о разладе с Джастином: фото

Что посмотреть в Майкопе за один день: маршрут по главным достопримечательностям

Растения, занесенные в Красную книгу России

Спорт в России и мире

Бублик проиграл на турнире в Санкт-Петербурге

Олимпийская чемпионка Веснина проиграла в своём прощальном матче

Казахстанская теннисистка из топ-30 WTA одержала победу на турнире в России

Жену второй ракетки Белоруссии Герасимова обокрали в отеле в Петербурге

Moscow.media

Интересные каналы в Telegram. Лучшие каналы в Telegram.

«Байкал Сервис» открыл второй терминал в Хабаровске

«Деловые Линии» открыли терминал в городе Бор в Нижегородской области

ТСД SAOTRON RT41 GUN: практичный, производительный, надёжный











Топ новостей на этот час

Rss.plus






Продажу зданий в центре Ярославля оценили, как Рижский вокзал в Москве

В Москве открыли 28 пунктов сбора новогодних подарков для участников СВО и детей из новых регионов

Фура с мандаринами перевернулась на трассе Джубга – Сочи

МегаФон: москвичи превратили «Чёрную пятницу» в «Чёрный четверг»