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

Админ @zerofuz
Download Telegram
#DEFI

Подготовил пример работы с кошельком через библиотеку ethers на javascript

- Создание кошелька
- Импорт кошелька
- Получение баланса нативного токена и erc20
- Отправка от себя себе нативного токена и erc20

https://gist.github.com/0fuz/fb2cd39a81b45877ee0240a4327a7bcb
#DEFI
На фото ниже сети, которые поддерживаются одним blockchain explorer от команды etherscan

Введя один адрес, можно увидеть, в каких сетях он был активен

https://blockscan.com/
#DEFI

Занятные цифры по uniswap форкам (Подсчитал, сколько уникальных factory адресов, кто хотя бы раз создавал пару в разных сетях, за календарный год):

Ethereum (ETH) - 169
BSC(BNB) - 1651
Avax - 96
Polygon(matic) - 481
Fantom (FTM) - 210
Arbitrum (ONE) - 27
Aurora - 43
Klaytn - 156
Optimism - 2
Hecochain - 248
Gnosis - 77
KCC - 52

- Стоит учитывать, что это не показатель абсолютной ценности. Не нужно развивать продукты исключительно в bsc, есть альтернативы.
- Большинство dex можно считать заброшенными, там нет сообщества, но есть код и есть пары, в которых могут остаться «арбитражные возможности» с устаревшим соотношением токенов.
#DEFI

AMM (Automated market maker) - наиболее распространенный способ обмена токенов. Большая часть dex являются адаптированными форками от uniswap v2. Значит возможно взаимодействовать с огромной долей ликвидности с помощью одного кода.

Создается смарт-контракт, в котором хранится два вида токенов BNB, USDT.

Вносим bnb, контракт отправляет usdt.

Чем меньше usdt, тем больше нужно bnb.

Контракт всегда проверяет, что удержал комиссию за обмен (отправил чуть меньше usdt).

Если такой пары еще нет в factory, то будет создан смарт-контракт.

Пользователь может ошибиться и передать не рыночное соотношение токенов, например при 1bnb=300usdt, пользователь создаст пару с 1bnb=100usdt. Такое соотношение токенов не рыночное и боты «перельют ликвидность» так, что через пару блоков курс обмена станет ближе к 1bnb=300usdt.

Гипотетически, если создать пару с настолько огромным объемом, то возможно повлиять на рыночную цену в нужную сторону.
#DEFI

Defi рынок развивается. На dex pancakeswap в сети binance smart chain (bsc):

2021.сентябрь 700к пар
2022.февраль 830к пар
2022.июнь 970к пар

Большая часть этих пар конечно неликвидная или связана со скам-токенами, но сама динамика поражает.

Проверить достоверность подсчета можно так:
1. Посетить pancakeswap.factory
2. https://www.bscscan.com/address/0xca143ce32fe78f1f7019d7d551a6402fc5350c73#readContract
3. Поле allPairsLength содержит число пар
4. С большинством пар возможно совершить обмен через pancakeswap.router https://www.bscscan.com/address/0x10ED43C718714eb63d5aA57B78B54704E256024E

Отдельный вопрос, почему bscscan видит только 4195 pairCreated транзакций.
#DEFI
Основа криптокошелька это приватный ключ (или сид фраза, которая превращается в приватный ключ автоматически), который должен знать только владелец.

Криптовалютный кошелек может быть двух типов:
Кастодиальный - когда приватный ключ хранится третьей стороной и вся надежность зависит от порядочности и уровня безопасности кастодиала.
Некастодиальный - приватный ключ знает только владелец кошелька и больше никто. Это правильный путь владения криптовалютой

Еще кошельки делятся по теплоте:
Горячие - постоянно подключены к интернету (metamask, trustwallet, и т.д.)
Холодные - подключаются к интернету на короткое время только при необходимости (ledger, trezor, safepal)

На криптобиржах большая часть средств на холодных кошельках и малая часть на горячих. В случае взлома, под угрозой горячие кошельки, а не все средства CEX криптобиржи

Аппаратные кошельки выглядят надежно, потому что они некастодиальные и холодные, но тут есть риски деанона адреса покупателя (такие взломы уже есть) и заложенные уязвимости в аппаратную часть (есть гипотеза, что iOS/android специально закладывают 0-day уязвимости для спецслужб, но их могут найти другие, например израильская (NSO group, dtf source). Если так делают с операционными, то могут и с холодными кошельками. Это не означает, что каждый пользователь под угрозой, и это не массовая история, но такое нужно иметь в виду)
#EVM #DEFI

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

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

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

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

Токен - смарт-контракт, который соблюдает стандарт ERC20. Хранит балансы своих пользователей в «словаре» ключ(адрес):значение(баланс). Имеет функционал передачи токенов другим кошелькам. Технически, токены никуда дальше контракта не уходят, просто меняется владелец некоторого числа токенов.

Но что делать, если админу нужно сжечь токен?

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

