Смарт контракт простыми словами — что это и кому нужно
Смарт-контракты или как их еще называют — умные контракты, вошли в обиход вместе с технологией блокчейн и криптовалютами. Для многих они до сих пор остаются тайной за семью печатями, а потому разбираем, что кроется за этим загадочным и перспективным явлением — кому они нужны, как создаются и где применяются.
Что такое смарт-контракт?
Смарт-контракт происходит от английского термина smart contract, что переводится как «умный контракт». Это самоисполняемый компьютерный код, который записывается в блокчейн — децентрализованную цепочку блоков, хранящуюся на множестве компьютеров. Он позволяет обмениваться активами — деньгами, акциями и другими видами собственности напрямую без участия третьих лиц.
В контракте прописаны все условия сделки и, если участники их выполняют, автоматически получают требуемое.
Умный контракт исключает из процесса посредников
Если рассматривать смарт контракт для чайников простыми словами, то представьте, что вы продаете дом и есть покупатель, который готов его приобрести. В стандартной ситуации (без применения умных контрактов), поскольку вы друг другу не доверяете, вам нужно привлекать посредников: юристов, нотариусов, финансовые учреждения, чтобы провести сделку.
Придется собирать кучу документов, выстаивать в очередях, заверять их у нотариуса. Все проверки могут занять значительное количество времени, а кроме того, услуги посредников необходимо еще и оплачивать.
В случае со смарт-контрактом есть только — покупатель, продавец и компьютерный алгоритм. Программа самостоятельно сверяет выполнены ли все условия сделки ее участниками и, если да, автоматически распределяет активы. Покупателю переходит недвижимость, продавцу — деньги. Это, конечно, идеальный вариант до которого современному миру еще далеко.
В этом и заключается одно из основных преимуществ — смарт контракт на блокчейне исключает из процесса посредников, и максимальная оптимизирует процесс. Усилий потрачено минимум, время сэкономлено, исключен человеческий фактор.
Умный контракт сам все проверяет и сам себя исполняет
Немного истории
Нельзя сказать, что умные контракты появились вместе с криптовалютами в последние 9 лет. Идея витала в воздухе еще в 90-х годах прошлого столетия. Первым ее описал известный американский ученый и криптограф Ник Сабо. В частности, по его определению, умный контракт — это «электронный протокол передачи данных, который обеспечивает исполнение условий контракта всеми сторонами»
Однако среды, в которой умные контракты могли бы существовать, на то время не было. А потому описанная идея ждала своего часа. И он настал — в 2008 году с появлением технологии блокчейн и первой криптовалюты биткоин.
Все бы хорошо, но возможности блокчейна биткоина для создания смарт контрактов весьма ограничены. На нем можно программировать простейшие алгоритмы, а потому разработчики продолжали экспериментировать дальше.
Так появилась платформа Ethereum, созданная Виталиком Бутериным с нуля, на которой умные контракты уже смогли предстать во всей красе. У разработчиков появилась возможность создавать приложения, не запуская собственный блокчейн. Все это благодаря тому, что смарт контракты в Ethereum написаны на тьюринг-полном языке, тогда как в сети биткоина полнота по Тюрингу отсутствует.
Как работает смарт контракт
Смарт контракт и блокчейн связаны неразрывно. Ведь компьютерный алгоритм должен быть где-то записан и для этого используется так называемая децентрализованная цепочка блоков blockchain.
Смарт-контракт имеет:
Смарт контракт может:
Приняв решение умный контракт:
Активируется смарт-контракт и начинает выполнять запрограммированные действия с помощью транзакции, отправленной с кошелька пользователя, или сообщения от другого умного контракта, переданного ему напрямую через сеть. Для того, чтобы активировать умные контракты Etherium, потребуется необходимое количество газа (Gas), которым оплачиваются транзакции в сети Эфира.
Смарт контракт и внешний мир — оракулы
Код смарт контрактов прописывается в блокчейн и этой средой ограничен. Однако, чтобы им принимать решения выполняться или нет, необходимо контактировать с окружающим внешним миром и получать из него нужную информацию. Например, данные об изменении цен, температуре, статусе платежа. Для этого и были придуманы оракулы.
Они связывают smart contract с разными источниками данных за пределами блокчейна. Для примера, умные контракты Ethereum часто используют оракул Oraclize.
Преимущества умных контрактов
Среди главных плюсов умных контрактов выделяют такие:
Уязвимости смарт-контрактов
Умные контракты все еще находятся на своей экспериментальной стадии развития. А потому предусмотреть при их создании все вероятные баги практически нереально. Во всяком случае пока. А критические ошибки нередко могут привести к непоправимым последствиям.
Вспомним первый децентрализованный венчурный фонд the DAO на Эфириуме. В результате атаки с использованием обнаруженной хакером уязвимости, фонд потерял более 60 миллионов долларов — они постепенно переводились на счета злоумышленника.
Из других недостатков умных контрактов можно отметить такие моменты:
Препятствует их широкому распространению и тот факт, что расплачиваться пока возможно только криптовалютой. А это по многим причинам для серьезного бизнеса неудобно. Хотя бы потому, что статус криптовалют в большинстве стран до сих пор висит в воздухе и соответственно операции с ними считаются высокорискованными.
В настоящее время умные контракты находятся на экспериментальной стадии
Ну и естественно не способствует популярности умных контрактов отсутствие представления о том, что же такое смарт-контракты, не только у широких масс, но и людей, которым такие алгоритмы смогли бы значительно упростить процесс ведения дел.
Многие услышав словосочетание «умный контракт» сразу включают воображение и представляют себе едва ли не всемогущую программу, решающую насущные проблемы. Хотя на деле смарт-контракты преимущественно выполняют весьма прозаичные задачи.
Как создать смарт контракт
Для начала необходимо неплохо разбираться в языках программирования. Если таких знаний нет, придется привлекать сторонних разработчиков. Далее выбираем блокчейн, на котором он будет функционировать.
Программирование смарт-контрактов в сети Эфириума происходит на языке Solidity. В качестве онлайн редактора и компилятора используется Remix. Готовый код советуют сперва залить в тестовую сеть и выловить возможные баги.
В простых контрактах действует логика «if-then-else», «when-do» — если… то…иначе. Часто действие смарт-контракта поясняют на примере торгового автомата. Вы бросаете доллар и этим запускаете следующее действие (если… то) — у вас появляется возможность выбрать товар (то… это). Когда выбор произведен, на очереди следующее действие — вы получаете желаемое.
Пример смарт-контракта на эфириуме и не один можно найти на etherscan.io. Точнее, здесь выложено тысячи исходников, и в каждом можно детально изучить логику построения кода. Вот образец простой голосовалки
Осенью 2017 года был запущен проект, призванный максимально упростить создание смарт-контрактов для людей, не разбирающихся в программировании. Платформа называется Etherparty. В настоящее время функционирует бета версия площадки. Разработчики обещают, что с помощью данного инструмента создавать умные контракты на любом совместимом блокчейне смогут пользователи с нулевым уровнем знаний.
Виды умных контрактов
Смарт-контракты сегодня можно разделить на несколько видов. Все зависит от того, насколько все этапы их выполнения автоматизированы. В частности:
Особняком стоят умные контракты, которые помимо того, что прописаны в блокчейне, имеют также бумажную копию для верности. Наибольшее распространение в настоящее время имеют контракты, в которых автоматизирован только один из этапов.
Блокчейн-сети и криптовалюты со смарт контрактами
Возможности смарт-контракта разнятся в зависимости от блокчейна, используемого для их хранения. Как уже упоминалось выше, умные контракты простейшего образца можно создавать на блокчейне биткоина. Самая популярная в настоящее время платформа для работы таких контрактов — Ethereum.
Среди других площадок отметим такие:
Как бы там ни было, наиболее распространенная криптовалюта для смарт контрактов в настоящее время — Эфириум. Удастся ли другим потеснить его с цифрового Олимпа – покажет время.
Применение смарт контрактов
Очертим главные области, в которые можно успешно внедрить умные контракты. В частности, это:
Избирательный процесс
Проводить голосования с помощью умных контрактов — уже сегодня такую возможность рассматривают многие страны, в том числе Украина, Россия, Австралия. Это исключает любые фальсификации и обеспечивает максимальную честность процесса. А также решает вопрос низкой явки избирателей — ведь многим попросту нет желания куда-то идти, выстаивать порой очереди, чтобы отдать свой голос.
Кредитование
Человек берет в кредит квартиру, машину или телевизор и ежемесячно обязан выплачивать n-ную сумму банку. Если заемщик просрочил платеж с помощью смарт-контракта замок автомобиля или жилья будет заблокирован, а телевизор перестанет включаться.
Азартные игры
Предположим, несколько человек делают ставку на исход матча. Средства списываются с их счетов и сохраняются в блокчейне. Матч завершается, контракт сверяет результат и отправляет деньги тому, кто высказал правильное предположение. В случае ничьей средства возвращаются обратно к своим владельцам.
Аренда жилья
Возьмем в качестве другого примера сферу аренды жилья. Взаимодействовать между собой арендодатель и арендатор могут с помощью смарт-контракта. Умный контракт переведет владельцу недвижимости деньги, когда арендатор получит ключи. Если оплата за какой-либо месяц будет просрочена, и вовсе заблокирует вход в помещение квартиросъемщику. Естественно в случае, если используется «умный» замок с доступом к интернету.
И если в большинстве этих областей применение умных контрактов только находится на стадии планирования или тестирования, то в сфере первичного размещения токенов (ICO) они уже вовсю используются. С их помощью тысячи проектов собирают деньги на свое развитие. Смарт-контракт для ICO, к примеру, может быть разработан таким образом, что в случае, если кампания по сбору средств провалится, деньги будут возвращены вкладчикам.
Смарт контракт — пример из реальной жизни
По сложности смарт-контракты бывают разные. Одни представляют собой простейшие алгоритмы, другие — сложные модели, которые требуют значительно больше вычислений. В качестве примера первых можно привести мультиподпись — multisig. Предположим, стороны договора друг другу не доверяют. Они замораживают с помощью умного контракта определенное количество денег. В дальнейшем потратить их возможно только в том случае, если свою подпись поставило больше половины участников, что сейчас активно уже используется.
Больше конкретики!
Применение смарт-контракта в недвижимости — уже можно считать сложным вариантом. Впервые в мире квартира подобным образом была продана в Украине на правом берегу Киева. Для проведения сделки использовался смарт контракт Эфириума, а также децентрализованный американский маркетплейс Propy. Покупателем стал советник этой площадки, а также основатель издания TechCrunch Майкл Аррингтон. Оплата происходила в криптовалюте Эфириум. На данном этапе развития смарт-контрактов процесс происходил так:
Как видим, пока процесс сложно назвать упрощенным. В будущем его обещают максимально автоматизировать.
Вот как выглядит смарт-контракт данной сделки, выложенный на Githab компании, точнее часть контракта, где описан процесс подписания договора участниками, а недвижимость замораживается в ожидании завершения процесса.
Так чем смарт контракт лучше нотариуса спросите вы. Да много чем. Это на порядок упрощает проведение сделок, защищает их от фальсификаций. Ниже в табличке представляем сравнение smart-контрактов и классических договоров.
Умные контракты vs обычные договора
Смарт-контракты – какие перспективы?
Перспективы у смарт-контрактов поистине огромные. Они способны кардинально изменить многие сферы жизни: от недвижимости до азартных игр, страхования, поставки товаров, голосований. Однако только тогда, когда их работа будет многократно протестированной и предсказуемой. Пока же все находится на стадии экспериментов.
Помимо этого, внедрение умных контрактов должно быть плавным, ведь массовое и резкое их применение оставит без работы огромное количество людей: регистраторов, нотариусов, банковских служащих.
Тем не менее, как когда-то машины вытеснили рабочих с производства, так и в обозримом будущем новые технологии заменят живых людей во многих профессиях. Это лишь вопрос времени.
Эксперты уверены, что уже в 2018 году как крупные корпорации, так и целые государства признают огромный потенциал как технологии блокчейн, так и умных контрактов.
Digitrode
цифровая электроника вычислительная техника встраиваемые системы
Как создать смарт-контракт? Пример простого смарт-контракта в системе Ethereum
Что такое смарт-контракт мы рассмотрели на примере, который, возможно, поймет даже ребенок. Но как же создавать такие «умные» контракты? Многие думают, что это очень сложно. На самом деле это не так, и в данном примере мы рассмотрим создание смарт-контракта в сети Ethereum с помощью командной строки.
Смарт-контракты, по сути, это объекты, содержащие учетные записи в цепочке блоков (блокчейне). Они содержат функции кода и могут взаимодействовать с другими контрактами, принимать решения, хранить данные и отправлять эфир другим. Контракты определяются их создателями, но их исполнение, а также расширение услуг, которые они предлагают, обеспечивается самой сетью Ethereum. Они будут существовать и исполняться до тех пор, пока существует целая сеть, и исчезнут, только если они запрограммированы на самоуничтожение.
Что вы можете делать с такими контрактами? Ну, вы можете сделать практически все, что угодно, но в данном случае сделаем несколько простых вещей: для начала вы создадите классический контракт типа «Hello World», тогда вы сможете создать свой собственный криптографический токен, чтобы отправить кому бы то ни было. После того, как вы овладеете этим, вы сможете, например, собирать средства посредством ICO, который в случае успеха предоставит абсолютно прозрачную организацию.
Код простого смарт-контракта
Теперь, когда вы освоили основы Ethereum, давайте перейдем к созданию вашего первого смарт-контракта. Это будет приветственный смарт-контракт, который мы назовем Greeter. Greeter – интеллектуальная цифровая сущность, которая живет в блокчейне и способна вести беседы с любым, кто с ней взаимодействует, на основе ее интерфейса ввода. Возможно, это не болтун, но это отличный слушатель. Вот его код:
Вы заметите, что в этом коде есть два разных контракта: «mortal» и «greeter». Это связано с тем, что Solidity (язык высокого уровня для контрактов, который мы используем) имеет свойство наследования, что означает, что один контракт может наследовать характеристики другого. Это очень полезно для упрощения программирования, поскольку общие черты контрактов не нужно переписывать каждый раз, и все контракты могут быть записаны в меньших, более читаемых фрагментах. Таким образом, просто объявив, что greeter является mortal, вы унаследовали все характеристики от контракта mortal и сохранили код greeter простым и легким для чтения. Унаследованная характеристика mortal просто означает, что контракт greeter может быть уничтожен его владельцем, чтобы очистить цепочку блоков и вернуть средства, вложенные в нее, когда контракт больше не нужен. Контракты в ethereum по умолчанию бессмертны и не имеют владельца, а это означает, что после выпуска автор больше не имеет особых привилегий. Учтите это перед выпуском.
Компилятор Solc
Прежде чем вы сможете выпустить смарт-контракт, вам понадобятся две вещи: скомпилированный код и интерфейс Application Binary Interface, который является объектом javascript и определяет, как взаимодействовать с контрактом. У вас должен быть встроенный компилятор solidity, встроенный в вашу geth-консоль. Чтобы проверить это, используйте следующую команду:
Если вы его установили, должно появиться что-то вроде этого:
Теперь вам нужно переформатировать свой контракт, удалив разрывы строк, чтобы он вписывался в строковую переменную (существуют некоторые онлайн-инструменты, которые сделают это):
Теперь вы скомпилировали свой код. Затем вам нужно подготовить его к выпуску, включая настройку некоторых переменных, например, какое приветствие вы хотите использовать. Измените первую строку ниже на нечто более интересное, чем «Hello World!». и выполните следующие команды:
Использование онлайн-компилятора
Если у вас не установлен Solc, то вы можете воспользоваться онлайн-компилятором. Скопируйте исходный код выше в онлайн-компилятор solidity, а затем ваш скомпилированный код должен появиться на левой панели. Скопируйте код в поле с надписью Web3 deploy как для контракта greeter, так и для контракта mortal в один текстовый файл. Теперь в этом файле измените первую строку на ваше приветствие:
Теперь вы можете вставить полученный текст в окно geth или импортировать файл с помощью loadScript. Подождите до тридцати секунд, и вы увидите следующее сообщение:
Возможно, вам придется «разблокировать» учетную запись, которая отправляет транзакцию, используя пароль, который вы выбрали в начале, потому что вам нужно оплатить расходы на газ для выпуска вашего контракта, например:
По оценкам, для этого контракта требуется 180 тысяч единиц газа. Обратите внимание, что стоимость не выплачивается разработчикам Ethereum, вместо этого она переходит к майнерам, тем пользователям, компьютеры которых работают над поиском новых блоков и обеспечивают безопасность сети. Цена на газ устанавливается рынком текущего спроса и предложения. Если цены на газ слишком высоки, вы можете стать майнером и снизить цену. Менее чем за минуту у вас должен быть журнал с адресом контракта, это означает, что вы успешно выпустили свой контракт. Вы можете проверить развернутый код (который будет скомпилирован) с помощью этой команды:
Запуск смарт-контракта
Чтобы вызвать своего бота, просто введите в свой терминал следующую команду:
Поскольку этот вызов ничего не меняет в цепочке блоков, он мгновенно возвращается без каких-либо затрат на газ. Вы должны увидеть, как он вернет ваше приветствие:
Как другим пользователям взаимодействовать с вашим смарт-контрактом
Для того, чтобы другие люди могли запускать ваш контракт, им нужны две вещи: адрес, в котором находится контракт, и ABI (Application Binary Interface), который является своего рода руководством пользователя, описывающим имя его функций и как их вызывать с помощью консоли javascript. Для получения каждого из них запустите следующие команды:
Если вы скомпилировали с помощью онлайн-инструмента, вы можете получить ABI из полей Interface для контрактов greeter и mortal. Затем вы можете создать экземпляр объекта javascript, который можно использовать для вызова контракта на любом компьютере, подключенном к сети. Замените «ABI» (массив) и «Адрес» (строка) для создания объекта контракта в javascript:
Этот конкретный пример может быть инстанцирован кем-либо с помощью вызова следующего вида (замените greeterAddress адресом вашего контракта):
Удаляем смарт-контракт
Вы должны быть очень рады созданию и выпуску своего первого контракта в системе Ethereum, но следует помнить, что создавать лучше полезные контракты, а не «пустые». Когда владельцы продолжают писать бесполезные контракты, это приводит к неприятному виду заброшенных контрактов в блокчейне. Желательно такие смарт-контракты удалять. Необходимо отправить транзакцию в сеть и заплатить за изменения, внесенные в блокчейн после запуска приведенного ниже кода. Саморазрушение субсидируется сетью, поэтому стоимость будет намного меньше обычной транзакции.
Это может быть вызвано только транзакцией, отправленной владельцем контракта. Вы можете проверить, что дело сделано, если следующая команда вернет 0:
Обратите внимание, что каждый контракт должен выполнить свою собственную инструкцию kill. В этом конкретном случае только учетная запись, которая создала контракт, может уничтожить его.