InVM - изнутри о Web3
326 subscribers
45 photos
5 files
69 links
Про тонкости работы Defi в EVM-блокчейнах глазами solidity разработчика.

Админ @zerofuz
Download Telegram
Давно научился ускорять процесс обработки однотипных строк процесс с помощью sublime text 3.

Основная идея в том, что вместо одного мигающего веделения, так называемой вертикальной палочки, можно сделать их несколько и писать с помощью этого в нескольких местах одну команду

Например, есть список
ip1:port1
ip2:port2
...


Нужно добавить в начало строки 'http://'
// cmd(mac) = ctrl(windows)
1. Выделить :
2.a Eсли строк несколько десятков: cmd+D столько раз, сколько : подряд нужно выделить.
2.b Если строк много, то cmd+C (скопировать ':'), cmd+F, cmd+V, ’Find all’. Выделятся все ':'
3. cmd+Home, чтобы перейти всеми выделениями максимально влево строки. Тут нужно поиграться с тем, как передвигать выделения в начало/конец строки, влево/вправо на слово. cmd,option,ctrl,alt,стрелочки,pgUp,pgDown,end.
4. Написать 'http://'

Схожим образом можно заменить . на , чтобы правильно импортировались числа в таблицу.

Cделать все в одну строку:
1. cmd+F, \n
2. Убедиться что включен поиск по regexpr (слева от окна поиска кнопка ‘.*’)
3. Find All
4. del, пробел

Для более сложных паттернов есть с регулярные выражения (regexpr).
Головоломка, почему адрес неконтракта принимает usdt, когда to=0xdAC17F958D2ee523a2206206994597C13D831ec7 (не контракт в сети bsc)

https://bscscan.com/tx/0x3ace52daa2e58ac03d45443cd593b9343b55473410e06d28e9685bcfed007223
#FULLNODE
Для запуска eth full node нужно минимум 650гб nvme

+14gb в неделю на хранение блоков/транзакций и тд, всего, что можно удалить через prune-state

По этому гайду все запустилось меньше чем за 24 часа.

Правда есть особенность, prysm’y нужно дать доверенный источник, чтобы быстрее пошла синхронизация. Без = 20 блоков в секунду. С = 50+ блоков в секунду.

Пример запуска prysm+geth

Для ускорения синхронизации:
./prysm/prysm.sh beacon-chain --execution-endpoint=$HOME/.ethereum/geth.ipc --block-batch-limit 1024 --checkpoint-block 15815920 --checkpoint-sync-url https://beaconstate.ethstaker.cc

Выбрать ссылку отсюда
#FULLNODE
Существует способ запустить bsc full node и занять от 350гб (сам state) с помощью снапшота от bnb48

официальный снапшот

bnb48 снапшот (Скорость скачивания получалась 400Мб/с), на весь запуск потребовалась пара часов

В общих чертах нужно:
- Запустить скачивание и разархивирование снапшота одной командой
- Скачать/скомпилировать geth и его mainnet.toml
- На основе команды запуска geth от bnb48, обновить datadir и запустить.
#DEFI
Как мы все знаем, в bsc минимальный gasPrice = 5gwei.

Но отдельный валидатор, если захочет, может принимать транзакции с 1gwei.

Идея в том, что пользователю нужно купить токен 1KOGE=11$.
1KOGE = 240000 gasLimit максимум.
Рост gasLimit от количества koge нелинейный, детали в офф чате.

Имея 1koge и установив их rpc link можно отправлять сколько угодно транзакций с 1gwei и до 240000gasLimit.

Пост-релиз в офф чате
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
InVM - изнутри о Web3
#HACK Вероятный вектор обхода блокировки на продажу до роста цены: Контекст: 1. Так как пара токена добавлена в исключения, она всегда отправляет мгновенно, потому что все пользователи могут покупать много раз (пара отправляет токены к пользователю) 2. Как…
Сейчас идет спам-рассылка что нужно срочно покупать sui(bsc) убийца aptos’a в первые часы иксы все дела.

Но продать никто кроме админов не сможет.

И находятся люди, кто покупает: https://dexscreener.com/bsc/0xa71832bc3743e7453317a714ddfcfb0383e5f688 , не ловите FOMO)

На втором фото, if _to == unknown… это проверка на то, чтобы не позволять указать получателя pancakeswap.pair с ликвидностью sui*-busd. Покупать можно без проблем этот скам, но продать нельзя
Есть способ визуализации занимаемого пространста на накопителе в виде кубиков разного размера, соотвествующих размеру файла, а цвет - директории.

Если где-то затеряется файл на сотни GB, и про него уже все забыли, то так его можно обнаружить и удалить))

Для macos grandperspective
Для windows WinDirStat, SpaceSniffer
#HACK
21 Октября обнаружилась неочевидная уязвимость в olympusDao.

Контракт, на котором 300k$ohm+, слепо доверял данным переданного токена в функции получения награды.

Закладываем нужные параметры для обхода проверок по timestamp и получаем токены OHM (55$ohm), пока они не кончатся у контракта

twitter
#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: у валидатора низкий стейк, поэтому редко выигрывает аукцион на создание блоков
Недавно 1inch представили подход, чтобы обезопасить обмены пользователей от оборачивания потенциально уязвимых транзакций обменов для frontrun/backrun через flashbots для ethereum.

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тб.
#HACK
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 операции.
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
InVM - изнутри о Web3 pinned «Навигация О чем этот канал? #DEFI - uniswapV2, пары, боты Пример ethers+js Blockscan Uni форки AMM Pancakeswap.allPairsLength Про кошельки EVM,CEX,DEX Токен Landing protocol Как шортить через landing Uniswap USDT,USDC ERC20.approve Автоматизация…»