Когда видно ошибку Fail и не понятно, что вообще случилось при майнинге транзакции, можно поседеть и сесть на антидепрессанты, но можно этого избежать, если посмотреть расширенное исполнение транзакции в tenderly.
Или когда tx.logs не достаточно для понимания контекста исполнения транзакции.
Такой функционал становится доступен с помощью перевыполнения смайненой транзакции в более детальном режим с 'traces=true'
Когда это полезно:
- Транзакция получила revert и не понятно, где искать ошибку. В таком случае получится увидеть контракт, который сделал revert и если там открытый исходный код, то даже строку revert'a. Пример свап где нет деталей ошибки tenderly;bscscan но видно в tenderly (фото2,фото3)
- Как устроен, например, минт nft по вызовам функций tenderly;bscscan (фото4)
Это основной, но не единственный, функционал у tenderly. Еще есть
- tx simulator
- alerts
- web3 gateway
- web3 hooks
Или когда tx.logs не достаточно для понимания контекста исполнения транзакции.
Такой функционал становится доступен с помощью перевыполнения смайненой транзакции в более детальном режим с 'traces=true'
Когда это полезно:
- Транзакция получила revert и не понятно, где искать ошибку. В таком случае получится увидеть контракт, который сделал revert и если там открытый исходный код, то даже строку revert'a. Пример свап где нет деталей ошибки tenderly;bscscan но видно в tenderly (фото2,фото3)
- Как устроен, например, минт nft по вызовам функций tenderly;bscscan (фото4)
Это основной, но не единственный, функционал у tenderly. Еще есть
- tx simulator
- alerts
- web3 gateway
- web3 hooks
rpc.csv
1.4 KB
RPC - remote procedure call, внешне, это ссылка вида https://... или wss://… Криптокошельки через rpc связываются с блокчейном.
Есть две ценовых модели у платных rpc провайдеров:
- Плата за обработанные запросы. Можно абузить rpc-batch-call и 1inch-multicall :D
- Плата за нагрузку (CU=compute units).
Тренд1: поверх классических библиотек web3|ethers провайдеры стремятся сделать на их основе свои супер-пупер SDK, с расчетом, что пользователям позже станет очень больно переносить код с SDK.
Тренд2: новые провайдеры готовы давать качественный сервис намного дешевле.
Хобби проекты все еще могут обойтись бесплатными провайдерами плюс proxy-rotation и мультиакки на рпц.
Проектам посерьезнее, но с низкой нагрузкой на rpc - подходят все варианты.
Проектам еще более мощным, модель CU не подходит, и остается оплата за запросы или содержание собственных нод.
Небольшое исследование провайдеров прикрепил в .csv файле
Есть две ценовых модели у платных rpc провайдеров:
- Плата за обработанные запросы. Можно абузить rpc-batch-call и 1inch-multicall :D
- Плата за нагрузку (CU=compute units).
Тренд1: поверх классических библиотек web3|ethers провайдеры стремятся сделать на их основе свои супер-пупер SDK, с расчетом, что пользователям позже станет очень больно переносить код с SDK.
Тренд2: новые провайдеры готовы давать качественный сервис намного дешевле.
Хобби проекты все еще могут обойтись бесплатными провайдерами плюс proxy-rotation и мультиакки на рпц.
Проектам посерьезнее, но с низкой нагрузкой на rpc - подходят все варианты.
Проектам еще более мощным, модель CU не подходит, и остается оплата за запросы или содержание собственных нод.
Небольшое исследование провайдеров прикрепил в .csv файле
В bsc через 10 000 блоков (~8 часов) произойдет хардфорк Hertz (эфировские EIP Berlin,London)
Некоторые из изменений:
- BEP-231 (EIP-2930), фича accessList для контрактов. Идея в том, чтобы заранее передать адреса, которые читать несколько раз, для экономии газа
- BEP-227 (EIP-3198) внедрение basefee опкода, одна из ступеней сделать как в eth, что есть tx.type=2 и baseFeePerGas, maxPriorityFeePerGas
- BEP-212 (EIP-3529) selfdestruct теперь не делает кешбек, от которого зависят chi, gst2
После применения хардфорка появится DynamicFee(1559) тип транзакций, аналогичные уже есть в eth чейне
Некоторые из изменений:
- BEP-231 (EIP-2930), фича accessList для контрактов. Идея в том, чтобы заранее передать адреса, которые читать несколько раз, для экономии газа
- BEP-227 (EIP-3198) внедрение basefee опкода, одна из ступеней сделать как в eth, что есть tx.type=2 и baseFeePerGas, maxPriorityFeePerGas
- BEP-212 (EIP-3529) selfdestruct теперь не делает кешбек, от которого зависят chi, gst2
После применения хардфорка появится DynamicFee(1559) тип транзакций, аналогичные уже есть в eth чейне
InVM - изнутри о Web3
Снимок экрана 2022-12-17 в 10.50.44.png
#HACK Помолчал и хватит.
В сентябре стремился повторить salmonela.
Идея в том, что нужно отправить такую "уязвимую транзакцию", что на нее поведется frontrun/backrun бот и не сможет продать токены обратно.
Идеальный пример выглядит так:
- Взять за основу код классического контракта от OpenZeppelin
- Добавить ряд переключателей, чтобы или брать комиссию или отключать свапы
- Создать uniswap v2 пару c некоторой ликвидностью
- Отправить транзакцию обмена со slippage >X$ потерь
- Frontrun бот разместит свои транзакции так, что заработает себе X$ из нашего slippage
- Но несколько позиций в блоке Frontrun бот держит наши токены
- Отключаем возможность продажи через бандл или любым другим способом
- Как итог, Frontrun бот купил наших токенов, но продать не сможет.
- Профит!
Но на практике все очень сложно:
- Если подменять собственную транзакцию свапа со слиппеджем на транзакцию отключения свапов, то боты это видят и даже подменяют свои FR транзы на self-send. Но чаще видят и совсем не реагируют
- Если отправить свап как обычно, а отключение свапов через бандл, то снова никто не ловится, боты это видят.
После тестов в eth/bsc/arbitrum/polygon/avax/base могу с уверенность сказать, что:
- Frontrun и Backrun боты работают исключительно через бандлы, а бандлы есть в eth/bsc
- В любых других блокчейнах без бандлов, есть только снайпер-боты что покупают на копейки свеже-созданный токен
- Благодаря бандлам, боты полностью защищены от подмен и ловушек, риск только в совбстенных ошибках в боте.
- Есть такой тип ботов, что стремится выкупить сапплай токена при резком дампе цены до микро-центов, чтобы мгновенно зарабатывать с любого притока $ в торговую пару.
Касательно бандл-провайдеров, в eth их много, все они форкнулись от flashbots.
В bsc два покемона, первый bnb48.
В сентябре стремился повторить salmonela.
Идея в том, что нужно отправить такую "уязвимую транзакцию", что на нее поведется frontrun/backrun бот и не сможет продать токены обратно.
Идеальный пример выглядит так:
- Взять за основу код классического контракта от OpenZeppelin
- Добавить ряд переключателей, чтобы или брать комиссию или отключать свапы
- Создать uniswap v2 пару c некоторой ликвидностью
- Отправить транзакцию обмена со slippage >X$ потерь
- Frontrun бот разместит свои транзакции так, что заработает себе X$ из нашего slippage
- Но несколько позиций в блоке Frontrun бот держит наши токены
- Отключаем возможность продажи через бандл или любым другим способом
- Как итог, Frontrun бот купил наших токенов, но продать не сможет.
- Профит!
Но на практике все очень сложно:
- Если подменять собственную транзакцию свапа со слиппеджем на транзакцию отключения свапов, то боты это видят и даже подменяют свои FR транзы на self-send. Но чаще видят и совсем не реагируют
- Если отправить свап как обычно, а отключение свапов через бандл, то снова никто не ловится, боты это видят.
После тестов в eth/bsc/arbitrum/polygon/avax/base могу с уверенность сказать, что:
- Frontrun и Backrun боты работают исключительно через бандлы, а бандлы есть в eth/bsc
- В любых других блокчейнах без бандлов, есть только снайпер-боты что покупают на копейки свеже-созданный токен
- Благодаря бандлам, боты полностью защищены от подмен и ловушек, риск только в совбстенных ошибках в боте.
- Есть такой тип ботов, что стремится выкупить сапплай токена при резком дампе цены до микро-центов, чтобы мгновенно зарабатывать с любого притока $ в торговую пару.
Касательно бандл-провайдеров, в eth их много, все они форкнулись от flashbots.
В bsc два покемона, первый bnb48.
Уже есть multicall3. Свои версии были у makerdao(v2) и 1inch(v1).
Когда нужно сделать много операций чтения из блокчейна, например прочитать баланс 100_000 адресов определенного токена. Пути решения такие:
1. Один rpc запрос = одно чтение баланса, супер медленно, даже с потоками
2. Один rpc запрос, но внутри много параллельных eth_call = уже лучше, но будет много контекстов, излишняя нагрузка на открытие/закрытие контекста чтения блокчейна для ноды.
3. Делим задачу на кусочки по 100 адресов, отправляем через multicall3, один запрос один контекст, по накладным ресурсам самое эффективное.
Из плюсов то, что есть в 70+ блокчейнах, не нужно размещать свой код
Когда нужно сделать много операций чтения из блокчейна, например прочитать баланс 100_000 адресов определенного токена. Пути решения такие:
1. Один rpc запрос = одно чтение баланса, супер медленно, даже с потоками
2. Один rpc запрос, но внутри много параллельных eth_call = уже лучше, но будет много контекстов, излишняя нагрузка на открытие/закрытие контекста чтения блокчейна для ноды.
3. Делим задачу на кусочки по 100 адресов, отправляем через multicall3, один запрос один контекст, по накладным ресурсам самое эффективное.
Из плюсов то, что есть в 70+ блокчейнах, не нужно размещать свой код
Существует такой сайт, как haveibeenpwned.com, с его помощью можно проверить, в каких утечках баз данных есть конкретный почтовый адрес, но он для web2 (почты-пароли).
Какая польза от web2 версии?
1. Пользователи часто используют одинаковые пароли на разных сайтах. Риск брутфорса.
2. Для серого маркетинга, если почта "утекла", то мог и телефон, а там подключатся из службы безопасности скам-банка.
3. Через несколько лет haveibeenpwned интегрировали в firefox monitor (ссылка на анонс)
Для web3 такого нет, но у нас есть все, чтобы попытаться сделать.
Идея в том, чтобы собрать скомпроментированные кошельки из eth/bsc и других блокчейнов чтобы сделать интерфейс проверки адреса на наличие в базе.
Почему нужна web3 версия?
1. Если просыпается кошелек и начинает активничать в разных сетях, он может не догадываться, что в bsc уже стоит бот автовывода
2. Централизованные биржи могут снизить риск вывода токенов на скомпроментированный адрес юзерами
3. Web3-кошельки могут показывать при импорте кошелька, что он скомпроментирован, снизить риск потери токенов в попытке вывести их из кошелька.
Почему у нас есть ресурсы это сделать?
1. Понятно как реализовать технически и тянуть хоть 1млрд уникальных строк без 4х значных счетов за аренду.
2. Подписчики из разных сфер деятельности, расчитываю на помощь в сборе, не могу все видеть.
3. Если с web2 верией уже все понятно, это распустившийся цветок, то с web3 еще нет, есть потенциал найти новые полезные направления, где промежуточный этап как раз такой сервис.
4. Почему бы и нет)
Жду вашей реакции, скоро опишу процедуру как скидывать файлы, чтобы все по красоте было)
Какая польза от web2 версии?
1. Пользователи часто используют одинаковые пароли на разных сайтах. Риск брутфорса.
2. Для серого маркетинга, если почта "утекла", то мог и телефон, а там подключатся из службы безопасности скам-банка.
3. Через несколько лет haveibeenpwned интегрировали в firefox monitor (ссылка на анонс)
Для web3 такого нет, но у нас есть все, чтобы попытаться сделать.
Идея в том, чтобы собрать скомпроментированные кошельки из eth/bsc и других блокчейнов чтобы сделать интерфейс проверки адреса на наличие в базе.
Почему нужна web3 версия?
1. Если просыпается кошелек и начинает активничать в разных сетях, он может не догадываться, что в bsc уже стоит бот автовывода
2. Централизованные биржи могут снизить риск вывода токенов на скомпроментированный адрес юзерами
3. Web3-кошельки могут показывать при импорте кошелька, что он скомпроментирован, снизить риск потери токенов в попытке вывести их из кошелька.
Почему у нас есть ресурсы это сделать?
1. Понятно как реализовать технически и тянуть хоть 1млрд уникальных строк без 4х значных счетов за аренду.
2. Подписчики из разных сфер деятельности, расчитываю на помощь в сборе, не могу все видеть.
3. Если с web2 верией уже все понятно, это распустившийся цветок, то с web3 еще нет, есть потенциал найти новые полезные направления, где промежуточный этап как раз такой сервис.
4. Почему бы и нет)
Жду вашей реакции, скоро опишу процедуру как скидывать файлы, чтобы все по красоте было)
Октябрь, пятница, тринадцатое.
Подобная идея сервиса созревает больше пяти месяцев, самое сложное было разобраться внутри себя, а хватит ли сил не смышиться.
Репутация важнее и я верю, что намного приятнее и стабильнее будет делать бизнес, чем разовая нажива на двуличности.
В крайнем случае лучше удалю эти файлы, чем предам себя)
Если готовы поделиться списком скомпроментированных кошельков, вот общая информация:
Поддерживаемые форматы строк:
- address, возьму случайные адреса и попрошу скинуть к ним данные для создания идентичного адреса, это поможет снизить шанс добавления ложно-скомпроментированных адресов, наименее предпочтительный вариант.
- seed - генериую адреса на 0м пути, как metamask или ethers делают.
- privateKey - генерирую адреса
- любое сочетание address/privateKey/seed с понятным разделителем
- количество строк и файлов любое
Опциональные меры сохранения анонимности:
- Загружать zip-архив на облачное хранилище с ограниченным временем действия ссылки на скачивание
- Ссылку на скачивание прятать за privnote
- Использовать telegram secret chat (обычно доступен из мобильного приложения), писать @zerofuz.
Скам-детектор: добавить один адрес с 1-10$ и если он проявит активность после добавления в базу, значит админ заскамился :D
Подобная идея сервиса созревает больше пяти месяцев, самое сложное было разобраться внутри себя, а хватит ли сил не смышиться.
Репутация важнее и я верю, что намного приятнее и стабильнее будет делать бизнес, чем разовая нажива на двуличности.
В крайнем случае лучше удалю эти файлы, чем предам себя)
Если готовы поделиться списком скомпроментированных кошельков, вот общая информация:
Поддерживаемые форматы строк:
- address, возьму случайные адреса и попрошу скинуть к ним данные для создания идентичного адреса, это поможет снизить шанс добавления ложно-скомпроментированных адресов, наименее предпочтительный вариант.
- seed - генериую адреса на 0м пути, как metamask или ethers делают.
- privateKey - генерирую адреса
- любое сочетание address/privateKey/seed с понятным разделителем
- количество строк и файлов любое
Опциональные меры сохранения анонимности:
- Загружать zip-архив на облачное хранилище с ограниченным временем действия ссылки на скачивание
- Ссылку на скачивание прятать за privnote
- Использовать telegram secret chat (обычно доступен из мобильного приложения), писать @zerofuz.
Скам-детектор: добавить один адрес с 1-10$ и если он проявит активность после добавления в базу, значит админ заскамился :D
По наводке из комментариев к прошлому посту, открылся непокрытый сегмент в виде тестовых кошельков для разработки solidity контрактов.
Известно о таких:
hardhat - js/ts/sol
truffle - js/ts/sol
anvil - rust/sol
embark - js/ts/sol, тот случай, когда гуглится сначала ветклиника, а потом фреймворк 😄
Какие еще сайты проверить на наличие кошельков?
Известно о таких:
hardhat - js/ts/sol
truffle - js/ts/sol
anvil - rust/sol
embark - js/ts/sol, тот случай, когда гуглится сначала ветклиника, а потом фреймворк 😄
Какие еще сайты проверить на наличие кошельков?
Барабанная дробь
Опубликован интерфейс для взаимодействия с базой скомпроментированных адресов haveibeenrected.
Критика и пожелания приветствуются
Опубликован интерфейс для взаимодействия с базой скомпроментированных адресов haveibeenrected.
Критика и пожелания приветствуются
Приятно знать, что у кого-то получилось сделать рабочую версию ретродроп фармилки с микросервисами. Great minds think alike…
Forwarded from Криптологическая экспедиция (THE MEMOLOGICAL EXPEDITION)
А вот что мы делаем с ретродропами:
- у нас написан свой софт для того, чтобы делать транзакции и анализировать статистику
- ничего стороннего не используем и не продаём софт/доступ
Архитектура у нас такая:
- база данных и бэкенд: храним все кошельки, зашифрованные приватники, балансы (регулярно индексируем)
- апи бэкенда и фронтенд: можно добавлять, генерировать кошельки, разделять их на группы и пользователей, создавать задачи, смотреть и создавать "события", базовую статистику
- скрипты-задачи. Сами транзакции у нас делает не бэкенд, а отдельные скрипты, написанные по шаблону и отдельно запущенные на сервере. Они получают всё нужное по защищенному апи от бэка и точно так же по апи могут создавать события, чтобы бэк, другие скрипты и сам скрипт-задача при перезапуске были в курсе о состоянии того или иного кошелька, таска и так далее
- wizard. Это штука для ручного проведения различных действий типа докинуть с биржи на конкретный акк или сделать csv с балансами определенной сети и токенов
Всё это пишем уже более полугода, и сначала казалось, что такая архитектура это слишком, ведь проще всего просто один скрипт написать, и в нём всё гонять. Но сейчас она уже оправдывает себя. Рассказать подробнее?
- у нас написан свой софт для того, чтобы делать транзакции и анализировать статистику
- ничего стороннего не используем и не продаём софт/доступ
Архитектура у нас такая:
- база данных и бэкенд: храним все кошельки, зашифрованные приватники, балансы (регулярно индексируем)
- апи бэкенда и фронтенд: можно добавлять, генерировать кошельки, разделять их на группы и пользователей, создавать задачи, смотреть и создавать "события", базовую статистику
- скрипты-задачи. Сами транзакции у нас делает не бэкенд, а отдельные скрипты, написанные по шаблону и отдельно запущенные на сервере. Они получают всё нужное по защищенному апи от бэка и точно так же по апи могут создавать события, чтобы бэк, другие скрипты и сам скрипт-задача при перезапуске были в курсе о состоянии того или иного кошелька, таска и так далее
- wizard. Это штука для ручного проведения различных действий типа докинуть с биржи на конкретный акк или сделать csv с балансами определенной сети и токенов
Всё это пишем уже более полугода, и сначала казалось, что такая архитектура это слишком, ведь проще всего просто один скрипт написать, и в нём всё гонять. Но сейчас она уже оправдывает себя. Рассказать подробнее?
InVM - изнутри о Web3
Барабанная дробь Опубликован интерфейс для взаимодействия с базой скомпроментированных адресов haveibeenrected. Критика и пожелания приветствуются
Как устроена работа изнутри у haveibeenrected:
1. База хранится в leveldb (key-value хранилище в файлах), чтобы минимум зависимостей, влезут миллиарды строк, ТБ данных, но есть один недостаток: только одно соединение за раз
2. Вебсервер это expressjs, который отдает html и обрабатывает api запросы от пользователей к leveldb. Ограничение в 250 запросов в секунду
3. Домен - cloudflare - nginx - сервер, ssl с обеих сторон к cloudflare.
4. Обработка файлов происходит через bash-команды, такие как cat|cut|split|uniq|comm
5. Отдельный скрипт для расширения leveldb базы.
Если нагрузка повысится, нужно перенести код вебсервера на golang, чтобы одним процессом занимать всю доступную процессорную мощность, а не как в nodejs: 1 процесс = 1 ядро.
Отдельная история с фронтендом: имея референсы https://www.ipify.org/ и https://www.useweb3.xyz/ просил chatgpt создать html+js код, потому что лень писать самому) В том числе кнопки копирования curl в буфер обмена.
1. База хранится в leveldb (key-value хранилище в файлах), чтобы минимум зависимостей, влезут миллиарды строк, ТБ данных, но есть один недостаток: только одно соединение за раз
2. Вебсервер это expressjs, который отдает html и обрабатывает api запросы от пользователей к leveldb. Ограничение в 250 запросов в секунду
3. Домен - cloudflare - nginx - сервер, ssl с обеих сторон к cloudflare.
4. Обработка файлов происходит через bash-команды, такие как cat|cut|split|uniq|comm
5. Отдельный скрипт для расширения leveldb базы.
Если нагрузка повысится, нужно перенести код вебсервера на golang, чтобы одним процессом занимать всю доступную процессорную мощность, а не как в nodejs: 1 процесс = 1 ядро.
Отдельная история с фронтендом: имея референсы https://www.ipify.org/ и https://www.useweb3.xyz/ просил chatgpt создать html+js код, потому что лень писать самому) В том числе кнопки копирования curl в буфер обмена.