smart_contracts

Смарт-контракты — это способ вести бизнес в новой децентрализованной экономике. Большинство смарт-контрактов заключаются на платформах децентрализованных приложений (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