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

Названы неожиданные союзники России в Сирии

Пилотный проект по продаже билетов на культурные мероприятия по паспорту стартовал в Москве

В Москве задержали организатора путешествий для ЛГБТ*-туристов

Суд арестовал у экс-мэра Нового Уренгоя дома и часы стоимостью 2 млн рублей





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

Новости от 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

WSJ: Китай стал изучать опыт России по противодействию западным санкциям

Авиарейсы из Москвы на Кубу станут дольше на 5 часов

Баскетболисты МБА-МАИ обыграли «Автодор» в матче Единой лиги ВТБ

Вешенка, дрожалка, булгария: какие грибы можно встретить в Москве зимой

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

Лерчек получает букет от бывшего, а Джиган ищет жену и дочку в лесу: что смотреть на ТНТ в выходные

Путин назначил нового прокурора Москвы: чем известен Максим Жук

Кабинет Артиста в Яндекс. Кабинет Артиста в Яндекс Музыке. 

Росгвардеец из Надыма одержал победу в ведомственном Чемпионате Уральского округа по рукопашному бою

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

WSJ: Китай стал изучать опыт России по противодействию западным санкциям

Заболеваемость микоплазменной пневмонией начала расти в России

Геннадий Хазанов отмечает день рождения: 7 интересных фактов из жизни артиста

Баскетболисты МБА-МАИ обыграли «Автодор» в матче Единой лиги ВТБ

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

Продвижение Песни в Мою Волну музыкального стриминга Яндекс Музыка.

Ядовитая красота: врач Кутушов рассказал о скрытых рисках искусственных елок

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

Компания «КЕНГУРУ.ПРО» приняла участие в благоустройстве набережной Махачкалы

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

В WTA прокомментировали положительный допинг-тест Иги Швёнтек

Андреа Петкович заявила, что Синнера не включили в номинанты премии ATP из-за допинг-дела

Хачанов намерен вернуться в топ-10 рейтинга ATP в следующем году

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

Moscow.media

На Волге...

На Мытищинской хорде в Подмосковье построили 800-метровый путепровод

В Hybrid Platform появилась функция создания кастомных метрик

Лето на верховых болотах Ленинградской области











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

Rss.plus






WSJ: Китай стал изучать опыт России по противодействию западным санкциям

Заболеваемость микоплазменной пневмонией начала расти в России

Авиарейсы из Москвы на Кубу станут дольше на 5 часов

Вешенка, дрожалка, булгария: какие грибы можно встретить в Москве зимой