💀 Гонки транзакций на TON: Как вас могут обмануть прямо во время свопа?
⚫️ Принято считать, что на TON невозможен MEV — Maximal Extractable Value (или как он ранее расшифровывался, Miner Extractable Value) — механизм «подкупа» валидаторов, когда один пользователь платит больше комиссию, чтобы валидатор поставил его транзакцию перед или после транзакции другого пользователя.
⚫️ Это применяется, например, для получения преимущества при арбитраже или ликвидациях, когда нужно обогнать другого арбитражника или ликвидатора; или в знаменитых «сэндвич-атаках», при которых валидатор ставит одну транзакцию перед, а вторую после «транзакции-жертвы» — отсюда, собственно, и название.
⚫️ На TON комиссии за транзакцию фиксированы, а высокий спрос регулируется шардингом. Поэтому варьировать комиссию, как на EVM, не получится. А переменные, по типу block.coinbase в Solidity, на TON недоступны (в неё передается адрес кошелька валидатора, выпустившего блок, чтобы можно было назначить выплату заранее, не зная, какой валидатор обработает транзакцию). Конечно, остаётся возможность договориться с валидатором лично, но это нетипичный подход. В документации TON есть обещание добавить команду BUYGAS, но подробностей пока нет.
⚫️ Когда вы совершаете действие через обычный кошелек (v3, v4, w5), вы посылаете ему сообщение с описанием транзакции, а перед ним 512 бит, которые содержат подпись и сгенерированы на основе самого сообщения. Таким образом, никто, включая валидатора, не может поменять ваше сообщение (например подставить туда адрес «нужного» валидатора, который должен получить «взятку»), ведь тогда подпись станет недействительной.
💡 Отсюда рождается новая идея: специальный MEV-кошелек. Задумка в том, чтобы добавить в начало сообщения фрагмент, который не покрывается подписью и её проверкой, и, соответственно, даёт валидатору возможность вписать туда свой адрес. В начало он помещается для того, чтобы считать его до подписи. Например, на скрине (приложили в комментариях) считываемый validator_reward_address
не попадает в подписанное тело сообщения для wallet w5, поэтому валидатор может его подменить.
⚫️ Такой механизм, в отличие от простого увеличения комиссии, открывает возможность условной выплаты «взятки» — например, только в случае финансово выгодной операции. Это может проверяться при получении результатов атаки на кошельке валидатора. Таким образом он становится сам заинтересован в наиболее эффективном расположении транзакции.
⚫️ Однако для функционирования подобного кошелька требуется модификация софта, которым пользуются валидаторы, чтобы иметь возможность автоматически обрабатывать транзакции на подобные кошельки и подставлять нужный адрес, а также сортировать их для поиска собственной выгоды.
⚫️ Что это значит для среднестатистического пользователя? Есть еще 1000 и 1 способ нас с вами побрить. Существует множество пока нереализованных механик для TON, каждая из которых открывает новые возможности для разработчиков переиграть рядового пользователя в торговле. Как защититься? По возможности устанавливать минимальный slippage при свопах.
⚫️ Благодарим команду The Open Dev Blog за подготовку материала! Если интересуетесь разработкой на TON или просто любите читать про технические особенности блокчейна — подписывайтесь на их канал.
@thedailytonrus