May 17, 2022

Смарт-контракт

Смарт-контракты – критически важный компонент многих платформ и приложений, построенных на основе блокчейна. Ниже мы рассмотрим работу смарт-контрактов, коротко пройдемся по их анализу и попытаемся понять, есть ли у них применение и юридическая сила в реальном мире.

Что такое смарт-контракт

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

Смарт-контракты выполняют простейшие задачи. Например, они автоматически переводят криптовалюту с кошелька одной стороны на кошелёк другой (если соблюдены нужные условия), меняют монеты и т. д. Большинство смарт-контрактов написаны на одном из языков программирования, созданных для этих целей (например, Solidity в сети Ethereum).

Прежде чем смарт-контракт будет исполнен, требуется оплатить транзакционную комиссию за добавление его в блокчейн. Чем сложнее смарт-контракт, тем больше нужно заплатить.

Какие программы можно написать с помощью смарт-контрактов? Да какие угодно! Например, финансовую пирамиду. Для этого в блокчейне достаточно создать смарт-контракт со следующими правилами:

  1. Если с адреса кошелька A пришла сумма X, запомнить это в табличке долгов.
  2. Если после этого с адреса B пришла сумма Y > 2*X, отправить 2*Х денег на адрес А, запомнить долг участнику B.
  3. И так далее для каждого участника.
  4. Опционально: отправлять 5% всех поступающих денег автору смарт-контракта.

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

Недостатки Smart Contracts

Несмотря на потенциал, у умных контрактов есть недостатки:

  • Проблемы в коде смарт-контракта.  До сих пор не устранены уязвимости (не учитываем те, которые добавляют специально).
  • Проблемы в разработке. Они касаются как и специалистов, которые пишут коды, так и заказчиков. Некоторые клиенты стараются быстрее выпустить продукт без понимания принципов работы системы. Это приводит к печальным последствиям после запуска.
  • Проблемы языка программирования. Solidity, на котором пишут контракты в Ethereum, прост и удобен для освоения. Но у него много проблем, которые разработчики решают по-разному (или вообще не решают).
  • Проблемы с защитой. Смарт-контракт – не панацея. Даже если он защищен и взломать его не удается, можно взломать сайт проекта, как это случилось с протоколом Poly Network.

Иными словами, многое зависит от профессионализма авторов контрактов. Однако многие разработчики финансово поощряют "белых хакеров", которые находят ошибки и сообщают о них. Так было с Гехардом Вагнером, которому Polygon выплатил $2 млн. за найденную ошибку.

Как все происходит

После того как сеть «принимает» код нового контракта (все майнеры проверили код, поместили в блоках, замайнили блок, опубликовали его в сети), контракт получает собственный адрес и может принимать транзакции.

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

Пример №1

Вы установили кошелек MetaMask и хотите добавить туда монету, к примеру, BSW. Что нужно сделать?

1) Нажать "Import Token".

2) Найти адрес смарт-контракта токена.

3) Вставить в соответствующее поле, нажать "добавить".

Что в это время делает MetaMask?

  • Он проходит в блокчейн-сканер сети по адресу смарт-контракта, который вы заполнили.
  • Проваливается во вкладку Сontract и вкладку Read Contract.
  • "Читает" оттуда поля _decimals, _name, _simbol и выводит на ваш экран.
  • В разделе balanceof ищет адрес и получает ваш баланс.
Кошелек – лишь удобная оболочка для сбора информации. Вы можете самостоятельно заходить в контракты токенов, вбивать адрес своего кошелька и узнавать баланс.

Пример №2

На платформе Uniswap вы хотите поменять монету USDT на DAI.

Подключаете кошелек, переходите во вкладку swap и видите:

Платформа просит разрешения использовать ваш баланс в какой-либо монете (в примере USDT). Это называется "апрув токена".

Апрувы в сети Etherscan можете проверить тут, либо во вкладке More любого блокчейн-сканера. Например, в BscScan это "Token Approvals". Если вы разрешили использовать токен платформе, но 100% уверенности в ней нет, то апрув нужно убрать (в значении поставить 0), либо изменить на количество монет, которое вас устраивает.

Апрув не требуется, когда мы производим обмен в нативной монете (монете блокчейна)

Хорошо, допустим апрув вы сделали. Что происходит дальше?

  1. Uniswap перейдет на свой контракт для свапа (это название платформы.router).
  2. Выйдет в знакомый нам раздел write contract.
  3. Посмотрит, какие монеты вы меняете и в зависимости от этого выполнит функцию с 9-17.
  4. Вписывает данные, выстраивает цепочки и отправляет.

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

Важно! Здесь много нюансов, поэтому лучше довериться платформе.

Проверка Смарт-контракта

Стоит различать поверхностный и глубокий анализ.

Глубокий анализ проводится автоматически. Мало найти ошибку. Нужно понять, к чему приведет эта уязвимость, разобраться, откуда она взялась (добавлена ошибочно или разработчики специально ведут средства на сторонние кошельки).

