Смарт-контракты — это способ вести бизнес в новой децентрализованной экономике. Большинство смарт-контрактов заключаются на платформах децентрализованных приложений (DApp), например, Ethereum, Lisk или Cardano, а крупные технологические компании вроде IBM начинают создавать собственные предприятия в этой области. И действительно, многим заказчикам спокойнее иметь дело со всемирно известной компанией со столетней историей, нежели самостоятельно пробовать совершенно новую технологию.
Таким образом, если разработчик умеет создавать смарт-контракты, это повышает его рыночную стоимость. Как ни удивительно, но смарт-контракты довольно просты в разработке — DApp-платформы и сопутствующий инструментарий сильно упрощают их создание, как и создание собственного блокчейна.
Javascript-разработчиков модное слово «блокчейн» пугать не должно — если разобраться, то блокчейн похож на многие другие фреймворки, с которыми вы обычно работаете.
Проектирование смарт-контракта
Создавая смарт-контракт, важно установить, каким он должен быть.
Давайте возьмем для примера билеты на концерты. В этой области есть большая проблема спекулянтов, которые массово скупают билеты онлайн с помощью роботов. Кроме того, есть поддельные билеты. Блокчейн обладает массой преимуществ, и здесь нам пригодятся два из них: он облегчает проведение транзакций и позволяет отслеживать информацию.
Одной строчкой кода в контракте мы можем повысить стоимость перепродажи билетов. После этого покупать сразу много билетов станет незачем, поскольку их невыгодно перепродавать. Кроме того, каждый билет можно представить в виде уникального токена, который нельзя будет подделать.
Выбор DApp-платформы
Теперь нужно определиться с тем, на какой децентрализованной платформе будет выполняться наш смарт-контракт.
Самая большая и самая известная платформа называется Ethereum. У нее также больше всего пользователей и самое активное сообщество, а значит, если на этапе разработки у вас возникнут вопросы, на них будет легче получить ответы от коллег.
Однако у нее есть и недостаток: для написания смарт-контрактов там используется собственный язык под названием Solidity.
Есть другой вариант, Lisk — на этой DApp-платформе используется Javascript, поэтому новый синтаксис учить не придется. Кроме того, здесь есть собственный DApp-магазин (что-то вроде Google Play или iTunes), где вы можно опубликовать готовое приложение.
Еще можно попробовать Cardano. Эта платформа была создана сооснователем Ethereum, и ее разработкой занимается большая и опытная команда разработчиков. Их продукт пока молод, но, если они реализуют планы по отделению информации о контракте от данных транзакции, это может быть большой шаг вперед.
Тем не менее пока ограничим наш выбор Ethereum и Lisk.
Javascript-разработчику более логичным решением может показаться выбор Lisk — действительно, ведь вы уже знаете язык, на котором предстоит писать.
Но не стоит списывать Ethereum со счетов. У этой платформы такое обширное сообщество разработчиков, что новизна Solidity будет с избытком компенсирована легкостью получения нужной информации. Кроме того, для Ethereum есть фреймфорк Truffle от Consensys, позволяющий интегрировать и тестировать смарт-контракты.
Создание смарт-контракта
Не пугайтесь новизны Solidity. Да, здесь используются хеш-функции, а в конце строки нужно ставить точку с запятой, но это не страшно. Хеш-функции используются для создания уникальных ключей и сопоставления их с другими переменными — в нашем примере мы используем их для создания уникальных билетов и их привязки к учетным записям покупателей.
При создании первого Ethereum-контракта рекомендуем использовать среду разработки, расположенную по адресу remix.ethereum.org — у вас будет удобная площадка для развертывания контракта и взаимодействия с ним от имени разных учетных записей Ethereum, причем переключаться между разными учетными записями и использовать любые вызовы функций контракта можно просто нажимая на кнопки в меню.
На что обратить внимание
Уникальность Solidity — в адресации. Все учетные записи Ethereum имеют уникальные адреса, и эти адреса представляют стороны, заключающие контракт.
В нашем примере контракта на продажу билетов организатор мероприятия будет
связан с ним своим адресом учетной записи, и всякий раз при покупке билета он будет получать деньги — без всяких посредников. Клиент делает покупку, средства списываются с его учетной записи, идентифицируются по их адресу и передаются продавцу.
В Solidity также используется уникальный способ привязки средств к смарт-контракту. Каждый вызов функции приходит с сообщением, и это сообщение может содержать уникальную информацию от отправителя, включая адрес его учетной записи, а также количество эфиров, которое он хочет отправить владельцу контракта.
Также стоит отметить, что в Solidity не все контракты бесплатны. За любое изменение информации в контракте, например, покупку или использование билета, сеть, обеспечивающая его выполнение, возьмет плату в специальной валюте под названием газ — это компенсация за использование вычислительной мощности в сети.
Вызовы, в ходе которых информация только отправляется, но не изменяется, бесплатны — то есть можно бесплатно посмотреть договор, запросить количество оставшихся билетов или узнать их цену. Дело в том, что в таких действиях нет риска.
Интеграция с JavaScript
Самая сложная часть работы с Solidity — интеграция контракта с Javascript. Это делается с помощью фреймворка Truffle.
Сначала нужно выполнить развертывание контракта и перенести его в тестовую сеть. Truffle предоставляет для этого собственную отдельную тестовую сеть Ethereum, которая называется Ganache. Теперь мы получаем версию контракта в JSON-представлении, и можем вызывать ее с помощью адресов тестовой сети из Javascript-приложения.
Если будете искать дополнительную информацию, имейте в виду, что у Truffle отличная документация с примерами.
В создании смарт-контракта есть еще одна сложность: для веб-разработчика естественно думать о блокчейне как о замене базы данных, но на самом деле это не один централизованный источник информации, а цепочка контрактов и транзакций, прослеживая которые можно получить искомые данные.
Поскольку блокчейн все же похож на базу данных, нам нужно подключить контракт к своему серверу, и, поскольку у системы развитый API, получить доступ к информации с клиентской стороны не сложнее, чем совершить AJAX-запрос — на сайте Truffle есть хороший пример.
Блокчейн похож на базу данных, но не до конца — у него совершенно уникальный протокол с транзакциями, хешированием и блоками, и это самое сложное в разработке под Ethereum. В нашем примере с продажей билетов вызов контракта для покупки билета и вызов для использования билета устроены по-разному, и виртуальная машина Ethereum придирчива к их оформлению.
И здесь снова приходит на помощь огромное сообщество разработчиков Ethereum — вероятнее всего, на любой ваш вопрос уже есть ответ на Ethereum Stack Exchange, а если его нет, другие разработчики с готовностью помогут вам с вашим смарт-контрактом.
Будь в курсе! Подписывайся на Криптовалюта.Tech в Telegram