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

Многие бизнесмены, которые используют блокчейн-технологии,довольствуется и этим. Достаточно понимать, что смарт-контракт — это некие договоренности, зафиксированные в виде кода, и сделка состоится только в случае их выполнения. И когда ясны предмет и условия сделки, исполнение основного механизма смарт-контракта передают в руки квалифицированным специалистам — разработчикам.
А их последующая работа так остается для неподготовленного предпринимателя чем-то из разряда фантастики. Для разработчиков это конечно, выгодно: : чем меньше людей владеют знаниями об их работе, тем больше они стоят как специалисты на трудовом рынке. Заказчики, которые привыкли работать с традиционными контрактами , тем более не стремятся всматриваться в структуру программного кода. Такое слепое делегирование делает бизнесмена зависимым от технической команды. И если «что-то пойдет не так», то могут появиться проблемы, о вероятности которых разработчики предпочтут не рассказывать.
Высокие риски и белы пятна в знаниях о принципах действия смарт-контрактов увеличивают и без того немалую степень недоверия к смарт-контракту. Мы попробуем разрешить эту задачу и рассмотреть основные аспекты технологии, которая в скором будущем имеет все основания модифицировать устаревшие бизнес-процессы.
Смарт-контракту нужны условия
Замысел логики договора, когда событие B не произойдет без обязательного события А, совсем не нов. Его еще классики закрепили в формуле «утром деньги — вечером стулья»: смарт-контракт дает безапелляционное соблюдение договоренностей. Она обеспечивается математически, исключает зависимость участников сделки от всякой централизованной системы или влияния человеческого фактора и при этом гарантирует автоматизацию, прозрачность и безопасность каждого этапа процесса. Но только тогда, когда среда для смарт-контракта дает возможность выполнить запрограммированные условия и обеспечивает прямой доступ к объектам контракта. Через 14 лет после описания теории замысла смарт-контракта появился блокчейн, который и стал этой средой.
Сегодня рынок предлагает разработку смарт-контрактов для Ethereum, Hyperledger Fabric, Cardano, NEO и других блокчейн площадок. Но не каждая из них абсолютно подходит для исполнения смарт-контрактов. К примеру, у биткоина нет маркеров состояний и он не обеспечивает свободу действий программистов. А в NXT ограниченное число шаблонов смарт-контрактов и в нет нельзя создать свою версию. Ethereum лишен обозначенных недостатков, потому и стал основной платформой для проведения смарт-контрактов.
Учитывая вышесказанное, сколько бы блокчейн-энтузиасты ни настаивали на универсальности смарт-контрактов, их реализация возможна лишь, когда ваш бизнес и бизнес вашего партнера эволиционировал для блокчейн-технологий.
Как понять компьютерный код
Несмотря на всю перспективность использования смарт-контрактов, скептики-консерваторы имеют много аргументы против. Даже учитывая все недостатки классических договоров, бумага с печатью и подписью для них авторитетней виртуального компьютерного алгоритма. Разработчикам, которые встретятся с таким убежденным клиентом, надо иметься терпение и готовиться к просьбе дать почитать, потрогать и повертеть в руках «то, что вы там написали».
Давайте посмотрим, что конкретно представляет собой смарт-контракт, как он выглядит и какую информацию содержит.

Смарт-контракт — это компьютерный код, запись последовательных функций,которая определяет параметры и логику исполнения обязательств договора каждой стороны. Как любой код, он лаконичен и однозначен, но видят это лишь программисты.
В 2014 году для записи кода смарт-контрактов специалист Ethereum спроектировали собственный язык программирования Solidity. Он очень похож на Java Script и может реализовать любую вычислительную функцию.
Размер смарт-контракта зависит от числа строк с записями. Чем сложней условия, тем больше строк в программном коде. Конечный код смарт-контракта переходит в байт-код виртуальной машины Ethereum, которая и осуществляет исполнение контракта. По ходу выполнения условий контракта компьютеры и узлы блокчейна обновляют регистр.
Мы описали форму, а теперь поговорим о содержании. Для примера возьмем самую распространенную сферу использования смарт-контрактов — организацию первичного выпуска токенов.
Структура основной части кода представляет собой иерархию контрактов, в которых прописан отдельный завершенный функциональный цикл из пяти ключевых элементов. Один из важнейших контрактов структуры называется owned, он должен выделить собственника контракта из всех пользователей сети и придать ему привилегированные возможности. К примеру, вывод средств со счетов.
Второй контракт включает данные о сборе средств и распределении токенов. Здесь прописана общее количество выпущенных токенов, информация о балансах всех владельцев и реакция смарт-контракта на перемещения токенов между ними. Элементы подконтракта crowdsale имеют обязательный характер, при некорректном заполнении этого элемента токены не отобразятся в кошельке владельцев. Элемент fallback отвечает за порядок действий при поступлении эфиров на счет умного контракта. Он выявляет наличие доступных для продажи токенов, фиксирует их цену и рассчитывает их число для отправки покупателю.
За crowdsale следует подконтракт, EasyToken, который записывает полное и сокращенное имя токена, определяет его делимость или неделимость и, самое важное, разрешает юзерам использовать токены на бирже: выводить, снимать, обменивать.
И, наконец, самая приятная функция — вывод полученных эфиров — прописывается в контракте EasyCrowdsale.
Регистраций других условий смарт-контракта (срок ICO, softcap и hardcap и прочие) ограничивается только фантазией разработчика. Но все же, нежелательно слишком утяжелять структуру кода без необходимости, хотя бы потому, что вероятность допущения ошибки растет с увеличением количества данных.
Право на ошибку
Самое важное, что надо помнить, создавая техзадание на составление программистом смарт-контракта: вы не сможете додумать функционал и доработать контракт в процессе работы. Загруженный в блокчейн код не подлежит изменению, а каждая неточность при написании контракты вызовет его некорректное исполнение или потерю контроля над ним. И тогда останется только один вариант — загрузить новый контракт с исправленным кодом.
Даже крупные игроки допускают ошибки при составлении смарт-контрактов, а обнаруживают их слишком поздно. Конечно, разработчику надо просчитать и заметить их раньше мошенников. Из-за такой ошибки, которую допустила компания The DAO в 2016 году, хакеры взломали систему и вывели токены на свои кошельки. Это происшествие обрушило курс эфира и даже повлияло на котировки биткоина.
А прошлой осенью пользователь Devops199 использовал критическую уязвимость смарт-контракта Parity и запустил его самоуничтожение. В итоги счета всех пользователей на сумму 513,774 ETH (по тем временам $160 миллионов) были заморожены.
Принимая во внимание недостаток квалифицированных разработчиков и высокую занятость имеющихся, логичным развитием рынка услуг в сфере блокчейн-технологий стало появление компаний, которые проводят аудит смарт-контракта перед запуском. За 20−30 тысяч рублей, малую по меркам капитализации рынка сумму, специалисты перечитывают написанный код и выявят его ошибки и уязвимости .
Без сомнений, смарт-контракты привлекательны для хакерских атак, так как работают с деньгами и не могут быть изменены. Ежедневно «темные силы» блокчейна изучают новые коды и и пытаются их взломать. О том, каких успехов достигли злые гении на этом поприще мы расскажем в отдельной статье.