Тем, кому нравится углубляться в процесс, советуем почитать серию статей от аудитора.

Мы остановимся на сканерах блокчейнов (про их функционал писали тут).

Перейдем сразу к примеру – монете BSW. Адрес контракта.

Для начала нужно на базовом уровне знать, как ориентироваться на странице контракта:

  • Contract Creator /// at tx /// - кто и когда создал контракт;
  • Token /// - в каких токенах у контракта есть баланс;
  • Balance - отображается в монете сети. Чтобы посмотреть сумму на контракте, нужно нажать на значок напротив строки Token;
  • Token Tracker - смарт-контракт какого токена мы смотрим;
  • Transactions - транзакции, в которых был задействован контракт;
  • Bep - 20 / ERC-721 Token Txn - кто-то пополнил баланс смарт-контракта токенами;
  • Contract - код самого контракта;
  • Events - события, созданные контрактом или в которых он участвовал;
  • Analytics - графики по контракту (движение активов, уникальные адреса и т.п.);
  • Info - информация о контракте;
  • Comments - комментарии.

Некоторые монеты/контракты размещены в нескольких сетях одновременно. Это можно посмотреть, нажав

Например, что мы можем узнать о Biswap через анализ контракта:

  1. На балансе контракта находится примерно $115 тыс., где bsw составляет большинство.
  2. Создатель контракта монеты BSW участвовал/играл в проекте cryptomines, получив от проекта 16 000 монет (по нынешнему курсу в районе $4 000).
  3. Контракт монеты размещен в 7 сетях.
  4. Всего смарт-контракт поучаствовал в почти 2 млн. транзакций.

Смотрим контракты на скам

Перейдем к самому интересному. Как понять, что перед нами обманщики?

Скам бывает разных видов:

  • Рагпулл – вы предоставляете ликвидность новой монете, либо просто покупаете её, а потом разработчики роняют цену в ноль. Подробнее тут.
  • Ханипот – купить монету можно, продать нельзя.
  • Разнообразные ограничения на покупку, продажу и прочее.

Что проверять?

В первую очередь смотрим, открытый контракт или закрытый. Если во вкладке Contract - Code будет виден какой-либо код, все в порядке – разработчики ничего не скрывают.

Проверяем наличие 3-х основных функций: approve, transfer и transferFrom. Они позволяют перемещать токен. Если контракт открыт, проваливаемся во вкладку Write Contract и смотрим. Какой-либо из них нет? Это тревожный сигнал.

Наличие функции initialize означает, что перед нами прокси-контракт (показывают одно, а работает другое). Проверьте наличие функции "delegateall" в коде.

Эти 3 простых шага серьезно снизят риск нарваться на мошенников.

Трудности широкого распространения


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

  1. Далёкие от технологий стороны не могут обсуждать, составлять и корректировать смарт-контракты? Сторонам придётся полагаться на доверенных технических экспертов, которые будут реализовывать соглашения или подтверждать точность кода, написанного третьей стороной.
  2. Смарт-контракты имеют зависимость от off-chain-ресурсов. Смарт-контракты получают информацию или параметры от ресурсов, расположенных не в блокчейне (от так называемых ораклов). Здесь снова встает вопрос доверия к 3-ей стороне (достоверность информации от оракла).
  3. Смарт-контракты автоматизированы. Их нельзя изменить или прервать – это одна из главных сложностей, которая мешает распространению смарт-контрактов.
  4. Смарт-контракты сложно изменить или разорвать. Модифицировать неизменяемый смарт-контракт гораздо сложнее, чем код обычного ПО, которое не построено на основе блокчейна.
  5. Сложность объективной оценки смарт-контрактов. Все варианты событий предугадать невозможно. Стороны могут намеренно оставить соглашение двусмысленным, чтобы получить возможность настаивать на трактовке положения в свою пользу. Со смарт-контрактом такого не получится.
  6. Смарт-контракты не гарантируют оплату в сложных коммерческих отношениях. Никто не бронирует полную сумму для оплаты по условиям долгосрочного контракта. Средства пускаются в дело, доход.
  7. Смарт-контракты добавляют дополнительные риски. Причем такие, которых нет в тексте большинства соглашений: взлом контракта, непреднамеренные программные ошибки в коде или протоколе.
  8. Сложности с регулирующим законодательством и территориальной подсудностью. Одно из главных обещаний блокчейна – создание надёжных, децентрализованных глобальных платформ. Но масштабное внедрение означает, что стороны могут использовать смарт-контракты под куда более широким спектром юрисдикций, чем в текстовых контрактах.

Вывод

Блокчейн дает площадку, а смарт-контракты – возможность пользоваться продуктами в крипте. С одной стороны действия и механики может проверять любой пользователь. Но почему-то от этого не становится легче =)

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