Смарт-контракт
Смарт-контракты – критически важный компонент многих платформ и приложений, построенных на основе блокчейна. Ниже мы рассмотрим работу смарт-контрактов, коротко пройдемся по их анализу и попытаемся понять, есть ли у них применение и юридическая сила в реальном мире.
Что такое смарт-контракт
Термин «смарт-контракт» описывает компьютерный код, который автоматически исполняет соглашение или его части. Код хранится на платформе, построенной на основе блокчейна. Если стороны инициировали транзакцию и тем самым показали, что условия соблюдены, код выполнит какие-то действия. Иными словами, «если произойдёт Х, надо сделать Y».
Смарт-контракты выполняют простейшие задачи. Например, они автоматически переводят криптовалюту с кошелька одной стороны на кошелёк другой (если соблюдены нужные условия), меняют монеты и т. д. Большинство смарт-контрактов написаны на одном из языков программирования, созданных для этих целей (например, Solidity в сети Ethereum).
Прежде чем смарт-контракт будет исполнен, требуется оплатить транзакционную комиссию за добавление его в блокчейн. Чем сложнее смарт-контракт, тем больше нужно заплатить.
Какие программы можно написать с помощью смарт-контрактов? Да какие угодно! Например, финансовую пирамиду. Для этого в блокчейне достаточно создать смарт-контракт со следующими правилами:
- Если с адреса кошелька A пришла сумма X, запомнить это в табличке долгов.
- Если после этого с адреса B пришла сумма Y > 2*X, отправить 2*Х денег на адрес А, запомнить долг участнику B.
- И так далее для каждого участника.
- Опционально: отправлять 5% всех поступающих денег автору смарт-контракта.
Примерно такая же схема была организована в Express Game. В ней код был "зеркалом" другого кода, а тот уже отправлял часть средств на кошельки разработчиков.
Недостатки Smart Contracts
Несмотря на потенциал, у умных контрактов есть недостатки:
- Проблемы в коде смарт-контракта. До сих пор не устранены уязвимости (не учитываем те, которые добавляют специально).
- Проблемы в разработке. Они касаются как и специалистов, которые пишут коды, так и заказчиков. Некоторые клиенты стараются быстрее выпустить продукт без понимания принципов работы системы. Это приводит к печальным последствиям после запуска.
- Проблемы языка программирования. Solidity, на котором пишут контракты в Ethereum, прост и удобен для освоения. Но у него много проблем, которые разработчики решают по-разному (или вообще не решают).
- Проблемы с защитой. Смарт-контракт – не панацея. Даже если он защищен и взломать его не удается, можно взломать сайт проекта, как это случилось с протоколом Poly Network.
Иными словами, многое зависит от профессионализма авторов контрактов. Однако многие разработчики финансово поощряют "белых хакеров", которые находят ошибки и сообщают о них. Так было с Гехардом Вагнером, которому Polygon выплатил $2 млн. за найденную ошибку.
Как все происходит
После того как сеть «принимает» код нового контракта (все майнеры проверили код, поместили в блоках, замайнили блок, опубликовали его в сети), контракт получает собственный адрес и может принимать транзакции.
Бывают краткосрочные контракты (он исполнился и больше не нужен). Есть и долгосрочные (поместили его в сети, и теперь им пользуются тысячи человек).
Вы установили кошелек MetaMask и хотите добавить туда монету, к примеру, BSW. Что нужно сделать?
2) Найти адрес смарт-контракта токена.
3) Вставить в соответствующее поле, нажать "добавить".
Что в это время делает MetaMask?
- Он проходит в блокчейн-сканер сети по адресу смарт-контракта, который вы заполнили.
- Проваливается во вкладку Сontract и вкладку Read Contract.
- "Читает" оттуда поля _decimals, _name, _simbol и выводит на ваш экран.
- В разделе balanceof ищет адрес и получает ваш баланс.
Кошелек – лишь удобная оболочка для сбора информации. Вы можете самостоятельно заходить в контракты токенов, вбивать адрес своего кошелька и узнавать баланс.
На платформе Uniswap вы хотите поменять монету USDT на DAI.
Подключаете кошелек, переходите во вкладку swap и видите:
Платформа просит разрешения использовать ваш баланс в какой-либо монете (в примере USDT). Это называется "апрув токена".
Апрувы в сети Etherscan можете проверить тут, либо во вкладке More любого блокчейн-сканера. Например, в BscScan это "Token Approvals". Если вы разрешили использовать токен платформе, но 100% уверенности в ней нет, то апрув нужно убрать (в значении поставить 0), либо изменить на количество монет, которое вас устраивает.
Апрув не требуется, когда мы производим обмен в нативной монете (монете блокчейна)
Хорошо, допустим апрув вы сделали. Что происходит дальше?
- Uniswap перейдет на свой контракт для свапа (это название платформы.router).
- Выйдет в знакомый нам раздел write contract.
- Посмотрит, какие монеты вы меняете и в зависимости от этого выполнит функцию с 9-17.
- Вписывает данные, выстраивает цепочки и отправляет.
Суть в том, что мы можем это проделывать вручную и не отдавать комиссию платформе. Да и транзакции так проходят быстрее.
Важно! Здесь много нюансов, поэтому лучше довериться платформе.
Проверка Смарт-контракта
Стоит различать поверхностный и глубокий анализ.
Глубокий анализ проводится автоматически. Мало найти ошибку. Нужно понять, к чему приведет эта уязвимость, разобраться, откуда она взялась (добавлена ошибочно или разработчики специально ведут средства на сторонние кошельки).
Тем, кому нравится углубляться в процесс, советуем почитать серию статей от аудитора.
Мы остановимся на сканерах блокчейнов (про их функционал писали тут).
Перейдем сразу к примеру – монете BSW. Адрес контракта.
Для начала нужно на базовом уровне знать, как ориентироваться на странице контракта:
- Contract Creator /// at tx /// - кто и когда создал контракт;
- Token /// - в каких токенах у контракта есть баланс;
- Balance - отображается в монете сети. Чтобы посмотреть сумму на контракте, нужно нажать на значок напротив строки Token;
- Token Tracker - смарт-контракт какого токена мы смотрим;
- Transactions - транзакции, в которых был задействован контракт;
- Bep - 20 / ERC-721 Token Txn - кто-то пополнил баланс смарт-контракта токенами;
- Contract - код самого контракта;
- Events - события, созданные контрактом или в которых он участвовал;
- Analytics - графики по контракту (движение активов, уникальные адреса и т.п.);
- Info - информация о контракте;
- Comments - комментарии.
Некоторые монеты/контракты размещены в нескольких сетях одновременно. Это можно посмотреть, нажав
Например, что мы можем узнать о Biswap через анализ контракта:
- На балансе контракта находится примерно $115 тыс., где bsw составляет большинство.
- Создатель контракта монеты BSW участвовал/играл в проекте cryptomines, получив от проекта 16 000 монет (по нынешнему курсу в районе $4 000).
- Контракт монеты размещен в 7 сетях.
- Всего смарт-контракт поучаствовал в почти 2 млн. транзакций.
Смотрим контракты на скам
Перейдем к самому интересному. Как понять, что перед нами обманщики?
- Рагпулл – вы предоставляете ликвидность новой монете, либо просто покупаете её, а потом разработчики роняют цену в ноль. Подробнее тут.
- Ханипот – купить монету можно, продать нельзя.
- Разнообразные ограничения на покупку, продажу и прочее.
В первую очередь смотрим, открытый контракт или закрытый. Если во вкладке Contract - Code будет виден какой-либо код, все в порядке – разработчики ничего не скрывают.
Проверяем наличие 3-х основных функций: approve, transfer и transferFrom. Они позволяют перемещать токен. Если контракт открыт, проваливаемся во вкладку Write Contract и смотрим. Какой-либо из них нет? Это тревожный сигнал.
Наличие функции initialize означает, что перед нами прокси-контракт (показывают одно, а работает другое). Проверьте наличие функции "delegateall" в коде.
Эти 3 простых шага серьезно снизят риск нарваться на мошенников.
Трудности широкого распространения
Некоторые считают, что смарт-контракты решат все проблемы и избавят от несправедливости. На самом деле у смарт-контрактов есть множество юридических трудностей.
- Далёкие от технологий стороны не могут обсуждать, составлять и корректировать смарт-контракты? Сторонам придётся полагаться на доверенных технических экспертов, которые будут реализовывать соглашения или подтверждать точность кода, написанного третьей стороной.
- Смарт-контракты имеют зависимость от off-chain-ресурсов. Смарт-контракты получают информацию или параметры от ресурсов, расположенных не в блокчейне (от так называемых ораклов). Здесь снова встает вопрос доверия к 3-ей стороне (достоверность информации от оракла).
- Смарт-контракты автоматизированы. Их нельзя изменить или прервать – это одна из главных сложностей, которая мешает распространению смарт-контрактов.
- Смарт-контракты сложно изменить или разорвать. Модифицировать неизменяемый смарт-контракт гораздо сложнее, чем код обычного ПО, которое не построено на основе блокчейна.
- Сложность объективной оценки смарт-контрактов. Все варианты событий предугадать невозможно. Стороны могут намеренно оставить соглашение двусмысленным, чтобы получить возможность настаивать на трактовке положения в свою пользу. Со смарт-контрактом такого не получится.
- Смарт-контракты не гарантируют оплату в сложных коммерческих отношениях. Никто не бронирует полную сумму для оплаты по условиям долгосрочного контракта. Средства пускаются в дело, доход.
- Смарт-контракты добавляют дополнительные риски. Причем такие, которых нет в тексте большинства соглашений: взлом контракта, непреднамеренные программные ошибки в коде или протоколе.
- Сложности с регулирующим законодательством и территориальной подсудностью. Одно из главных обещаний блокчейна – создание надёжных, децентрализованных глобальных платформ. Но масштабное внедрение означает, что стороны могут использовать смарт-контракты под куда более широким спектром юрисдикций, чем в текстовых контрактах.
Вывод
Блокчейн дает площадку, а смарт-контракты – возможность пользоваться продуктами в крипте. С одной стороны действия и механики может проверять любой пользователь. Но почему-то от этого не становится легче =)
Смарт-контракт был введен для избавления от третьей стороны между участниками сделки. Если для простых действий это уже реализовано, то для сложных взаимодействий смарт-контракт не подходит. Мы склонны переоценивать новые технологии в краткосрочной перспективе и недооценивать в долгосрочной. Хотя смарт-контрактам ещё нужно развиваться, прежде чем они станут широко использоваться, они уже влияют на революцию в структуре вознаграждения и стимулирования. Именно она определит форму контрактов в будущем.