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

Админ @zerofuz
Download Telegram
#EVM #DEFI

EVM - Ethereum Virtual Machine - среда исполнения смартконтрактов, который комплируются таким путем: solidity -> opcode -> bytecode. Самое близкое по смыслу это исполнение ассемблера, только на распределенном компьютере

CEX - Centralized EXchange - централизованная площадка, с базой данных, серверами, сотрудниками, регистрацией в дружелюбных странах, платит налоги (наверное), больше похоже на легальную компанию. Нужно KYC. Имеют возможность ограничивать свободы граждан отдельных стран.

DEX - Decentralized EXchange - несколько связанных по смыслу смарт-контрактов, загруженных в блокчейн сеть (ETH). Для пользователей есть stateless сайтик на vuejs/react, который подключается к eth по rpc-url, исходный код на гитхабе. Технически нельзя остановить* или забанить пользователя*, KYC не нужно.

*=если не заложено такого функционала в смарт-контракте
#EVM

Не так давно нужны были недели, чтобы обработать вручную тысячи токенов, читать их код на bscscan, искать скрытые комиссии, это работа обезьянки, а не разработчика))

Встретил проект TokenChecks и понял, что именно это я давно искал))

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

Это не защитит от скам-токенов, которые может выключить админ, но для большинства токенов в сети это здорово помогает.

Что изменилось:
- Легко добавлять блокчейн сети и параметры DEX’ов. Протестировал в сети ETH, BSC, работает.
- Есть вычисления сколько скрытых комиссий в токене при обмене в обе стороны.

Приглашаю затестить https://github.com/0fuz/TokenChecks
#EVM #DEFI
Про апрув

Для начала ERC20 обмена нужно разрешить dex.router распоряжаться вашим конкретным erc20 токеном, потому что при транзакции обмена роутер сам передает необходимое количество токенов пользователя на адрес первой пары в пути обмена, которая по цепочке передает второй токен роутеру.

Поэтому важно проверять, кому дается approve (фишинговый страницы могут просить на свой адрес дать апрув)

На первый взгляд такая практика кажется несостоятельной, но на деле, когда контракт роутера не содержит уязвимостей и багов, можно спать спокойно))
#EVM
Обнаружил два идентичных по логике контракта, созданных в 2015 году

Они вызвали интерес тем, что они старые и на них есть ETH, может авторы допустили ошибку в коде и забыли про существование своих поделок, потому что в 2015 году 1ETH<1$ 😄

130ETH
9ETH

Принцип их работы в подражании реферальной системе с уровнями. Один уровень это условно 10 ставок. Чем выше в пирамиде, тем дольше будут начисления. Тот уровень пирамидки, где мы можем занять место, разделит 130eth между более ранними уровнями, а нам ничего не достанется, пока не задонатят больше пользователей, которые создадут новый уровень пирамидки

Так вот, возможно 100% вызвать создание нового слоя пирамидки и один из кошельков получит больше 100ETH, потому что он много участвовал, но мне так не выгодно, я только пожертвую 10ETH и может через 50лет мне что-то вернется 😄
Навигация

О чем этот канал?

#DEFI - uniswapV2, пары, боты
Пример ethers+js
Blockscan
Uni форки
AMM
Pancakeswap.allPairsLength
Про кошельки
EVM,CEX,DEX
Токен
Landing protocol
Как шортить через landing
Uniswap
USDT,USDC
ERC20.approve
Автоматизация dune
4byte.directory
Rpc.batch
Bsc gasPrice=1gwei

#EVM - нюансы работы evm-блокчейнов
EVM,CEX,DEX
TokenChecks
ERC20.approve
Контракт 2015 года с 130eth
Evm.solidity.fn.signature
Pair.skim
Profanity https://t.me/invmru/71 https://t.me/invmru/76
4byte.directory
Структура байткода
Rpc.batch
1inch.router вывод любых токенов
TOTP на bsc

#HACK - разбор взломов и скам токенов
Обман в дискорде
Что за скам токен
Harmony.one-ethereum
Как теряют деньги мамонты
Solana, 8000 кошельков
Исса. Скам
Исса. Вероятный вектор обхода
Profanity
Celsius
Eth POW
Honeypot
OlympusDao
Frontrun bot потерял 80$
Frontrun. Детали атаки 1/2
Frontrun. Детали атаки 2/2

