2022-04-06 11:59:53
Хотите узнать немного про главного неудачника недели? И так немного размышлений, не знаю как это еще назвать. Я тут вроде как приободрился и начал более-менее активно работать, поделюсь немного пережитым опытом.
В прошлые выходные нацеливался на паблик ArcadeLand земель, но у меня сейчас бомж-режим и я не могу участвовать в газварах. Поэтому я решил испытать удачи в фронтране, пусть шансов мало, но и риск почти нулевой. Достал свой старый код, сдул пыль, кое-чего поправил, протестил в тестнете, запустил на отложенный старт и ушёл спать. На самом деле не ушёл, а паралельно писал флешботс версию, но чёт не завелось (хотя прежде работало), а меня уже рубило, так что я просто забил.
С утра чекнул - транза не прошла, печаль, но есть логи для изучения. На первый взгляд все четко, поймали транзу создателя, встали за ней. В следующем блоке ловим конфирм транзы создателя, но не ловим свой. Значит мы не попали в блок и участвуем в газваре со всеми. Дальше код должен проверить нужно ли ускорить транзу, и может не ускорять если в конфиге явно указано “нельзя” или расчетный средний газ выше моего максимального лимита. Видимо я где то косякнул и на этот случай не вывел лог, потому что транза не пыталась ускоряться и я не знаю почему. Отклонилась через 9 минут когда газ стабилизировался.
В теории не попасть в блок создателя я мог по ряду причин, самое банальное:
- Поздно обнаружил и задекодил транзакцию создателя
- RPC-Нода затупила (возможно тормоза сети + паблик rpc типа инфуры любят тупить во время сейлов)
- Транза создателя оказалось в конце блока и мне тупо не хватило места. Ну или таких же фронтранеров образовалось так много что все не влезли, тут вообще хз какой алгоритм сортировки т.к газ у всех выставлен одинаковый. Возможно по времени создания в мемпуле, упираемся в п.2
- Транза создателя была создана в обход мемпула
В попытках понять где самое слабое место и на что можно повлиять я обнаружил что:
1. Получение события о новом блоке срабатывает с задержкой в 2-9 сек. Но может быть и 30 сек. Причем алхими стабильно на 2 сек. быстрее инфуры. Возможно это лаг провайдера, возможно это нормальный лаг сети. В интернетах люди с нодами в целом задаются теми же вопросами, ответ на который примерно “ну таймштамп блока это самое первое время его майнинга, а узлы сети так то должны валидировать этот блок и только потом распространять информацию другим узлам, поэтому влияет размер сети и т.д”. Совершенно непонятно есть ли какой-то способ на это повлиять.
2. Тестнет показал, что время от времени может не хватить 2.5 секунд между отправкой транзы в мемпул и майнингом нового блока, даже когда блоки почти пустые и сеть не нагружена. Грубо говоря - нельзя успеть в последнюю миллисекунду влететь в мемпул в надежде попасть в pending блок, нужен запас в пару секунд. Это сильно сужает шанс на успех.
3. Блок в котором включился паблик оказался подозрительно пустым, всего 70 транзакций. А транзакция создателя самая первая в блоке. Ну прям идеальные условия что-бы все прошло идеально для меня. Но эти читеры кинули транзу через flashbots, а значит транзакция приватная, не попадала в мемпул и мой код не мог увидеть создание такой транзы. Поэтому мой код вызвался уже когда транзакция замайнилась, что автоматически означает попадание в самое пекло газвара. Фактически оказалось что я перехватил транзакцию на три секунды позже времени когда она была смайнена (лаг из п.1). Хотя я так и не смог понять как так я вообще перехватил эту транзу, в тестнете воспроизвести не получилось.
949 views08:59