About Smart-contracts and Ethereum
Last updated
Last updated
как это все работает:
Consensys' are quite extensive, and include both to learn from and to avoid.
Известные атаки в одном месте:
Security Tools:
Заметки основаны на подкасте Запуск Завтра:
Смарт-контракт — это программа, которая исполняется на платформе распределенного реестра. Blockchain — один из примеров платформы распределенного реестра. Смарт-контракты работают с теми данными, что есть в платформе (далее, будем говорить Blockchain) и с теми данными, что передал пользователь в транзакции. Цель распределенного реестра — решить проблему доверия участников, которые находятся в недоверенной среде.
Далее будем говорить про сеть Ethereum — это сеть для разработки распределенных сервисов на базе блокчейна, работающих на базе смарт-контрактов. Пишут на языке Solidity и исполняют в EVM (Ethereum VM).
У смарт-контрактов есть несколько базовых свойств:
Доступ к деньгам (смарт-контракт может запросить у пользователя доступ к его кошельку)
Доступ к информации о состоянии блокчейна (доступ к информации о состоянии счета какого-нибудь пользователя, например, время, высота ноды и тп)
Смарт-контракт может выступать актором: он может вызвать другой смарт-контракт
Смарт-контракты — это попытка по новой реализовать финансовые примитивы.
Деньги можно занять (стейкинг), обменять токены одни на другие. Все это делается на базе смарт-контрактов.
Пользователь вызывает какую-то функцию контракта, операция подписывается на закрытом ключе пользователя (тем самым смарт-контракт может убедиться кто с ним работает и что у пользователя достаточно финансов). Транзакция отправляет в блокчейн на какую-то из нод сети в пул неподвержденных транзакций. Этот пул реплицируется между другими узлами по протоколу Gossip (по этому протоколу общаются все ноды => то есть все майнеры). Далее майнеры решают, какую транзакцию они будут вычислять (ту, что стоит дороже). Все это считается в у.е. Газ. Каждая операция стоит сколько-то газа. Каждый майнер выполняет эту транзакцию, записывает результат. Далее, все результаты включаются в блок и передаются механизму Консенсуса (в эфириуме это Proof-of-Work, потом будет Proof-of-Stake). В блокчейн записывается тот результат, который получился и большего числа майнеров.
Смарт-контракт не умеет общаться с внешним миром. Между собой смарт-контракты общаются посредством мостов. Мосты есть централизованные и децентрализованные. Внутри моста работает смарт-контракт.
Смарт-контракт получает деньги и выбрасывает событие: я получил деньги, я хочу перевести в другой сети деньги вот по этому счету. Это событие проходит еще через один (третий) блокчейн-валидатор, которые связывает две сети. Блокчейн валидатор ставит подписи под этим событием. Когда накапливается нужное количество подписей (например, 7 из 9), это сообщение отправляется в другой блокчейн. Там проверяется, что нужное количество подписей есть и токены переводятся.
Валидаторы занимают деньги в новой сети (они переводят свои токены в эту сети, как бы одалживают, стейкают) для гарантии. Если валидатор подписал невалидную транзакцию, а большая часть валидаторов этого не сделала, то часть застейканных денег будет заслешена.
А если все ок, то валидаторы получат какой-то процент еще.
Обмен токенов (биржи-обменники)
Это можно делать и без смарт-контрактов. Есть немало площадок, которые позволяют обменять токены из одной сети на токен из другой сети. Например, binance, coinbase. У таких централизованных решений есть свои плюсы и минусы (они супер удобны визуально, у них куча аналитики есть, быстрые переводы, низкие комиссии, но они требуют (государство обязывает) проводить цензуру — KYC [Know your customer] и AML [anti-money laundering]). Еще из плюсов: централизованные биржы поддерживают ввод фиатных денег (оплата с карт), фьючерсы, опционы ... .
А смарт-контракты позволяют обменяться токенами не прибегаю к помощи централизованного посредника. Позволяет провести сделку абсолютно безопасно.
На традиционных биржах работают маркетмейкеры (те, кто обладают большим количеством денег, ликвидности). Они предоставляют на биржу ликвидность – открывают ордера на покупку / продажу. При этом делают это с неким небольшим разрывом, который называется spread. На этом они зарабатывают. А трейдеры получают возможность практически по рыночной цене обменять достаточно большую сумму.
Смарт-контракты (DEX, децентрализованные обменники) позволяют совершать процедуры обмена между собой, и позволяют любому пользователю-участнику стать поставщиком ликвидности. Это демократизирует рынок: даже если ты не имеешь много средств, ты можешь предоставить их для совершения обменов (смарт-контракт положит их в свой пул ликвидности) и получать с этого процент (как поставщик ликвидности).
Примеры DEX бирж: наиболее популярная по объемам – Uniswap, другая – Bancor — те, кто изобрели эти автоматические обменники, другие — Sushiswap (https://sushi.com/), [что-то там]Swap. 1inch — DEX агрегатор, здесь можно найти обменник с самым выгодным курсом.
Для децентрализованных бирж важно уметь пользоваться некостадиальным кошельком (короч мы сами отвечаем за хранение приватных ключей и управлением кошельком). Такие кошельки никто заблокировать не может. В Binance мы напрямую не пользуемся своим кошельком, за нас это делает Binance, но он может его заблокировать (заблокировать нам доступ к средствам, заморозить их и тп).
Кредиты и займы
Как следствие такие смарт-контракты обладают таким уникальным свойством как flash-займы — возможность взять займ без обеспечения, без процентов, но только на время одной транзакции. То есть в одной транзакции блокчейна можно одолжить практически бесконечное количество токенов. Например, с помощью этого можно арбитражить (совершать обмен между биржами для получения прибыли в виде разницы курсов).
Таким образом, это дает демократизированный доступ к капиталу любому участнику (не как в классической финансовой системе).
Но есть и минусы у этого свойства: есть атаки с использованием flash-займов. Большая часть атак направлена именно на это, а не на код контракта. Многие контракты не готовы, что к ним придет такая большая ликвидность, что приведет к разшатыванию каких-то внутренних параметров. Таким образом можно задрейнить контракт (списать деньги, которые находятся у него под управлением).
NFT-токены
Все NFT-токены содержат внутри смарт-контракт. Этот контракт определяет, как эти токены можно создать, как их можно получить, за какую сумму, что с токеном можно делать. Так как .NFT-токен это контракт, то его можно сдать в залог и проводить над ним другие операции как над финансовым инструментом.
Умное голосование и выборы
Что еще нереализовано, но вокруг этого ходят:
Страхование
SBT (как NFT, но нельзя его передать, например, факт о сертификации какой-то). Или: по паспорту получаем кредитный рейтинг и закрепляем его SBT. По SBT получаем необеспеченный кредит в какой-то сети. Если нарушаем кредитные условия — SBT сжигается и второй раз его не получить. Такой репутационный токен.
Необеспеченные займы
Игры (перенос ценностей сквозь игры, повышение интереса к игре не только ради коинов)
Костадиальные и некостадиальные
Некостадиальные:
MetaMask как браузерное расширение (программное хранилище)
Wallet Connect — USB-токен (аппаратный ключ)
Управление своими финансами без оглядки на санкционные ограничения
Возможности влкадывать деньги (стейкинг)
Быть поставщиком ликвидности
Есть поощрения тем, кто вкладывает свою ликвидность в контракты
Есть поощрения тем, кто использует контракты
Можно получать таким образом доход 10-40% (биржа такой доход не может обеспечить). Это не всегда кидалово, в некоторых случаях такой доход может обеспечиваться за счет маркетингово бюджета по привлечению к проекту ликвидности (проекты с низкой ликвидностью)
Разработка ведется на Solidity. Язык несложный, освоить его можно за пару вечером и написать Hello World. Но проблема разработки серьезных контрактов в том, что нужно очень хорошо ориентироваться в инфраструктуре вокруг Solidity, экоситему.
Например, мы пишем контракт по работе с курсом валют. Для этого надо знать, откуда получить фид по информации о курсе (например, chainlink), подключиться к нему и забирать оттуда данные.
Надо знать основные шаблоны для реализации крипто-экономической состовляющей: как делать займы, как делать обменники, как делать стейкинг, как делать вознаграждения и тд. Это специализированные паттерны проектирования.
Наиболее популярны для разработки смарт-контрактов являются платформы Etherium (тн EVM-совместимые блокчейны). Многие другие платформы используют EVM и Solidity. Например, Binance Smart Chain, Phantom, Etherium.
Есть другие платформы, которые предлагают свои языки программирования, например, Zilliqa (язык Scilla), Flow Blockchain (язык Cadance).
Etherium — надежный, не быстрый и не производительный (в блоке ~100 транзкаций, блок вычисляется 10c => 10 транзкаций в секунду) и дорогой
Binance Smart Chain — быстрее, дешевле, но менее децентрализованный, чем Etherium (так как есть фиксированное число валидаторов).
Solana — полностью децентрализованное решение (без пруфов правда), смарт-контракты на Rust, дешевые транзакции
Phantom — децентрализованность + шардинг (обеспечивает производительность)
Многие блокчейны рождаются для решения каких то проблем эфириума.
Бывает такое, что команда смарт-контракта рисует себе отчет об аудите, а на сайте аудитора информации об этом никакой нет.
Смарт-контракты реализуют эти фукнции банков (протоколы и ). Чаще всего кредиты обеспечены (так как залог должен быть переведен под управление смарт-контракта).