InVM - изнутри о Web3
#GETH EstimageGas метод использует тот же инструментарий что и во время создания блоков. Только применятся меньше правил. Общие моменты: - берут состояние state на запрошенный блок Х - подготавливают EVM контекст для исполнения транзакций Разные моменты:…
#GETH #FLASHBOTS
Перед отправкой бандла в flashbots, нужно произвести симуляцию бандла и убедиться что все транзакции будут исполнены без ошибок. Пример
Внутри это устроено так, что запущен форк geth под названием mev-geth внутри которого есть среди прочего метод симуляции бандла eth_callBundle, который последовательно виртуально исполняет транзакции, давая максимально реалистичный ответ, если бы тоже самое выполнить в mainnet без конкуренции.
Что нужно сделать, чтобы получить аналогичный метод симуляции в собстенной ноде geth?
- Простой ответ: запустить mev-geth и подружить с консенсус-клиентом
- Сложный ответ: нужно зарегистрировать кастомный namespace и дополнить внутренние методы.
По шагам:
1. В GetAPIs нужно передавать два аргумента, и тут
2. Регистрируем свой api-namespace с префиксом eth_ и добавляем прием двух аргументов
3. Определяем апи метод CallBundle
4. Дополнить внутренние методы исполнения транзакций, чтобы получать еще и receipt. Раз, Два
Думаю, что blocknative взял за основу callBundle и предлагает 300 симуляций (Simulations, Simulation Bundle Size) за всего-лишь 100$/mo
Перед отправкой бандла в flashbots, нужно произвести симуляцию бандла и убедиться что все транзакции будут исполнены без ошибок. Пример
Внутри это устроено так, что запущен форк geth под названием mev-geth внутри которого есть среди прочего метод симуляции бандла eth_callBundle, который последовательно виртуально исполняет транзакции, давая максимально реалистичный ответ, если бы тоже самое выполнить в mainnet без конкуренции.
Что нужно сделать, чтобы получить аналогичный метод симуляции в собстенной ноде geth?
- Простой ответ: запустить mev-geth и подружить с консенсус-клиентом
- Сложный ответ: нужно зарегистрировать кастомный namespace и дополнить внутренние методы.
По шагам:
1. В GetAPIs нужно передавать два аргумента, и тут
2. Регистрируем свой api-namespace с префиксом eth_ и добавляем прием двух аргументов
3. Определяем апи метод CallBundle
4. Дополнить внутренние методы исполнения транзакций, чтобы получать еще и receipt. Раз, Два
Думаю, что blocknative взял за основу callBundle и предлагает 300 симуляций (Simulations, Simulation Bundle Size) за всего-лишь 100$/mo
InVM - изнутри о Web3
#HACK Вероятный вектор обхода блокировки на продажу до роста цены: Контекст: 1. Так как пара токена добавлена в исключения, она всегда отправляет мгновенно, потому что все пользователи могут покупать много раз (пара отправляет токены к пользователю) 2. Как…
Сейчас идет спам-рассылка что нужно срочно покупать sui(bsc) убийца aptos’a в первые часы иксы все дела.
Но продать никто кроме админов не сможет.
И находятся люди, кто покупает: https://dexscreener.com/bsc/0xa71832bc3743e7453317a714ddfcfb0383e5f688 , не ловите FOMO)
На втором фото,
Но продать никто кроме админов не сможет.
И находятся люди, кто покупает: https://dexscreener.com/bsc/0xa71832bc3743e7453317a714ddfcfb0383e5f688 , не ловите FOMO)
На втором фото,
if _to == unknown…
это проверка на то, чтобы не позволять указать получателя pancakeswap.pair с ликвидностью sui*-busd. Покупать можно без проблем этот скам, но продать нельзяЕсть способ визуализации занимаемого пространста на накопителе в виде кубиков разного размера, соотвествующих размеру файла, а цвет - директории.
Если где-то затеряется файл на сотни GB, и про него уже все забыли, то так его можно обнаружить и удалить))
Для macos grandperspective
Для windows WinDirStat, SpaceSniffer
Если где-то затеряется файл на сотни GB, и про него уже все забыли, то так его можно обнаружить и удалить))
Для macos grandperspective
Для windows WinDirStat, SpaceSniffer
#FLASHBOTS
Для polygon тоже есть аналог flashbots, со свом mev-bor. Cделала команда marlin (которые больше, чем BDN bloxroute).
На этом хорошие новости закончились, потому что единственный валидатор 0x88c5e96c1459d224383dcb1fe0cedd1fcee25ffb создает блоки очень редко, например:
15 часов назад
11 дней назад
15 дней назад
17 дней назад
И это для сети, где блок создается раз в 2 секунды.
Если еще не передумали отправлять бандл в полигоне, то вот в помощь:
1. Убедиться, что валидатор сейчас валидирует блоки, а не неделю назад 0x88c5e96c1459d224383dcb1fe0cedd1fcee25ffb
2. С помощью контракта можно отправлять чаевые, не зная валидатора (как у flashbots подход) 0x0b787209ecb980e444babce86e980162288fafc3
3. eth_callBundle (симуляция бандла) возможна только на своей ноде mev-bor
4. Пример кода и доки marlin
5. Пример кода, с помощью которого получилось смайнить бандл 15 часов назад))
Upd: у валидатора низкий стейк, поэтому редко выигрывает аукцион на создание блоков
Для polygon тоже есть аналог flashbots, со свом mev-bor. Cделала команда marlin (которые больше, чем BDN bloxroute).
На этом хорошие новости закончились, потому что единственный валидатор 0x88c5e96c1459d224383dcb1fe0cedd1fcee25ffb создает блоки очень редко, например:
15 часов назад
11 дней назад
15 дней назад
17 дней назад
И это для сети, где блок создается раз в 2 секунды.
Если еще не передумали отправлять бандл в полигоне, то вот в помощь:
1. Убедиться, что валидатор сейчас валидирует блоки, а не неделю назад 0x88c5e96c1459d224383dcb1fe0cedd1fcee25ffb
2. С помощью контракта можно отправлять чаевые, не зная валидатора (как у flashbots подход) 0x0b787209ecb980e444babce86e980162288fafc3
3. eth_callBundle (симуляция бандла) возможна только на своей ноде mev-bor
4. Пример кода и доки marlin
5. Пример кода, с помощью которого получилось смайнить бандл 15 часов назад))
Upd: у валидатора низкий стейк, поэтому редко выигрывает аукцион на создание блоков
Недавно 1inch представили подход, чтобы обезопасить обмены пользователей от оборачивания потенциально уязвимых транзакций обменов для frontrun/backrun через flashbots для ethereum.
bloxroute (eth/bsc BDN) представили аналог, только для любых транзакций. Если отправлять транзакции через их rpc url, тогда транзакции не попадают в публичный мемпул. Дополнительная опция в том, что если вдруг транзакция обмена выгодна для ботов, то эти боты должны поделиться профитом с кошельком, который обмен инициировал https://t.me/bloXrouteLabsCommunity/28893
bloxroute (eth/bsc BDN) представили аналог, только для любых транзакций. Если отправлять транзакции через их rpc url, тогда транзакции не попадают в публичный мемпул. Дополнительная опция в том, что если вдруг транзакция обмена выгодна для ботов, то эти боты должны поделиться профитом с кошельком, который обмен инициировал https://t.me/bloXrouteLabsCommunity/28893
#EVM
В контракте роутера 1inch заложен функционал, что любой может вывести токены, которые по ошибке отправлены роутеру.
Это замечательная практика, чтобы не превращать фантики в мертвые фантики, отправленные по ошибке, которые будут лежать на адресе до скончания времен.
Думаю было бы хорошей практикой сделать что-то вроде «если с контрактом не взаимодействую дольше 2х лет по timestamp, то разрешить его удаление (selfdestruct) и вывод всех erc20 токенов инициатору». При массовом внедрении это позволит сократить размер node state.
Например, в bsc есть 25кк контрактов.
15кк из них удалено (bytecode = 0x)
10кк живые, но большинство неактивны.
Размер bsc ноды по bnb48 около 350гб, full node займет больше 1тб.
В контракте роутера 1inch заложен функционал, что любой может вывести токены, которые по ошибке отправлены роутеру.
Это замечательная практика, чтобы не превращать фантики в мертвые фантики, отправленные по ошибке, которые будут лежать на адресе до скончания времен.
Думаю было бы хорошей практикой сделать что-то вроде «если с контрактом не взаимодействую дольше 2х лет по timestamp, то разрешить его удаление (selfdestruct) и вывод всех erc20 токенов инициатору». При массовом внедрении это позволит сократить размер node state.
Например, в bsc есть 25кк контрактов.
15кк из них удалено (bytecode = 0x)
10кк живые, но большинство неактивны.
Размер bsc ноды по bnb48 около 350гб, full node займет больше 1тб.
InVM - изнутри о Web3
#EVM В контракте роутера 1inch заложен функционал, что любой может вывести токены, которые по ошибке отправлены роутеру. Это замечательная практика, чтобы не превращать фантики в мертвые фантики, отправленные по ошибке, которые будут лежать на адресе до…
Вот пример, никто не может вывести 56к$usdt, потому что в логику контракта не заложено, благо здесь прокси контракт и в перспективе админы могут обновить implementation и вывести себе))
InVM - изнутри о Web3
#EVM В контракте роутера 1inch заложен функционал, что любой может вывести токены, которые по ошибке отправлены роутеру. Это замечательная практика, чтобы не превращать фантики в мертвые фантики, отправленные по ошибке, которые будут лежать на адресе до…
Подсказки:
1. Адрес 1inch router v2
2. Пример транзакции вывода токенов
3. По моим данным там лежит целых 6$, но нужно обернуть в flashbots bundle
1. Адрес 1inch router v2
2. Пример транзакции вывода токенов
3. По моим данным там лежит целых 6$, но нужно обернуть в flashbots bundle
#HACK
Frontrun боты видят многое, но не все. По следам поста, которому больше 2х лет, попробовал свои силы, чтобы перехитрить ботов.
Общий алгоритм:
1. Создать максимально безопасный токен для трейда
2. Создать пару с ликвидностью
3. Совершать обмены с огромным slippage
4. Сделать так, чтобы бот думал что он выйдет в плюс, но на деле он или не видит или не успеет отменить свои транзакции.
После очередной проверки гипотезы, которым счет идет на десятки, удачно сложилась гипотеза+распространение транзакций, и бот не увидел подвоха
Фото 1. Бот покупает токен JH (в паре +80$bnb)
Фото 2. Моя транзакция обычного свапа с огромным slippage (условно amountOutMin=1). В худшем случае дарю боту 13$bnb.
Фото 3. Бот продает все JH и получает лишь 9$bnb (так как предоставляю ликвидность в пару только я, значит +90$ ко мне)
Под капотом бот не увидел моей второй, но первой транзакции, которая включила комиссии для всех не админов токена в 90% комиссии.
Жду вашей реакции, чтобы показать обратную сторону маленькой победы)
Frontrun боты видят многое, но не все. По следам поста, которому больше 2х лет, попробовал свои силы, чтобы перехитрить ботов.
Общий алгоритм:
1. Создать максимально безопасный токен для трейда
2. Создать пару с ликвидностью
3. Совершать обмены с огромным slippage
4. Сделать так, чтобы бот думал что он выйдет в плюс, но на деле он или не видит или не успеет отменить свои транзакции.
После очередной проверки гипотезы, которым счет идет на десятки, удачно сложилась гипотеза+распространение транзакций, и бот не увидел подвоха
Фото 1. Бот покупает токен JH (в паре +80$bnb)
Фото 2. Моя транзакция обычного свапа с огромным slippage (условно amountOutMin=1). В худшем случае дарю боту 13$bnb.
Фото 3. Бот продает все JH и получает лишь 9$bnb (так как предоставляю ликвидность в пару только я, значит +90$ ко мне)
Под капотом бот не увидел моей второй, но первой транзакции, которая включила комиссии для всех не админов токена в 90% комиссии.
Жду вашей реакции, чтобы показать обратную сторону маленькой победы)
InVM - изнутри о Web3
#HACK Frontrun боты видят многое, но не все. По следам поста, которому больше 2х лет, попробовал свои силы, чтобы перехитрить ботов. Общий алгоритм: 1. Создать максимально безопасный токен для трейда 2. Создать пару с ликвидностью 3. Совершать обмены с огромным…
#HACK 1/2
Чтобы заинтересовать frontrun ботов, нужно:
- Отправить транзакцию обмена через публичный мемпул
- Подобрать правильное соотношение ликвидности в паре и размеру свапа, чтобы боту было интересно. Например 30$bnb-100JH в паре, и свап на 10-15$bnb с очень низким slippage. Frontrun транзакции делают так, что пользователь обменяет токены по максимально не выгодному для пользователя курсу обмена (при slippage 99% = amountOutMin=1wei) бот 'заберет' все $bnb из транзакции.
- Чем объемнее ликвидность в паре, тем сложнее боту значительно влиять на цену и нужно больше капитала для этого.
- Учитывать случайность распространения транзакций по мемпулу между нодами, не каждый раз боты увидят.
- Чтобы другие транзакции публичного мемпула не испортили прибыльность боту.
Чтобы перехитрить ботов в bsc, только транзакции обмена недостаточно, они видят все, что происходит в публичном мемпуле и даже улавливают связи, что первая транзакция ок, а вторая ломает боту frontrun операции.
Чтобы заинтересовать frontrun ботов, нужно:
- Отправить транзакцию обмена через публичный мемпул
- Подобрать правильное соотношение ликвидности в паре и размеру свапа, чтобы боту было интересно. Например 30$bnb-100JH в паре, и свап на 10-15$bnb с очень низким slippage. Frontrun транзакции делают так, что пользователь обменяет токены по максимально не выгодному для пользователя курсу обмена (при slippage 99% = amountOutMin=1wei) бот 'заберет' все $bnb из транзакции.
- Чем объемнее ликвидность в паре, тем сложнее боту значительно влиять на цену и нужно больше капитала для этого.
- Учитывать случайность распространения транзакций по мемпулу между нодами, не каждый раз боты увидят.
- Чтобы другие транзакции публичного мемпула не испортили прибыльность боту.
Чтобы перехитрить ботов в bsc, только транзакции обмена недостаточно, они видят все, что происходит в публичном мемпуле и даже улавливают связи, что первая транзакция ок, а вторая ломает боту frontrun операции.
InVM - изнутри о Web3
#HACK 1/2 Чтобы заинтересовать frontrun ботов, нужно: - Отправить транзакцию обмена через публичный мемпул - Подобрать правильное соотношение ликвидности в паре и размеру свапа, чтобы боту было интересно. Например 30$bnb-100JH в паре, и свап на 10-15$bnb с…
Снимок экрана 2022-12-17 в 10.50.44.png
65.9 KB
#HACK 2/2
Почти единственный путь, это отправить транзакцию активации ловушки в токене через приватный мемпул bnb48. Но и тут есть 'случайности'. Часто активация проиходит позже, чем предсказано и очень похоже, что bnb48 через своего frontrun бота умышленно замедляет активацию, чтобы с 20k$bnb заработать 13$bnb (Фото 1)
Часть попыток перехитрить ботов переходят в подарить им bnb :D
Моя маленькая победа в +90$bnb стоила порядка ~200$(~10$ на попытку).
Во время проверки новой гипотезы, в токене не предусмотрел отключение всех ловушек. По итогу еще 180$ навсегда в паре :D. Тут только один вывод, ВСЕГДА делать запасные отключения ловушек, потому что они могут сработать и на админа :D
Почти единственный путь, это отправить транзакцию активации ловушки в токене через приватный мемпул bnb48. Но и тут есть 'случайности'. Часто активация проиходит позже, чем предсказано и очень похоже, что bnb48 через своего frontrun бота умышленно замедляет активацию, чтобы с 20k$bnb заработать 13$bnb (Фото 1)
Часть попыток перехитрить ботов переходят в подарить им bnb :D
Моя маленькая победа в +90$bnb стоила порядка ~200$(~10$ на попытку).
Во время проверки новой гипотезы, в токене не предусмотрел отключение всех ловушек. По итогу еще 180$ навсегда в паре :D. Тут только один вывод, ВСЕГДА делать запасные отключения ловушек, потому что они могут сработать и на админа :D
InVM - изнутри о Web3 pinned «Навигация О чем этот канал? #DEFI - uniswapV2, пары, боты Пример ethers+js Blockscan Uni форки AMM Pancakeswap.allPairsLength Про кошельки EVM,CEX,DEX Токен Landing protocol Как шортить через landing Uniswap USDT,USDC ERC20.approve Автоматизация…»
InVM - изнутри о Web3
pinned «Навигация О чем этот канал? #DEFI - uniswapV2, пары, боты Пример ethers+js Blockscan Uni форки AMM Pancakeswap.allPairsLength Про кошельки EVM,CEX,DEX Токен Landing protocol Как шортить через landing Uniswap USDT,USDC ERC20.approve Автоматизация…»
Переосмыслена оглавление навигация по постам, предлагаю ознакомиться еще раз, вдруг найдется что-то стоящее)
Команда etherscan добавила расширение «Node Tracker», что в ней интересного:
// Держите в уме, что запуск одной ноды стоит от 500$ на aws в месяц
// erigon https://github.com/ledgerwatch/erigon клиент хранит данные емче geth, новые блоки с задержкой.
ethereum 6040936 нод в p2p сети
Топ 2 страны US 56%, DE 14%
Официальный клиент ноды geth (на golang) занимает 60% от запущенных нод
Erigon 14%
Q-client 14% (Что это такое?)
bsc 451534 нод в p2p сети
Топ 3 страны US 54%, Ireland 14%, DE 11%.
bsc-geth официальный клиент (форк geth) занимает 43%
erigon клиент 56%
polygon 55035 нод в p2p сети
Топ 3 страны US 52%, DE 30%, FR 4%
bor оффициальный клиент (форк geth) заимает 71%
erigon 20%
0.7% нод запущено счастливчиками на windows 😄
gnosis 30784 нод в p2p сети
Топ 3 страны US 41%, DE 16%, FR 5%
Nethermind (C# оффициальный клиент) занимает 97%
Заметки:
1. erigon значительно вырос за последний год. Авторы из СНГ
2. Большая доля erigon сигнализирует об интересе в data mining из archival node, когда хранится ВСЯ история транзакций, счет идет на ТераБайты. Например AML сканерам будет дешевле содержать erigon, чем geth
3. Децентрализация по гео слабая, около половины нод в US.
4. Децентрализация по провайдерам нод точно не лучше. Большинство приходится на aws, google cloud, azure.
5. «Node Tracker» фича прикольная, но делает легче сбор ip адресов нод для последующего сканирования на открытые порты, поиск валидаторов с недостаточной защитой и абуз мощностей, если открыты rpc порты (как для metamask короче)
6. «Эта ж сколько бабок тратится на столько запущенных нод»
// Держите в уме, что запуск одной ноды стоит от 500$ на aws в месяц
// erigon https://github.com/ledgerwatch/erigon клиент хранит данные емче geth, новые блоки с задержкой.
ethereum 6040936 нод в p2p сети
Топ 2 страны US 56%, DE 14%
Официальный клиент ноды geth (на golang) занимает 60% от запущенных нод
Erigon 14%
Q-client 14% (Что это такое?)
bsc 451534 нод в p2p сети
Топ 3 страны US 54%, Ireland 14%, DE 11%.
bsc-geth официальный клиент (форк geth) занимает 43%
erigon клиент 56%
polygon 55035 нод в p2p сети
Топ 3 страны US 52%, DE 30%, FR 4%
bor оффициальный клиент (форк geth) заимает 71%
erigon 20%
0.7% нод запущено счастливчиками на windows 😄
gnosis 30784 нод в p2p сети
Топ 3 страны US 41%, DE 16%, FR 5%
Nethermind (C# оффициальный клиент) занимает 97%
Заметки:
1. erigon значительно вырос за последний год. Авторы из СНГ
2. Большая доля erigon сигнализирует об интересе в data mining из archival node, когда хранится ВСЯ история транзакций, счет идет на ТераБайты. Например AML сканерам будет дешевле содержать erigon, чем geth
3. Децентрализация по гео слабая, около половины нод в US.
4. Децентрализация по провайдерам нод точно не лучше. Большинство приходится на aws, google cloud, azure.
5. «Node Tracker» фича прикольная, но делает легче сбор ip адресов нод для последующего сканирования на открытые порты, поиск валидаторов с недостаточной защитой и абуз мощностей, если открыты rpc порты (как для metamask короче)
6. «Эта ж сколько бабок тратится на столько запущенных нод»
#HACK
Произошла спланированная атака на sandwith MEV ботов. ~25kk$
Коротко:
- Атакующие стали валидаторами и создали токен пару недель назад.
- Отправили выгодную транзакцию свапа в мемпуле и арб боты перехватили ее (тоесть в бандле смайнится быстрее чем в публичном мемпуле) и отправили бандл (mevTx1, targetTx, mevTx2), все поверхностные проверки что бандл прибыльный пройдены.
- Этот бандл попал на майнинг блока к атакующему валидатору (например валидатор подключен к flashbots)
- Валидатор подменил target на обратное направление свапа, сделав mevTx2 убыточной
- Смайнил блок
Стоимость атаки:
- 32eth(валидатор)
- Создание токена с ликвидностью 10k-500k$
- Подобрать такое соотношение ликвидности и размера свапа, чтобы sandwith боты вливали млн$ чтобы извлечь выгоду из «очевидно прибыльной транзакции»
Источник:
https://twitter.com/PeckShieldAlert/status/1642787345366941697
Произошла спланированная атака на sandwith MEV ботов. ~25kk$
Коротко:
- Атакующие стали валидаторами и создали токен пару недель назад.
- Отправили выгодную транзакцию свапа в мемпуле и арб боты перехватили ее (тоесть в бандле смайнится быстрее чем в публичном мемпуле) и отправили бандл (mevTx1, targetTx, mevTx2), все поверхностные проверки что бандл прибыльный пройдены.
- Этот бандл попал на майнинг блока к атакующему валидатору (например валидатор подключен к flashbots)
- Валидатор подменил target на обратное направление свапа, сделав mevTx2 убыточной
- Смайнил блок
Стоимость атаки:
- 32eth(валидатор)
- Создание токена с ликвидностью 10k-500k$
- Подобрать такое соотношение ликвидности и размера свапа, чтобы sandwith боты вливали млн$ чтобы извлечь выгоду из «очевидно прибыльной транзакции»
Источник:
https://twitter.com/PeckShieldAlert/status/1642787345366941697
#HACK
Sushiswap RouterProcessor2 контракт скомпроментирован, атакующие могут распоряжаться средствами, которые разрешено тратить контракту.
В сети eth 0x044b75f554b886a065b9567891e45c79542d7357, и других сетях.
Один из вариантов проверить, не дал ли кошелек лишний апрув, так: https://etherscan.io/tokenapprovalchecker , ввести адрес кошелька и посмотреть его approvals, подозрительные отключить.
Для исполнения атаки нужен собственный контракт, который обащается к RouterProcessor2.uniswapV3SwapCallback
Источник: https://twitter.com/peckshield/status/1644907207530774530?s=20
Sushiswap RouterProcessor2 контракт скомпроментирован, атакующие могут распоряжаться средствами, которые разрешено тратить контракту.
В сети eth 0x044b75f554b886a065b9567891e45c79542d7357, и других сетях.
Один из вариантов проверить, не дал ли кошелек лишний апрув, так: https://etherscan.io/tokenapprovalchecker , ввести адрес кошелька и посмотреть его approvals, подозрительные отключить.
Для исполнения атаки нужен собственный контракт, который обащается к RouterProcessor2.uniswapV3SwapCallback
Источник: https://twitter.com/peckshield/status/1644907207530774530?s=20