С экспансией блокчейн-технологий в обиход русскоязычной деловой среды понятие «смарт-контракт» перестало быть чем-то из области непознанного. Мы сами не так давно писали о смарт-контрактах, разбирая основные термины и варианты применения умных контрактов на практике. И все же, несмотря на развитие темы, в ряде случаев знания о принципах действия и применения смарт-контрактов носят поверхностный и теоретический характер.

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

Их дальнейшие действия воспринимаются неподготовленным человеком как «танец с бубном». Разработчиков такой расклад вполне устраивает: чем меньше людей понимают механику их работы, тем выше их стоимость как специалистов на рынке труда. Заказчики, привыкшие к контрактам, написанным человеческим языком, тем более не стремятся вникать в структуру программного кода. Подобного рода слепое делегирование ставит бизнесмена в зависимость от технической команды и в случае, если «что-то пойдет не так», может привести к проблемам, о самой возможности возникновения которых разработчики предпочитают умалчивать.

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

Смарт-контракту нужны условия

Идея логики договора, когда событие Б не совершится, пока не произошло событие А, не инновационна и увековечена классиками в формуле «утром деньги, вечером стулья». Смарт-контракт обеспечивает безапелляционность реализации договоренностей, обусловленную математически, исключает зависимость участников сделки от любого рода централизованной системы или влияния человеческого фактора и при этом гарантирует автоматизацию, прозрачность и безопасность всего процесса. Но только в том случае, если среда реализации смарт-контракта предполагает возможность выполнения запрограммированных условий и обеспечивает прямой доступ к объектам контракта. Спустя 14 лет после теоретического описания идеи смарт-контракта такой средой стал блокчейн.

На сегодняшний день рынок предлагает разработку смарт-контрактов для Ethereum, Hyperledger Fabric, Cardano, NEO и других блокчейн платформ. Но не все они хорошо адаптированы для исполнения смарт-контрактов. Так, биткоин не содержит маркеры состояний и не дает программистам свободу действий, а NXT содержит ограниченное количество шаблонов смарт-контрактов и не предполагает возможности создания своей версии. Ethereum, лишенный этих недостатков, стал базовой платформой для реализации смарт-контрактов.

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

Как понять компьютерный код

Какими бы убедительными ни были перспективы использования смарт-контрактов, у скептиков из числа консерваторов останутся аргументы против. Даже учитывая весь спектр возможностей для оспаривания традиционных контрактов, бумажка с печатью и подписью будет для них авторитетней нематериального компьютерного алгоритма. Разработчикам, которым достанется клиент с подобной принципиальной позицией, следует запастись терпением и приготовиться к просьбе дать почитать, потрогать и повертеть в руках «то, что вы там написали».

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

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

В 2014 году для записи кода смарт-контрактов экспертами Ethereum был спроектирован специальный язык программирования Solidity. Он имеет много общих черт c Java Script и характеризуется возможностью реализации любой вычислительной функции.

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

Если с формой все понятно, перейдем к содержанию на примере самой популярной сферы применения смарт-контрактов — организации первичного выпуска токенов.

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

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

Функция fallback отвечает за порядок действий в случае поступления эфиров на счет смарт-контракта. Она проверяет наличие токенов, доступных к продаже, фиксирует их цену и вычисляет, сколько токенов нужно отправить покупателю.

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

И, наконец, самая приятная функция — возможность вывести полученный эфир — прописывается в контракте EasyCrowdsale.

Регистрировать прочие условия смарт-контракта (срок проведения ICO, softcap и hardcap и так далее) можно до тех пор, пока фантазия разработчика не будет исчерпана. Однако, излишне утяжелять конструкцию кода без необходимости все же не рекомендуется, хотя бы потому, что чем больше данных, тем выше вероятность допущения ошибки.

Право на ошибку

Главное, что нужно помнить, формируя техзадание разработчику на написание смарт-контракта: у вас не будет возможности додумать функционал и доработать контракт в процессе работы. Уже загруженный в блокчейн код не может быть изменен, а любая ошибка, допущенная при его написании, приведет к некорректному исполнению контракта или полной потере контроля над ним. Единственно возможный вариант исправления ситуации — загрузить новый контракт с исправленным кодом.

Даже крупные игроки при составлении смарт-контрактов умудряются допускать ошибки, которые, к сожалению, обнаруживаются слишком поздно. И определенно лучше разработчику их увидеть до того, как это сделают злоумышленники. Ошибка при написании смарт-контракта компании The DAO позволила хакерам в 2016 году взломать систему и вывести токены на свои кошельки, инцидент привел к обвалу курса эфира и даже отразился на котировках биткоина.

А осенью прошлого года некто под ником Devops199 воспользовался критической уязвимостью смарт-контракта Parity и запустил процесс его самоуничтожения. В результате на счетах пользователей было заблокировано 513,774 ETH (по тем временам $160 миллионов).

Учитывая дефицит и высокую загруженность квалифицированных разработчиков, логичным развитием рынка услуг в сфере блокчейн-технологий стало появление компаний, проводящих аудит смарт-контракта перед запуском. За небольшую по меркам капитализации рынка сумму (20−30 тысяч рублей) специалисты незамыленным глазом перечитают код и проверят его на ошибки и возможные уязвимости.

Тот факт, что смарт-контракты оперируют деньгами и не подвержены изменениям, играет на руку хакерам. Каждый день солдаты теневого фронта блокчейна изучают новые коды и предпринимают попытки их взлома. Впрочем, об их «достижениях» на этом поприще мы расскажем в отдельном материале.