#FR_BR - frontrun, backrun боты
Пример успешного обмена
Что такое BR
Свой Backrun бот https://t.me/invmru/51 https://t.me/invmru/53 https://t.me/invmru/77

#GETH - как устроена внутри работа главной fullnode eth/bsc
EstimateGas
Flashbots.simulate

#FULLNODE - Как запустить fullnode
Eth
Bsc

#FLASHBOTS
Eth.flashbots.simulate
Polygon.flashbots

Trading view
Про создателей tradingview
Гадание на кейной гуще
VRVP

Личные проекты
TokenChecks https://t.me/invmru/21 https://t.me/invmru/73
Signature Profanity
abi-guesser-webserver

Не всем проектам нашлось место с тегом, продублирую их здесь, но они классные:
Copilot
Blockscan
Chainlist, defilama
Deepface live
Electric capital report
MidJourney
Dune
4byte.directory
Sublime text 3
Сколько занято ГБ на накопителе кубиками
#EVM
pair.skim(to)

Внутри uniswapV2.pair/pancakeswap есть функция pair.skim(to). 578 строка

Она состоит из двух* строк, задача которых перевести все излишки токенов пары к to. Если token0.balanceOf(pair) > _reserve0, то излишки можно получить на свой кошелек.

Количество пыли обнуляется после mint, burn, swap, потому что вызывается _update().

Если просканировать все доступные пары в bsc и avax на количество токенов после skim, встречаются такие заброшенные пары, из которых можно забрать noname токен (через skim) или второй токен, который зачастую wBNB/wAVAX.

Но их количество в 99% случаев не окупит затрат на транзакцию. И очень много скам-токенов, поэтому важно качество симуляции своих транзакций.

Вероятно уже реализован бот, который вызывает skim после определенных событий. Например, когда mint, swap пользователь делает несколькими транзакциями, образуется временное окно, где через skim можно вывести нераспределённые токены.
InVM - изнутри о Web3
С помощью https://dune.com можно взаимодействовать с eth/bsc/matic/optimism блокчейнами через sql запросы и упаковывать в инфографики, например «прирост деплоев смарт-контрактов по месяцам». Мне сильно пригодился для того, чтобы выгрузить все адреса еth…
#EVM #DEFI
11кк abi собрано, если обогащать базу сигнатур функций, то тут на 10% больше, чем в 4byte.directory

Большинство контрактов на solidity, попадаются vyper.

Чаще всего попадаются такие опкоды для идентификации сигнатур в байткоде:
// aa bb cc dd = сигнатура
// 63 = PUSH4 означает что длина сигнатуры 4 байта (минимум 1 байт, поэтому 1+3)функции
80 63 aa bb cc dd …

или
80 62 aa bb cc …. // 62 = PUSH3
80 61 aa bb ….
80 60 aa ….

Живой пример weth (байткод внизу)
06fdde03 = name()
095ea7b3 = approve(address,uint256)
#EVM
После компиляции .sol в bytecode внутренняя структура начинается с выбора корректной функции для старта.

что-то вроде «если сигнатура X, то JUMP на Y позицию»

Следовательно, возможно обращаться к контрактам, у которых нет объявленного abi, зная их внутренние функции.

Если умеем выделять сигнатуры в коде, то можно попытаться подобрать аргументы вызова функции в слепую, наиболее распространенные transfer(address,uint256) и тд
#EVM #DEFI
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»
#EVM
В контракте роутера 1inch заложен функционал, что любой может вывести токены, которые по ошибке отправлены роутеру.

Это замечательная практика, чтобы не превращать фантики в мертвые фантики, отправленные по ошибке, которые будут лежать на адресе до скончания времен.

Думаю было бы хорошей практикой сделать что-то вроде «если с контрактом не взаимодействую дольше 2х лет по timestamp, то разрешить его удаление (selfdestruct) и вывод всех erc20 токенов инициатору». При массовом внедрении это позволит сократить размер node state.

Например, в bsc есть 25кк контрактов.
15кк из них удалено (bytecode = 0x)
10кк живые, но большинство неактивны.
Размер bsc ноды по bnb48 около 350гб, full node займет больше 1тб.