Смарт-контракты Ethereum на пальцах

Введение

На данный момент в сети имеется множество достойных статей и видео, посвященных разбору работы технологии блокчейн, однако, все или большинство из них с первых строк(минут) изобилуют специфичными терминами, примерами программного кода, математическими функциями и ссылками на “мат часть”. Здесь же пойдем добираться до сути и достигать понимания будем максимально гуманно, и сперва в “двух словах” приведу основные тезисы и термины:
  • поступление средств на криптовалютный кошелек называется инпутом (input), операция списания - аутпутом (output)
  • транзакция - операция перевода средств, включающая уменьшение баланса одного кошелька и пополнение баланса другого на эту же сумму. Транзакция в блокчейне - это запись в блоке о паре инпута и аутпута, подписанная приватным ключом отправителя

  • очередной блок в цепочке блокчейна содержит последние транзакции, а также ссылку на предыдущий блок
  • блокчейн - неразрывная цепочка блоков - история всех-всех транзакций, начиная с самой первой. Она хранится на миллионах компьютеров майнеров и в любой момент времени открыта для просмотра
  • кошелек в среде блокчейна не является таковым в привычном понимании, также как и его баланс. Вернее будет назвать величину криптомонет в кошельке суммой - так как, по сути, это арифметическая сумма инпутов и аутпутов, хранящихся в блокчейне подтвержденных транзакций с участием данного публичного ключа
  • для управления транзакциями своего крипто кошелька необходимы только пара приватный и публичный ключи вида 16UwLL9Risc3QfPqBUvKofHmBQ7wMtjvM, публичный ключ в тоже время является адресом кошелька
  • совершенные транзакции нельзя отменить или оспорить
  • при утере приватного ключа, монеты на этом кошельке выходят из обращения навсегда для всего сообщества данной криптомонеты, так как транзакции с ними могут быть подписаны только приватным ключом этого кошелька, поэтому для его хранения нередко используют аппаратные устройства:
  • токен - цифровая собственность, имеющая ценность только благодаря тому, что люди верят в нее, то есть крипто монеты Bitcoin, Ethereum, Dogecoin и т.д. как раз и являются токенами
Что же такое майнинг? Вычислительные мощности компьютеров майнеров используются для поддержания целостности цепочки блоков, и что самое главное - подтверждения транзакций, собирая их в очередной блок и вставляя последний в единую цепочку.
Очень многие криптовалютные сети, включая гиганта Биткоин работают по протоколу Proof-of-work (доказательство работы): для внесения очередного блока в цепочку компьютеры решают очень сложную “математическую” задачу, решение которой проверить очень легко: в биткоине это перебор случайных строк, в поисках той, которая вместе с текстом нового блока при шифровании SHA-256 выдаст хэш, начинающийся с 10ти нулей
Решением этой задачи обеспечивается вся многомиллиардная инфраструктура сети Биткоин: подтверждаются транзакции, выводятся в оборот новые монеты (награда за майнинг), обеспечивается децентрализация и стойкость к хакерским атакам (чем больше майнеров, тем децентрализованней сеть и тем больше требуется вычислительных ресурсов для проведения незаконных операций).
Переходя к Эфиру, стоит отметить, что в данный момент эта вторая по популярности криптовалютная сеть также работает по протоколу Proof-of-work, однако, процессоры майнеров кроме подбора хеша еще исполняют программные коды смарт-контрактов.
Раскрывать смысл смарт-контрактов будем от простого к сложному, а проще всего будет сказать, что
  • с точки зрения функциональности смарт контракт - это умный крипто кошелек с функцией эмиссии новых, еще никогда не существовавших токенов
  • с точки зрения программирования - это код, написанный на специализированном языке программирования, определяющий действия кошелька по распоряжению имеющимися токенами (или создания совершенно новых) в зависимости от разных условий
  • для краудфандера - инструмент сбора денег путем продажи созданных токенов, которые в будущем, возможно, будут иметь ценность. Это как раз и есть ICO (Initial coin offering)
Стоит отметить, что с того момента как контракт добавлен в блокчейн, его код изменить уже нельзя никогда и никак для текущей цепочки блоков.

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

Рассмотрим жизненный цикл и основные фичи смарт-контракта на примере ICO (сбора денег на реализацию интересного/полезного проекта), то есть продажу новых (пока еще ничего не стоящих) токенов за эфир.
Подобно Кикстартеру, перспективная команда разработчиков представляет публике краткое ТЗ нового нового проекта, который однозначно “выстрелит”, но на его разработку требуются большие средства. В обмен на предоставленные средства, инвесторам обещают долю в компании, величина которой пропорциональна количеству новых токенов разрабатываемого проекта. Кроме того, по мере роста популярности проекта, его новые токены могут обрасти стоимостью и выставится на криптобиржах т.е. продавать/покупаться не только за эфир.
Как говорилось ранее, смарт-контракт - это умный Ethereum-кошелек, и он легко может быть запрограммирован в обмен на инпут эфира отсылать на кошелек отправителя свои токены. При этом эмиссия новых токенов также гибко настраивается и, соответственно, может быть как ограниченной (пример - Биткоин, его эмиссия остановится при достижении выпуска 21 млн. монет), так и наоборот. Цена одного нового токена прописывается в коде контракта в эфирах. Таким образом логика простейшего ICO-контракта будет выглядеть примерно так (на языке пальцев):

