Как работает смарт-контракт
Рассмотрим основные механизмы работы смарт-контрактов на примере платформы Ethereum, как самой развитой на сегодняшний день. На первый взгляд, архитектура блокчейна Ethereum имеет много общего с Bitcoin – сетевое взаимодействие узлов, кошельки, блоки, транзакции, ключи и подписи не слишком сильно отличаются, у всех блокчейн-платформ много общих деталей.
Но структура Ethereum сложнее, чем кажется на первый взгляд. То, что в криптовалютах является основой их функционирования, в Ethereum – только транспортная инфраструктура для обеспечения базовой безопасности транзакций. Сами же смарт-контракты, а вернее, их данные хранятся, пересылаются и обмениваются информацией внутри обычных криптовалютных транзакций. Токен ETH (ether, эфир) служит для оплаты создания контрактов, работы майнеров и производимых узлами сети при обработке контрактов распределенных вычислений.
Иными словами, платформа Ethereum двухуровневая и состоит из классического криптовалютного блокчейна, а также децентрализованной виртуальной машины для выполнения умных контрактов. На первом уровне архитектуры находится создаваемая майнерами цепочка блоков, которая выполняет функцию децентрализованного хранилища и среды обмена данными. На втором уровне работают сами децентрализованные приложения (контракты), которые через блокчейн получают исходные данные и отправляют результаты своей работы. Обращающиеся на платформе пользовательские токены второго уровня напрямую не связаны с ETH и могут выполнять самые различные функции, заложенные создателем приложения.
Блокчейн Ethereum задуман как децентрализованная виртуальная машина (EVM), которая обрабатывает исполнение смарт-контрактов на множестве подключенных узлов за небольшую плату в газе – микродолях токена ETH.
Контракты представляют собой программный код, который компилируется и загружается в блокчейн с привязкой к кошельку (аккаунту) его создателя. Для разработки контрактов в Ethereum используется собственный высокоуровневый язык программирования Solidity, подобный JavaScript. Перед загрузкой в блокчейн код контракта компилируется в байт-код, поэтому исходный код контракта в блокчейне не хранится, но, как правило, разработчики контрактов публикуют исходные коды для проверки сообществом.
Контракт работает достаточно просто:
1. На зарегистрированный в блокчейне адрес контракта отправляется транзакция, содержащая вводные данные. Для ICO это, например, обычная платежная транзакция с некоторой суммой ETH.
2. Получив входящую транзакцию, контракт «разбирает» ее и обрабатывает вводные согласно своему алгоритму, например вычисляет сумму купленных токенов для отправки.
3. Закончив работу, контракт формирует ответную транзакцию, в которой содержится вычисленная сумма токенов, и посылает ее на адрес, с которого пришла входящая транзакция.
Это самый простой случай работы смарт-контракта, на самом же деле язык Solidity достаточно гибок и может обрабатывать множество дополнительных условий. Самое главное, что контракты работают полностью автономно, то есть не требуют никаких подтверждений от человека – задача разработчиков состоит в том, чтобы написать контракт, скомпилировать и опубликовать в сети. Еще одно преимущество смарт-контракта в том, что его код не может быть изменен никем, кроме владельца аккаунта, но и это действие не может быть осуществлено незаметно для остальных пользователей блокчейна.