#EVM #DEFI
Rpc запросы к evm провайдерам можно делать пачками, не один eth_call а сразу тысяча в одном запросе.
Пример curl
- Важно менять ‘id’
- Максимум 1000 элементов, зависит от провайдера
- Если внутри заменить eth_blockNumber на etc_call + свой контракт, то можно повысить емкость одного запроса еще в 10-100 раз
- На один eth_call ограничение в несколько млн газа
- Гуглить список rpc api так «eth eth_call»
Rpc запросы к evm провайдерам можно делать пачками, не один eth_call а сразу тысяча в одном запросе.
Пример curl
curl --request GET \
--url https://eth-mainnet.public.blastapi.io/ \
--header 'Content-Type: application/json' \
--data '[{"jsonrpc":"2.0","id":0,"method":"eth_blockNumber","params":[]},{"jsonrpc":"2.0","id":1,"method":"eth_blockNumber","params":[]},{"jsonrpc":"2.0","id":2,"method":"eth_blockNumber","params":[]}]'
- Важно менять ‘id’
- Максимум 1000 элементов, зависит от провайдера
- Если внутри заменить eth_blockNumber на etc_call + свой контракт, то можно повысить емкость одного запроса еще в 10-100 раз
- На один eth_call ограничение в несколько млн газа
- Гуглить список rpc api так «eth eth_call»
Celsius требовал KYC
Celsius обанкротился
Celsius опубликовал 14к данных пользователей (имя, дата, сделка) по решению суда
https://twitter.com/0xfoobar/status/1578168737529794561
Правда ли KYC так необходим повсюду?
Upd:
«требовал» и «опубликовал» связаны
«требовал» и «обранкротился» не связано, просто хронология))
Celsius обанкротился
Celsius опубликовал 14к данных пользователей (имя, дата, сделка) по решению суда
https://twitter.com/0xfoobar/status/1578168737529794561
Правда ли KYC так необходим повсюду?
Upd:
«требовал» и «опубликовал» связаны
«требовал» и «обранкротился» не связано, просто хронология))
Вчера вышел 8й пакет санкций ЕС, если коротко, то все биржи, которые ввели 10к евро лимит, теперь понижают этот лимит до 0
Будьте осторожны
Будьте осторожны
В момент перехода eth на PoS в середине сентября, появился минимум один форк: ETHW.
Часть майнеров отказалась принимать большое обновление и их цепочка блоков отделилась от оригинального еth. Тоесть все транзакции до блока Х связаны с eth сетью, но после блока X баланс пользователей раздвоился. Если у пользователя было 1eth,100dai, то такой баланс будет в сетях ETH,ETHW.
И в первые часы существовало много арбитражных возможностей в форкнутой сети.
Например, оракл chainlink, который раз в несколько минут обновляет рыночную цену eth(нативного токена) перестал обновляться в сети ethw. Следовательно, aave и другие landing протоколы не могут корретно соотносить ценность займа и залога.
Более практичный пример, правда когда его проверял, вся ликвидность на aave уже выжата:
1. 1ethw в «реальном» мире стоил 14$, у CEX такой курс был.
2. Цена нативного токена в сети ethw от chainlink 1300$(1ethw)
3. В uniswap 1ethw=36k$
Стратегия:
1000$CEX меняем на ethw
71ethw (1000$CEX)
71*36000=2 556 000$ (ethw меняем на $ в сети ethw через uniswap)
Вносим обеспечение 2.5kk$ в aave (в сети ethw)
Так как у aave старые цены оракла, то он считает что 1ethw стоит 1300$, значит при нашем залоге в 2.5kk$ выдаст 1572ethw при 80% обеспечения.
Выводим 1572ethw на биржу, продаем по 14$, получаем 22008$CEX
Другое направление в том, чтобы нормализовать курсы обмена пар в пределах dex’ов, вероятно там есть пары, которые еще не уравновешены между собой. Задача для BR бота, с последующим выходом в ethw.
Через несколько часов после форка все токены кроме ethw стали фантиками без привязки к реальным ценам. Субъективное ощущение, что все, что позволяет получать ethw уже выжато.
Специфика подобного поиска еще в том, что никакого интерфейса нет, нужно обращаться на прямую к смарт-контрактам, а это значительно сужает порог входа.
Вероятно инициаторы форка неплохо заработали, так как хорошо понимали подобные направления.
Часть майнеров отказалась принимать большое обновление и их цепочка блоков отделилась от оригинального еth. Тоесть все транзакции до блока Х связаны с eth сетью, но после блока X баланс пользователей раздвоился. Если у пользователя было 1eth,100dai, то такой баланс будет в сетях ETH,ETHW.
И в первые часы существовало много арбитражных возможностей в форкнутой сети.
Например, оракл chainlink, который раз в несколько минут обновляет рыночную цену eth(нативного токена) перестал обновляться в сети ethw. Следовательно, aave и другие landing протоколы не могут корретно соотносить ценность займа и залога.
Более практичный пример, правда когда его проверял, вся ликвидность на aave уже выжата:
1. 1ethw в «реальном» мире стоил 14$, у CEX такой курс был.
2. Цена нативного токена в сети ethw от chainlink 1300$(1ethw)
3. В uniswap 1ethw=36k$
Стратегия:
1000$CEX меняем на ethw
71ethw (1000$CEX)
71*36000=2 556 000$ (ethw меняем на $ в сети ethw через uniswap)
Вносим обеспечение 2.5kk$ в aave (в сети ethw)
Так как у aave старые цены оракла, то он считает что 1ethw стоит 1300$, значит при нашем залоге в 2.5kk$ выдаст 1572ethw при 80% обеспечения.
Выводим 1572ethw на биржу, продаем по 14$, получаем 22008$CEX
Другое направление в том, чтобы нормализовать курсы обмена пар в пределах dex’ов, вероятно там есть пары, которые еще не уравновешены между собой. Задача для BR бота, с последующим выходом в ethw.
Через несколько часов после форка все токены кроме ethw стали фантиками без привязки к реальным ценам. Субъективное ощущение, что все, что позволяет получать ethw уже выжато.
Специфика подобного поиска еще в том, что никакого интерфейса нет, нужно обращаться на прямую к смарт-контрактам, а это значительно сужает порог входа.
Вероятно инициаторы форка неплохо заработали, так как хорошо понимали подобные направления.
#GETH
EstimageGas метод использует тот же инструментарий что и во время создания блоков. Только применятся меньше правил.
Общие моменты:
- берут состояние state на запрошенный блок Х
- подготавливают EVM контекст для исполнения транзакций
Разные моменты:
- EstimateGas ограничивается исполнением транзакции и взятием только GasUsed (/internal/ethapi/api.go:1056
- Во время создания блока исполняются все транзакции и формируется их receipt с сохранением нового состояния state. (Копать от core/state_processor.go:95
В теории возможно производить симуляцию своих транзакций *без signTransaction* и получать tx.Logs и прочие детали будто транзакция смайнена.
EstimageGas метод использует тот же инструментарий что и во время создания блоков. Только применятся меньше правил.
Общие моменты:
- берут состояние state на запрошенный блок Х
- подготавливают EVM контекст для исполнения транзакций
Разные моменты:
- EstimateGas ограничивается исполнением транзакции и взятием только GasUsed (/internal/ethapi/api.go:1056
DoEstimateGas
)- Во время создания блока исполняются все транзакции и формируется их receipt с сохранением нового состояния state. (Копать от core/state_processor.go:95
applyTransaction
)В теории возможно производить симуляцию своих транзакций *без signTransaction* и получать tx.Logs и прочие детали будто транзакция смайнена.
Давно научился ускорять процесс обработки однотипных строк процесс с помощью sublime text 3.
Основная идея в том, что вместо одного мигающего веделения, так называемой вертикальной палочки, можно сделать их несколько и писать с помощью этого в нескольких местах одну команду
Например, есть список
Нужно добавить в начало строки 'http://'
// cmd(mac) = ctrl(windows)
1. Выделить
2.a Eсли строк несколько десятков:
2.b Если строк много, то
3.
4. Написать 'http://'
Схожим образом можно заменить
Cделать все в одну строку:
1.
2. Убедиться что включен поиск по regexpr (слева от окна поиска кнопка ‘.*’)
3.
4.
Для более сложных паттернов есть с регулярные выражения (regexpr).
Основная идея в том, что вместо одного мигающего веделения, так называемой вертикальной палочки, можно сделать их несколько и писать с помощью этого в нескольких местах одну команду
Например, есть список
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
https://bscscan.com/tx/0x3ace52daa2e58ac03d45443cd593b9343b55473410e06d28e9685bcfed007223
#FULLNODE
Для запуска eth full node нужно минимум 650гб nvme
+14gb в неделю на хранение блоков/транзакций и тд, всего, что можно удалить через prune-state
По этому гайду все запустилось меньше чем за 24 часа.
Правда есть особенность, prysm’y нужно дать доверенный источник, чтобы быстрее пошла синхронизация. Без = 20 блоков в секунду. С = 50+ блоков в секунду.
Пример запуска prysm+geth
Для ускорения синхронизации:
Выбрать ссылку отсюда
Для запуска 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 и запустить.
Существует способ запустить 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.
Пост-релиз в офф чате
Как мы все знаем, в 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
Перед отправкой бандла в 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