Цель:
В проекте возникли многочисленные проблемы, связанные с симуляцией транзакций, проверкой включения и обработкой данных блокчейна. Данный перечень задач направлен на устранение этих проблем, оптимизацию производительности и повышение надежности системы. Описание включает необходимые исправления, оптимизации и улучшения.
Задачи:
1. Отслеживание и исключение пользовательских транзакций:
Добавить параметр user_transaction_hash для идентификации пользовательской транзакции.
Разрешение пользовательской транзакции в симуляциях:
Включать бандлы с транзакцией пользователя в симуляцию, но явно отслеживать её присутствие.
Гарантировать, что пользовательская транзакция обрабатывается одинаково во всех симуляциях для предотвращения искажений.
Избежание повторной обработки:
Вести учёт обработанных бандлов и транзакций, чтобы исключить повторную симуляцию одной и той же транзакции в одном контексте.
Симуляция вокруг пользовательской транзакции:
Если пользовательская транзакция включена в несколько бандлов:
Выполнять симуляцию этих бандлов для определения оптимального возврата или комбинации бандлов, принимая пользовательскую транзакцию как фиксированную часть.
Сравнивать результаты этих симуляций для выявления нарушений или неэффективности.
Отметка транзакций как обработанных:
Поддерживать набор обработанных транзакций для исключения дублирования симуляций.
2. Оптимизация simulate_optimal_bundle_combinations
Проблема:
Текущая реализация перебирает все возможные комбинации бандлов, что приводит к сложности O(2^n). Это слишком ресурсоёмко.
Задачи:
Замена полного перебора жадным подходом:
Симулировать каждый бандл по отдельности, сортировать их по значению возврата и добавлять бандлы инкрементально.
Учёт обработанных транзакций:
Вести набор обработанных транзакций для исключения дублирования.
Избежание симуляции всех комбинаций (O(2^n)):
Симулировать каждый бандл отдельно и добавлять бандлы инкрементально.
Бандлы должны обрабатываться изолированно или совместно с уже выбранными.
Реализация жадного алгоритма (O(2n)):
Бандлы сортируются по значению возврата (O(n log n)).
Итерация по отсортированным бандлам выполняется линейно (O(n)).
Транзакции отслеживаются для предотвращения дублирования.
Пошаговое добавление бандлов:
Бандлы добавляются по одному, если их транзакции совместимы с уже обработанным набором.
Обязательно найти все функции, которые необходимо скорректировать в соответствии с задачами (включая те, которые не были явно упомянуты, но находятся в предоставленном коде и требуют изменений).
Так же, требуется пересмотреть calculate_refund и детект нарушений и в случае необходимости - пофиксить.
Большая часть перечисленного выполнена больше чем наполовину, так что понимающему человеку будет проще.
Репа на гитхаб:
rylaix/MEVGuard-Open-Source-MEV-Blocker-Verification-Tool at tests (важно, ветка tests)