Адреса, куда попадают «сожженные» токены:
⁃ 0x0000000000000000000000000000000000000000
⁃ 0x000000000000000000000000000000000000dEaD

Посмотреть актуальную стоимость адресов можно в сканерах блокчейна:
Сорок ноликов
Деед в конце
#DEFI

Landing protocol - Defi проект, где есть две стороны: залоги и займы. Популярные протоколы AAVE, Compound, Vires Finance, Venus. Актуальность их курсов обмена зависит от Chainlink контрактов, которые предоставляют не предвзятые и рыночно средние актуальные цены.

Годовые в займах всегда немного выше чем в залогах.

Ликвидация это когда залог стоит меньше займа пользователя и его health factor негативный. Landing контракт позволяет выкупить инициатору транзакции ликвидации залог со скидкой в >5%. Пользователь с ликвидированной позицией теряет залог, но остается с займом, который не нужно возвращать.

Чтобы не ликвидировало, важно следить за health factor и уровнем обеспечения, если можно взять 80% от залога, то безопаснее брать 50%. Когда btc просел на 10%, 50% превратятся в 60%.

В теории, если позицию пользователя нужно ликвидировать, но инициировать такую транзакцию некому, то и ликвидация не наступит))

Сценарии использования:
⁃ Внести залог $, взять заем в 50% в btc, поторговать, погасить заем в btc+комиссия, вернуть свои $.
⁃ Внести залог $ и получать годовые
⁃ Участвовать в ликвидации чужих позиций и получать залог по скидке от рыночной цены только за то, что помогли очистить позицию с низким health factor
⁃ Когда денег много, можно займом давать нужный импульс токенам с низкой капитализацией и извлекать из этого выгоду.
⁃ Шортить, когда зарабатываем на понижении цены токена
#DEFI
Как шортить в defi через landing

1btc = 20000$

Вносим залог 1000$usdt
Заем (80% максимальный, возьмем 60% в btc) 1000$/20000$/btc*60% = 0,03 btc // получили на свой кошелек
Продали мгновенно 0,03btc->600$

1btc = -10%, 18000$

0.3btc->0.03333btc(659$)
Вернули заем в 0,03btc + мизерные проценты годовых, разлочили свой залог

Владеем 1000$, 0,0033btc(59,4$) = 1059,4$ или прибыль в 6% при падении цены на 10%

Важно, чтобы ценность залога всегда была выше 80% чтобы не произошло ликвидации
#DEFI
Команда проекта Uniswap первой разработала и внедрила DEX на AMM с возможностью FlashSwap, именно ее в свое время форкнул проект SushiSwap. Большинство AMM DEX это форки Uniswap v2.

Существует Uniswap v3, но исходный код временно закрыт, из нововведений там введен функционал частичных обменов, например вместо 1bnb->100$, можно сделать два обмена c v2 и v3 парами: 0.5bnb->55$, 0.5bnb->49$, чтобы по итогу получить 104$.

Uniswap v2 стостоит из таких контрактов:
1. Deployer - деплоит Factory и Router
2. Factory - создает и хранит адреса задеплоеных Pair
3. Router - содержит упрощенные методы для совершения обменов любой длины, например bnb->usdc->cake->wbnb, которые задействуют factory и factory.pairs.
4. Pair - самая важная часть dex’a, потому что этот контракт владеет erc20 токенами, которые пользователи передают паре, чтобы получать комиссионные, пропорционально доле их капитала в паре. Pair содержит низкоуровневые функции swap, mint, burn. Внутри pair.swap возможно заказать flashSwap(когда сначала пара одалживает контракту токенов, но ожидает их возврата в той же транзакции).

Для рядового пользователя совершить обмен в Uniswap v2 означает открыть из stateless сайт, выбрать направление обмена и создать транзакцию, которая взаимодействует с Router контрактом, который в свою очередь с fаctory.pairs.

В протоколе не заложен функционал blacklist, который есть в usdt,usdc.

Ознакомиться с кодом factory

Посмотреть на популярность router (много pending транзакций)
#DEFI
Централизованные стейблкоины (USDC,USDT) содержат функционал черного списка адресов во всех блокчейнах, где они представлены.

Когда userA передает свои 100usdc к userB, эти 100usdc не покидают контракта USDC, просто меняется владелец 100$ в пределах контракта, поэтому контракт способен решать, кто имеет право распоряжаться своими средствами, а кого можно забанить.

Централизованным стейблкоинам важно закладывать такой функционал blacklist, чтобы дружить с регуляторами и выполнять их требования.

В теории можно забанить пользователей одной страны, пойдя по цепочке CEX->KYC->конкретная_страна_Х->кошельки, которые однозначно трактуются как «владеет гражданин страны Х» и значительно так ограничить свободы в большинстве своем невинных граждан.

Пример наличия функционала, смотреть вкладки «Code», «Read Contract», «Read as Proxy»
USDC «isBlacklisted»
USDT «isBlacklisted»