was successfully added to your cart.

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

Смарт-контракт (анг. Smart contract — умный контракт) — компьютерный алгоритм, предназначенный для заключения и поддержания коммерческих контрактов в технологи блокчейн.

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

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

История

Первые идеи умных контрактов были предложены в 1996 году Ником. Сабо. Практические реализации стали возможными, благодаря появлению в 2008 году технологии блокчейн. Некоторые принципы умных контрактов были заложены в протоколе первой блокчейн-валюты Bitcoin, однако они не были реализованы в клиентском программном обеспечении, не обладали полнотой по Тьюрингу из соображений безопасности и не использовались на практике. С появлением технологии, стали высказываться идеи, что поверх протокола биткойна могут быть созданы различные протоколы более высокого уровня, включая полноценные умные контракты, по аналогии с тем как поверх TCP/IP существуют множество протоколов прикладного уровня.

Умные контракты впервые начали применяться на практике в проекте Ethereum. Идея создания проекта появилась в 2013 году. В тот момент основатель журнала Bitcoin Magazine Виталик Бутерин пришёл к выводу, что технология блокчейна может использоваться значительно шире, не только в криптовалютах. Он выдвинул идею универсальной децентрализованной блокчейн-платформы, в которой любой желающий может программно реализовать разные системы хранения и обработки информации. Главное условие — действия должны быть описаны как математические правила.

Безопасность и уязвимость

Смарт контракты в Ethereum уязвимы к хакерским атакам по ряду причин.

1. Ошибки использования языка Solidity

  • Семантика языка Solidity. Контракты создаются на языке программирования Solidity, напоминающий Java, и представляют собой набор функций. Однако байт-код виртуальной машины Ethereum не поддерживает работу с функциями, поэтому перед отправкой в блокчейн контракты компилируются. Одна опечатка в строке кода контракта может привести к реализации функции fallback.
  • Неправильный порядок исключений. Для реализации смарт контракта может понадобиться прерывание работы его метода — исключение. Если исключение возникает во время выполнения команды call, то исполнение контрактов будет продолжаться, пока не закончится газ.
  • Реентерабельность. Одни и те же инструкции программы могут быть введены несколько раз, например, через функцию fallback, что приведет к циклу в вызове метода call и расходованию всего газа. Атака на DAO (ICO из-за которого появился Ethereum Classic) была построена по этому типу.

2. Ошибки работы виртуальной машины Ethereum

  • Неизменность контрактов. Контракт, опубликованный на блокчейн, невозможно изменить. Если контракт содержит баг, то исправить его невозможно, можно лишь прекратить исполнение контракта. Яркий пример — устранение последствий атаки на смарт контракты DAO.
  • Потери эфира при переводе. Чтобы отправить эфир, необходимо указать адрес принимающей стороны, который представляет собой последовательность из 160 битов. Если предоставленный адрес не привязан к пользователю или контракту, то оправленный эфир будет утерян навсегда.

3. Ошибки в блокчейн

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

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