ПРИСВОИТЬ цена_токена = 5 эфира;

ЕСЛИ

поступил инпут в M эфира

ТО

отослать отправителю (M / цена_токена) своих токенов;

В приведенном примере цена токена задается константой при деплое, однако, она может быть и переменной, и могут быть указаны конкретные пользователи (публичные ключи Ethereum-кошельков пользователей), которые имеют право изменять значение переменной. Из этого следует, что умный контракт в блокчейне способен хранить данные, а значит, кроме прочего еще и является распределенной и общедоступной базой данных.
По правилам сети Ethereum действия с кошельками (включая деплой нового контракта в блокчейн) требуют оплаты эфиром комиссии, которая называется газом (gas) - своеобразное топливо виртуальной машины Ethereum, названное так его создателями. Величину газа определяет сам пользователь, и она пропорциональна скорости обработки запроса к блокчейну - чем больше газ, тем быстрее подтвердится транзакция, задеплоится контракт, пройдет запрос к контракту.
Не требует газа лишь операция получения данных от смарт-контракта (в нашем примере - это получение величины цены одного нового токена) при условии, что такая функция прописана в коде.
Итак, в чем же преимущества умных контрактов перед их письменными или устными аналогами? Ответ прост - отпадает понятие доверия как такового. Код контракта находится в блокчейне - децентрализованной строгой цепочке блоков, целостность которой поддерживается огромной вычислительной мощностью майнеров эфира, из этого следует, что код
  • никогда и никем не может быть изменен (из-за этого, конечно, могут выливаться и неудобства при эксплуатации);
  • доступен для чтения всем и всегда;
  • исполняется настолько четко и безошибочно насколько грамотно и предусмотрительно он написан (здесь, конечно, приходится проявить доверие, но только к себе);
Кроме сбора средств с помощью умных контрактов могут быть реализованы и другие более интересные и сложные функционалы:

Лотерея

А точнее ЧЕСТНАЯ лотерея - ведь как писалось выше, код контракта открыт всем для чтения и любой подвох в алгоритме без проблем быстро будет обнаружен. Реализация же будет выглядеть примерно следующим образом: Игрок переводит количество эфира равное стоимости билета на кошелек смарт контракта, а тот в ответ на инпут записывает публичный ключ Игрока в массив под номером присвоенного билета (номер может выбираться Игроком либо присваиваться рандомно), количество полученного эфира прибавляется к значению переменной джекпота. Для того, чтоб провести розыгрыш, владелец смарт контракта отправляет запрос функции розыгрыша, которая случайно выбирает выигрышный билет, и если в массиве под выигрышным номером есть запись публичного ключа кого то из игроков, то ему переводится джекпот, иначе массив обнуляется, а призовой фонд остается нетронутым. И как вишенка на торте после каждого выигрыша на кошелек владельца перечисляется небольшой процент собранной суммы.
Благодаря разработанным библиотекам для, например, jаvascript, позволяющим подключаться к сети Ethereum, смарт контракт может иметь Web-интерфейс - отображение на сайте в реальном времени списка распроданных билетов и сумму призового фонда, ведь для операции получения данных не требуется оплата газа. Кроме того, это означает, что с умными контрактами могут взаимодействовать и Интернет-вещи и, само собой, другие умные контракты (например майнинг ферма, сама оплачивающая затраченное электричество).
Лотерея - это простейший пример, другие азартные игры (рулетка и т.д.) также реализуются умными контрактами, абсолютно не требующими доверия к казино.
Самое же интересное - реальные контракты - договора об аренде, купле/продаже, поручительству, брачные и пр. также подлежат реализации на блокчейне Ethereum с помощью смарт контрактов и на данный момент уже активно используются в реальной жизни, ОДНАКО, такие реализации требуют наличия арбитра для поддержания своей честности, ведь пока к сожалению нет надежного способа обратить информацию из реального мира в цифровой формат способом полностью исключающим понятие доверия, поэтому в коде контракта указывается публичный ключ лица, которому доверяют субъекты контракта, и который запросом к функции контракта имеет право подтвердить или опровергнуть какое либо событие.

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




Информация
Посетители, находящиеся в группе Гости, не могут оставлять комментарии к данной публикации.