Ethereum и смарт-контракты: Как они устроены

Ethereum и смарт-контракты: Как они устроены Машина Тьюринга без централизации, с гарантиями блокчейна Ethereum –…


Ethereum и смарт-контракты: Как они устроены

Машина Тьюринга без централизации, с гарантиями блокчейна

Ethereum – занимает вторую строчку рейтинга популярности среди мировых блокчейн-проектов. А с технологической точки зрения, это наиболее интересный проект. Bitcoin можно считать отправной точкой, которая положила начало всему блокчейну, и Эфириум в том числе. Это не просто сеть для денежных переводов, а совершенно новый революционный способ построения системы, где все гарантии обеспечивает чистая математика.

Сейчас вы будете читать продолжение статьи об устройстве блокчейна и Bitcoin. В том материале были освещены фундаментальные принципы блокчейн: транзакции, цепочки блоков, а также майнинг. Если вы еще незнакомы с устройством блокчейн и Bitcoin, рекомендуется к прочтению, т.к. данная статья про Ethereum будет чуточку сложнее для понимания, с присутствием IT терминов и ссылок к предыдущей публикации.

Так все цивилизованное население планеты Земля узнало, что о том, что блокчейн является неизменяемым списком, с математическим обеспечением неприступности записанных данных. Ethereum основывается на блокчейне, однако создатели смогли придумать, как применить его для более развернутого списка задач. Эфириум обеспечивает не только полную безопасность переводов, но и любых других сделок и условий, причем функцией создания этих самых условий, в автоматическом режиме.

Под определение сделки, в нашем случае, подойдут все операции, строящиеся по принципу «если …, то …». Не обязательно называть это сделкой, можно и контрактом, договором, условиями и т.д., как вам больше нравится. Сделки плотно вошли в нашу жизнь, ведь ими называются не только деловые договоренности и операции в Ethereum, но и любые повседневные. Например, вы помогаете одногруппнику с написанием диплома, а он дает вам поиграть Xbox на месяц. Или вы обещаете себе сдать сессию на «отлично», а после этого пойти в бар.

Основной недостаток повседневных сделок в том, что никто вам не даст гарантии их выполнения. Например, оказали товарищу помощь с написанием диплома, но так и не получили его Xbox. Или не закончили сессию на «отлично», но все равно напились в баре, ведь очень часто мы нарушаем обещания, данные самим себе. В деловом мире, конечно, эта проблема решается договорами в письменном виде, с подписями и печатями. С таким договором вы сможете обратиться в суд, в случае несоблюдения условий второй стороной, и, возможно, добиться справедливости.

И то, справедливость будет зависеть от посредников в лице людей, которые так же имеют «уязвимость», которой может воспользоваться сторона ответчика. А еще, на протяжении всего процесса, вас будут ждать налоги и госпошлины. Напоминает что-то нелепое, где мы обязаны довериться какому-то человеку, лишь из-за того, что его называют «человеком чести». Лишние звенья, комиссии в виде налогов и госпошлин, «честное слово» и бесконечные дебаты. Это очень напоминает трудность, решаемую системами блокчейн и Эфириум блокчейн. К такому же выводу пришли авторы Ethereum, и решили назвать свое решение смарт-контрактами.

Ethereum. Смарт-контракты и Олег

К нам на помощь снова спешит верный друг Олег. Сегодня цель Олега – поездка в другой регион, а значит, что ему нужно будет позаботиться об аренде квартиры. Про существование Ethereum в мире Олега никто не в курсе.

На популярной интернет-доске объявлений наш герой отличный вариант – некая Анастасия сдает в аренду свою жилплощадь всего за двадцать тысяч рублей в месяц, но только лицам славянского происхождения (Олегу повезло, он как раз из таких).

Единственная загвоздка в том, что Олег с Анастасией вовсе не знакомы, поэтому у обоих присутствуют страхи. У Олега страх того, что вместо Насти говорит с каким-нибудь кавказцем, желающим обмануть его. А Настя опасается, что Олег все отменит в последний момент, и оставит ее без денег.

Существует два способа решения вопроса:

Первый вариант.

Олег с Настей составляют электронный договор (точно такой же, как и бумажный, но подписи происходят без присутствия сразу обеих сторон, а путем сканирования и отправки), в котором оговорены все условия, права и обязанности, остальные положения и т.д. По итогу Олег платит предоплату, а надеется, что и правда заключил договор с Настей, нежели с Назарбеком.

Второй вариант. Стороны прибегают к помощи риэлтора, которому Олег платит до половины суммы месячной аренды квартиры, а тот, в свою очередь, обязуется взять ответственность с обоих сторон, осмотреть квартиру и т.д. Гарантии получены, но финансовой потери избежать не удалось.

Ни один из вариантов не тянет называться идеальным. Но давайте представим, что у наших героев появилась некая сетка, в которой можно прописать строго определенные логические параметры. Записать не на бумажке, которая может оказаться «филькиной грамотой», а на чем-то более крутом, что может обеспечить гарантии для обеих сторон.

Например, в таком духе:

В приведенном плане предоплата, в принципе, не обязательна, и сделана просто для того, чтобы выдуманная Настя была спокойна. Логика беспощадно диктует соблюдение всех внутренних условий. Олегу не удастся «ни с того, ни с сего» взять назад свои средства, а Насте не удастся совершить подлог адреса квартиры или кода двери, ведь тогда она останется ни с чем.

Вот именно подобная схема и отражает всю суть единоразового смарт-контракта. Система Ethereum использует неизменяемый блокчейн вместо бумажных договоров, печатей и подписей. После создания Олегом транзакции «предоплата за квартиру» с тем условием, что будет произведен возврат, если Анастасия кинет его, ни у кого не будет возможности подделать условия, ведь это блокчейн.

Чтобы дать жизнь смарт-контрактам, создатели Эфириум должны были всего-навсего добавить в блокчейн возможность поддержки условий. Сам «умный контракт» написан с помощью языка программирования Solidity (чем-то напоминает JavaScript) в десятках строк кода.

При наличии подобной системы мало кому захочется создавать новые смарт-контракты каждый раз, когда на «горизонте» появляется какая-либо сделка. И действительно, зачем это делать, когда можно один раз описать логику найма квартиры, подходящую для всех случаев. Спойлер: в Ethereum все как раз так, если в двух словах.

Наниматель отправляет деньги на электронный кошелек, в ответ ему приходит код от двери квартиры, если она свободна на требуемую дату. Все просто. Подобный логический договор будет существовать в самой системе бесконечно. Также есть возможность запрограммировать в контракт скидки, график цен в зависимости от каких-либо факторов, а также возможность изменять условия по прямому доступу от Анастасии.

Проект такого контракта для Эфириум можно разместить, например, на GitHub, а на его основе разработать «умный контракт», который подойдет для найма любой квартиры. А внося средства на подобный смарт-контракт, любой Олег, Сергей, Иван (т.е. вообще кто угодно), заимеет гарантии безупречной логики блокчейн.

Нелингвистические языки, на которых написаны умные контракты в Ethereum, простые от слова «очень». Однако, при всей своей простоте, обладают «Полнотой по Тьюрингу», т.е. есть, имеют возможность реализации любой вычислительной функции. В умных контрактах Ethereum могут присутствовать различные условия, переменные, циклы и функции, а также что-то похожее на классовость и наследство.

Теоретически, подобный «умный контракт» можно разработать для любой логической цепочки. Вот он, мир будущего, с отсутствием бумажных договоров и фальсификаций. Только парочка маленьких оговорок.

Ethereum. Кто ответственен за исполнение «умных контрактов» и каким образом происходит процесс

Ethereum целиком довольно сложен для понимания, т.к. многое в нем циклически зависит от другого. В Bitcoin такого не было. «Умные контракты» Эфириум имеют ряд ограничений, которые завязаны на особенностях Ethereum блокчейна. А именно блокчейн, как мы помним, и есть гарантия выполнения условий смарт-контрактов.

Для начала окончательно узнаем, что к чему с «умными контрактами» Ethereum, а потом перейдем к блокчейну Эфириум. С технической точки зрения, «умные контракты» Ethereum лучше рассматривать не как контракт, а просто как выполнение строк кода. По своей сути, смарт-контракт и есть, код на языке программирования, выполнение условий которого навечно останется зафиксированным в блокчейн.

«Умный контракт» Ethereum можно призвать в качестве функции, для этого нужно совершить какую-нибудь транзакцию в его сторону, а он «отдаст» итог или «выдаст» ошибку.

В интернете можно найти массу комментариев, которые гневно отрицают формулировку «просто код» в адрес Эфириум. В качестве противоположного мнения мы слышим, что это «умный контракт» и «умный код», который обеспечивает 200% гарантии и т.д.

Хочется вас предупредить, что это маркетинговые трюки, ведь к проекту Ethereum нужно было привлечь не только участников, но и инвесторов, для которых и придумывались эти громкие слова и формулировки. Для человека с техническим складом ума это просто на просто код, выполняем ВМ. Ничего сверхъестественного. Но, «умный контракт» Эфириум нельзя создать на том языке кода, на котором вы хотите. По двум условиям:

1. Все операции, входящие в «умный контракт» Ethereum, должны иметь возможность полной отмены.

Когда кто-либо призывает функцию «умного контракта» Ethereum, каждый майнер мира начинает выполнения кода функции, чтобы затем она была включена в свеженький блок. Вот только удастся это только единственному, а остальным нужно будет напрочь забыть обо всех изменениях. Подробнее об этом сможете прочитать в главе о майнинге Эфириум.

При сложении пары чисел на своем ПК, вы без труда сможете откатить и забыть о полученном результате. Однако, если имеет место быть HTTP-запрос, то операцию переходит в разряд необратимых. Если все майнеры Ethereum отправят HTTP-запрос, то для сервера, на котором «лежит» сайт это будет DDoS атакой.

2. За выполнение условий «умного контракта» Ethereum придется заплатить.

Бремя оплаты ложится на того, кто вызвал контракт Эфириум. В случае с нашими героями: Олегом и Анастасией, платить придется обоим. Сделано это для того, чтобы не допустить бесчисленное множество циклов и гипер-сложных вычислений. Если это не ограничить, то код Ethereum (который выполняется на компьютерах майнеров, как мы помним), заставит все машины зависнуть, тем самым останавливая процесс.

Для расчетов в Ethereum используется «Газ» (Gas) – это небольшая часть «Эфира» – внутренней валюты системы. Газ, в таком случае, идет на оплату CPU всех майнеров, а реальные деньги (в виде комиссии), «прилетают» только тому, кому удалось обнаружить блок.

Все операции внутри ВМ (виртуальная машина) имеют свою «стоимость». Если представлять условно, то выполнение каждой строчки кода «умного контракта» Ethereum имеет стоимость равную 1 рублю. То есть, чтобы выполнить 20 строк кода, потребуется вложить в транзакцию 20 рублей. Не спешите записывать стоимость, этого не требуется. «Умный контракт» сам все считает.

И что у нас выходит? «Умный контракт» Ethereum получает доступ только к той информации, которые находятся внутри блокчейна Ethereum. Другими словами, вы можете призвать функцию другого «умного контракта» Ethereum, но не имеете возможность запросить документ с хранилища или выход в интернет для оценки курса валют.

Каждый желающий призвать функцию «умного контракта» Ethereum должен прикладывать к своему вызову немного Газа. Как правило, это минимальная сумма, которую можно намайнить через приложение Ethereum Wallet в считанные минуты.

Все строки кода в Ethereum растрачивают привязанный к транзакции Gas. А в случае его исчерпания, выполнение останавливается и откатывается. Если же остались какие-то единицы Газа после успешного исполнения, то они возвращаются отправителю. Справедливо.

«Умные контракты» в Bitcoinе. Раздел для любопытных, не про Ethereum

Если честно, то фундамент «умных контрактов» впервые оказался уже в блокчейне Bitcoin, а не в Ethereum. Припоминаете информацию о том, что все майнеры обязаны подтверждать свою подпись для транзакций? Требуется это для обеспечения защиты от использования чужих средств.

Как раз таки поиск хешей в Bitcoin сделан с применением призыва инструкций, возвращающих обратно 0 / 1, отталкиваясь от результата. В эти инструкции, в теории, вполне можно интегрировать собственную логику, т.к. имеются операторы ветвления, переменные и прочее. Названием ему – Script, а похож он на древний язык программирования Forth.

Если очень хочется, то создать «умный контракт» для найма жилья возможно и в Bitcoin, а не только в Ethereum. Единственное – язык Script не обладает циклами и рекурсией, что не дает ему право иметь полноту по Тьюрингу. А вот в Ethereum все это имеется. И плюс ВМ.

Ethereum. Аккаунты двух видов

Пока что мы знакомы с кошельками, блоками и платежами (транзакциями). Имейте ввиду, что сам «умный контракт» Ethereum является кошельком, а здесь его именуют аккаунтом.

Если классический кошелек Ethereum будет управляться с помощью связки публичный ключ-приватный ключ, то смарт-контракты хешем своего кода. Меняем хотя бы один знак в смарт-контракте Ethereum, и он становится уже совершенно другим. Вот такая защита от подделок.

Создание «умного контракта» Ethereum происходит навечно, ведь блокчейн помнит все.

Стандартные пользовательские кошельки Ethereum обычно величают «externally owned account», а «умные контракты», созданные в системе Ethereum, называют «contract account».

Ethereum. Лишь операции позволяют взаимодействовать с аккаунтами обоих типов.

Платеж на кошелек является переводом средств. Аналогия с Bitcoin. Платеж имеет в себе кол-во перечисляемых единиц валюты, а также конечный адрес «доставки». Платеж на контракт Ethereum называют «сообщение», так как это является призывом его метода. Внутри него, не считая адреса контракта и количества, включен и доп. настройки призыва, а также Газ за выполнение кода.

Платеж, не имеющий получателя, является созданием «умного контракта» Ethereum. В подобной операции требуется передача скомпилированного байт-кода контракта, а также комиссия за исполнение строк кода.

Немаловажный момент в том, что контракты не предусматривают таймеры, срабатывание которых рассчитано на истечение какого-либо срока. Контракт Ethereum можно призвать лишь самой транзакцией, которые запускаются реальным человеком. В фоновом режиме контракт не функционирует. Однако, если контракт Ethereum был призван, то может сделать то же самое и с другим контрактом Ethereum.

Чтобы было понятнее, на секунду вернемся к примеру возврата предоплаты, с нашим героем Олегом. Чтобы вернуть предоплату, Олегу нужно самостоятельно отправить запрос контракту.

Не история, а состояние — подходим к разбору блокчейна Ethereum

Статья о Bitcoin повествует о том, что блокчейн является длиннющей цепью правок – это история. Для определения баланса кошелька потребуется «пройтись» по всей истории, и произвести вычисления. Получил «столько то», минус отдал «столько то», плюс получил «столько то» - баланс кошелька определен.

Ethereum своим маркетинговым инструментом объясняет, что цепь изменений и цепь состояний является практически тем же самым. Термин «состояние» в Ethereum уместно описать как отпечаток каждого изменения в определенном моменте.

Состояние и история всего лишь разные методы для достижения одной и той же цели. С технической точки зрения, Bitcoin-кошелек внутри делает историю состоянием, для упрощения. «Смахивает» на конфликт программирования императивного и функционального типов. Различающиеся подходы к логике задачи.

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

Ethereum – список состояний кошельков и информации внутренних «умных контрактов», изменяют который свежие операции.

Авторы Ethereum, как мы уже знаем, «прокачали» стандартный блокчейн. Плюс, они добавили немаловажный нюанс – сторадж или хранилище. Легче всего понять что это, если представить в голове общий GitHub-хранилище данных (репозиторий), загрузка которого происходит вместе с блокчейном.

Все операции вписываются в наш репозиторий. Если Олег (да, он еще жив, с ним все хорошо) решит вызвать контракт Анастасии, то в блокчейн Ethereum впишется операция «Олег призвал контракт Анастасии», при этом, в сторадж попадает информация «баланс контракта 5000 руб., пришли от Олега + Олег имел на балансе N – 5000 руб.». Пример показывает новое состояние после правок.

Внутренность стораджа Ethereum очень похожа на «Древо Меркла», но немного изменено для получения оптимального размера, и имеет имя «Patricia Tree». Однако суть неизменна. Хешируем, пока не найдем основной хеш. Основной хеш является «корнем древа», и будет во всех новых блоках. Другими словами, имея знанием об одном блоке, появляется возможность «навести справки» о состоянии все системы в данный момент, для чего нужна прочесть корень древа из блока хранилища.

Однако мы помним про децентрализацию, и о том, что никто не «заслуживает» нашего доверия. Поэтому, при первоначальном запуске Ethereum появляется потребность скачать блокчейн Ethereum целиком, а затем убедиться в правильности цепи блоков. Для экономии места, хранилище в Ethereum создано по такому принципу, который вписывает в новый блок лишь свежие изменения, оставляя остальные на своем месте, и просто создавая для них ссылки.

Ethereum. Транзакция = сообщение

Хочется предупредить вас о возможной путанице в Ethereum, когда при наличии двух типов аккаунтов, с возможность принятия транзакций. Чтобы было проще, операции между пользовательскими кошельками называются «перевод», а операции с призывом контрактов – «сообщение». Но, с технической точки зрения, это, по-прежнему, одно и то же. Непосвященным операция в Bitcoin видится в лице 5-ти основных элементов:Операции в Ethereum унаследовали такую логику, однако изменились «ингредиенты» операции. Не требуется сбор инпутов для подтверждения наличия денег. Все и без того в курсе о балансах любых кошельков Ethereum. При попытке провести транзакцию с помощью непринадлежащих пользователю или несуществующих средств, она попросту будет отброжена всеми майнерами Ethereum.

А вот «ингредиенты» операции в Ethereum:

Ethereum. Gas Limit & Gas Price

Тандем данных значений в Ethereum несет ответственность за комиссию майнерам. Не определенное кол-во BTC, как в Bitcoin, а два значения. Газ, который был «вшит» в транзакцию идет на оплату работы майнеров, будто бы заплатили вы сами.

Gas Limit в Ethereum – кол-во Gas, которое пойдет на оплату выполнения каждой строки кода в «умных контрактах» Ethereum. Стоимость всех операций определяется в данных единицах, и является неизменной на каждой машине.

Пример: анализ двух показателей имеет цену 10 Газ, а вот новая транзакция стоит 100 Газ. Также Gas идет на оплату внесения свежих записей в сторадж Ethereum.

Непосредственно призыв «умного контракта» Ethereum тоже имеет определенную цену в Gas, так как для загрузки его байт-кода в ВМ не придумали другой тип, поэтому это считается операцией. Но не все операции платные, есть и те, за которые платить не придется. К примеру, очистка временной информации бесплатная операция. Сделали так для одноц простой цели – чтобы авторы «умных контрактов» Ethereum не «загрязняли» глобальное хранилище.

Выше уже упоминалось, что «лишние» единицы Gas возвращаются отправителю, а если их не хватает, то операция полностью откатывается, но никто Gas вам не вернет, ведь его получит майнер Ethereum.

Gas Price в Ethereum – стоимость единицы Газ. С его помощью устанавливается стоимость каждой операции, можно выше, можно ниже. При увеличении стоимости Газ, относительно рынка, вы придаете майнерам мотивацию для ускоренной обработки вашей операции.

Бывают случаи, когда увеличение значения Gas Price заранее необходимо.

Например, при ICO Brave, когда ребята сумели собрать около 36 миллионов долларов всего за 24 секунды, было создано менее двух блоков. Другими словами, желающие купить с рыночной стоимость Газ, просто на просо не успевали «запрыгнуть» на шумиху за 2 блока. Ведь транзакции, которые для майнеров несут меньшую ценность, оставляются на потом, при наличии более выгодных.

«Газ Лимит» мы меряем в единицах, а вот «Газ прайс» в существующей криптовалюте. При сравнении с главной валютой, стоимость Газ получается слишком маленькой, и для этого разработали систему названий:

  • 1 Wei — самая маленькая единица расчета в системе Ethereum
  • 1012Wei = 1 Szabo
  • 1015Wei = 1 Finney
  • 1018Wei = 1 Ether (сам Эфир или ETH)

Ethereum, как и другие финансовые сети, производит операции (внутри) лишь цельными числами. Если вы студент IT’шник, то трудности с float и double вам знакомы. То есть, Ethereum обрабатывает ETH почти в 2 раза быстрее Bitcoin. До 18 знаков после нуля у Ethereum, и всего до 8 у BTC.

Кое-что неочевидное: чтение данных из контракта Ethereum не потребует оплаты и транзакции. К примеру, для чтения собственного баланса из существующего контракта, нужно загрузить актуальный блокчейн, а затем обнаружить значение требуемой переменной в глоб. хранилище. Эта функция уже встроена в клиенты Ethereum.

Ethereum. Блоки

Напоминание. Сам блокчейн строится блоками. Майнеры производят сбор операций из пула, и затем предпринимают попытки собрать свежий блок, дабы затем интегрировать в цепь. Для этого им требуется найти число, которое нужно добавить в блок, дабы тот отвечал масштабным правилам сложности.

В сети Ethereum блоки имеют отличия от Bitcoin.

Ethereum. Знание состояния сети

Каждый блок добавляется хеш всего хранилища, на данный момент. Можно провести аналогию с тем, что вы захешировали все данные с вашего жесткого диска. Подобный отпечаток всегда является 100% верным состоянием сети. В Ethereum это корень «древа Меркла», о котором вы уже прочитали в этой статье.

Хеш входит в список основных компонентов любого блока Ethereum. Подделать состояние сети не выйдет, т.к. хеш включается во все найденные блоки, а затем верифицируется участниками системы. Хорошо, что сделать это можно довольно быстро, благодаря «древу Меркла», но вы об этом и так знаете, если внимательно читаете материал.

Ethereum. «Чеки» на операции

Представим ситуацию. Мы отправили запрос на выполнение кода «умного контракта» Ethereum, но получили в ответ ошибку, не суть какого именно рода (это может быть окончание ICO или недостаток Gas). С «колокольни» блокчейн, оба случая будут считаться успешными, т.к. код был исполнен, Gas зачислен, состояние поменялось. Но ведь для отправителя транзакция ошибочна, ведь так? Вот почему в Ethereum мы наблюдаем новую «фишку»:

Кроме самих операций, в блок попадает информация об их выполнении, и называется это «receipts» или «чеки». Даже если мы закрепляем 1000 ед. Gas, но при этом, на выполнении кода потратится лишь 900 ед., а 100 получим обратно, в нашем «чеке» так и будет записано,  а вот транзакция считается на 1000, как и отправляли.

Ethereum. Помни о своих «корнях»

В Ethereum каждый майнер добавляет в свежий блок не только ссылку на «родительский блок» (parent block), но и ссылки на те блоки, чьи «родительские блоки» равны «родительскому блоку» «родительскому блоку» текущего. Называется это «дядя» (uncles).

Для упрощения, представляйте все как реальных родственников: такой-то блок мог стать моим родителем, если бы был рожден в другой семье. Для чего это нужно вы сможете узнать в разделе о майнинге в Ethereum, а также, когда будете читать об алгоритме Ghost. По итогу, в Ethereum блок имеет следующий вид:

Ethereum и майнинг.

Вспоминаем, что майнинг задействует «море» ЭВМ по всей планете, синхронно производя сбор операций в свеженький блок, который пытаются добавить в систему. Также мы помним, что для того, чтобы при синхронном анонсе блоков, получается самая настоящая гонка за лидерство, но узнать победителя, в таком случае, не представляется возможным. Как следствие, все майнеры обязаны решать непростую математическую задачку, в которой можно проверить ответ, который затем можно вписать в обнаруженный блок. Кто первый узнал ответ и произвел анонс блока в Ethereum, тот и становится счастливым обладателем 3 ETH.

Ethereum. Блок в течение 15 секунд

Уровень сложности задания определяет сама система Ethereum. Например, в Bitcoin уровень сложности по умолчанию стоит громадный, чтобы на поиск блока уходило, в среднем, 10 минут. А вот в Ethereum проще, там свежие блоки интегрируются в систему каждые 15 сек.

Вы должны помнить из статьи о блокчейне, что в Bitcoin необходимо решить задачу по поиску хеша, начинающегося на N-ое кол-во нулей. Это довольно упрощенное объяснение. Для человеческого мозга гораздо проще понять формулировку «начинается с N нулей», чем «сложность ниже предела». По факту, появление нулей в хешах каждого блока обязано высокой сложности, и получается, что достичь такого уровня представляется возможным лишь хешем с массой нулей в начале.

Число, являющееся хешем блока, должно иметь значение меньше установленного. Это и дает те самые десять минут, которые уходят на поиск свежего блока. В Ethereum всего 15 секунд, так же из-за уровня сложности (тут он ниже, но вы это уже поняли).

Ethereum и Ghost

В системе Ethereum на майнинг блоков уходит 15 сек., а на распространение во всей системе около 12 сек. Это приводит к таким последствиям, что блокчейн Ethereum находится в состоянии расщепления, и уже нельзя точно сказать, какой именно блок правильный, пока не будет найден следующий.

Но отмены «закона о самой длинной цепочке» не было, поэтому как только определенная цепь становится более длинной, чем остальные, она начинает считаться правильной. Но когда майнинг занимает всего 15 сек., подобных «самых длинных» цепочек может стать так много, что сама система блокчейн Ethereum будет расщеплена в течение нескольких часов. Как следствие – отказы и новые процессы майнинга «львиной» доли транзакций. Это неудобно, когда вы расплачиваетесь Эфирами (валюта Ethereum), но это еще не все. Тут кроется кое-какая опасность.

Майнеры Ethereum получают мотивацию объединяться в группы и майнить определенную цепочку, чтобы повысить свои шансы на получение награды. Ведь зачем тратить много времени на майнинг в «не тех» цепочках, когда можно майнить «те». А подобное объединение в группы может привести к тому, что один пул имеет более половины от всей мощности Ethereum. Таким образом, открывается шанс внести свои правки в историю блокчейн Ethereum, и произвести откат операций. А все остальные узнают об этом только через новостные платформы.

По этой причине и был внедрен алгоритм Ghost, который помимо понятия «родитель» ввел термин «дядя». В алгоритме есть простое решение проблемы: «выписывать» кое-какую награду и тем майнерам, которые обнаружили верный блок с точки зрения логики (дядю). Получить за «дядю» можно 12,5% от стоимости целого блока. Это дает майнерам мотивацию продолжать индивидуальную деятельность, т.к. с помощью «дядь» можно нормально заработать.

Ethereum. Стойкость перед интегральной схемой специального назначения (ASIC)

Раньше и «мед был слаще», и BTC майнили на CPU. Затем Bitcoin начал расти, а для майнинга пришлось использовать видеокарты. Видеокарты уступают CPU в универсальности, но зато превосходят по скорости, а также выполняют операции в уйму потоков. Как следствие, был разработан ASIC. «Мастера» собирали эти схемы «на коленке». Возможности ASIC ограничены, они не умеют ничего, кроме перебора хешей под майнинг BTC. Зато делают это с громадной скоростью!

Кто-то называет это «читерство», но это реальная штука. Ethereum требует от майнеров не только подбор хеша, но и исполнение кода «умного контракта» Ethereum. Про «полноту по Тьюрингу» мы помним. При попытке сборки ASIC для Ethereum, получим CPU, т.к. нужен stack, память и т.д. А с учетом выхода Proof-of-Stake, сборка схем для Ethereum полностью лишается финансовой оправданности.

Ethereum и Proof-of-Stake

В предыдущей статье мы узнали, что майнинг классического типа, требующий нахождение ответа на сложную задачу, зовется Proof-of-Work. Его недостаток в том, что приходится затрачивать много ресурсов на его работу. Ведь все майнеры хотят заработать, из чего следует создание майнинг-ферм, имеющих размер как пол Индии.

В Ethereum, на данный момент, тоже применяется майнинг Proof-of-Work, с наименованием алгоритма «Ethash», но это его последние деньки. Ethereum переходит на свежий алгоритм для майнеров, где не будет потребности покупать видеокарты и «конструировать» майнинговые фермы. Это Proof-of-Stake.

Для майнеров отпадает потребность перебора чисел для поиска того самого хеша. Стартует «розыгрыш», при котором майнеры сосредотачивают на своем счете операции на определенную сумму, производят их хеширование, а потом узнают получилось выиграть или не получилось.

Команда Ethereum дали название своей реализации «Casper», о чем можно почитать в официальном FAQ.

Ethereum. Резюмируем

Давайте составим общую картину работы Ethereum. Для подключения к системе нужно просто скачать клиент, к примеру, Ethereum Wallet, после чего вы получаете доступ к транзакциям. Все операции Ethereum, абсолютно все, как в случае с Bitcoin, попадают в «неподтвержденные», и там ожидают, пока майнеры доберутся до них. Разницы с Bitcoin здесь не наблюдается, единственное – в Ethereum используется понятие «состояние». Но внутри BTC кошельков, почти на 100%, происходит то же самое.

Если операцией является перевод средств от пользователя к пользователю, то суть майнинга Ethereum почти идентична с Bitcoin. Единственное – проверка инпутов заменена на проверку текущего состояния кошельков. Разница становится явной, когда в дело вступает «умный контракт» Ethereum. ЭВМ майнера обнаруживает «умный контракт» в загруженном сторадже, а затем производит запуск кода в своей ВМ. Все майнеры делают одно и то же, но успех ждет только одного. Вследствие, каждая операция обязана быть детерминирована и не иметь сложностей с «забыванием».

Каждый призыв «умного контракта» Ethereum имеет прописанный Gas Limit. Это кол-во вычислительных операций, необходимых для исполнения контракта. Если в майнинге BTC у майнеров была задача собирать операции, пока не будет достигнут нужный размер блока, но в случае с Ethereum считается суммарная сложность. То есть можно исполнить кучу простых контрактов, или один, но мощный.

Получив результат вычислений, майнер, помимо того, что составляет «древо операций», выполняет «реконструкцию» древа состояний, выписывают чеки на все исполненные транзакции, а затем интегрируют это все в свеженький блок. Только после этого начинается подбор хеша, дабы включить собственный блок в общий Ethereum блокчейн.

В Ethereum используется не стандартный хеш SHA-256, а KECCAK-256. Получается, что Ethereum блокчейн представляет собой тот же стандартный блокчейн, плюс сторадж и ВМ, исполняющую код «умного контракта» Ethereum на всех ЭВМ майнеров. В сравнении алгоритмов Ethereum и Bitcoin, начинает казаться, что с Эфирами все слишком сложно. Но если разобраться, то становится ясно, что все тут играет свою роль.

2 стори про «умные контракты» Ethereum

Когда передовая технология, типа Ethereum, попадает в руки программиста, то хочется сразу опробовать ее на всем. Читайте 2 истории из реальной жизни, связанные с «умными контрактами» Ethereum. Это поможет более глубоко оценить их возможность, а также посмотреть на последствия, которые влекут за собой ошибки.

Успех: ICO

Методов проведения ICO сегодня существует не мало. Есть даже такие, которые проводятся на «кустарных» биржах, и не имеют ничего общего с блокчейн. Мы рассмотрим стандартного ICO, с применением «умных контрактов» Ethereum.

ICO – прекрасный пример использования «умных контрактов» Ethereum. Возможно, вы уже догадались что к чему. Для примера возьмем нашего неизменного Олега.

Олег стал мастером по созданию игрушечных акул.

Шьет Олег этих акулят дома, а реализует через интернет. С ростом бизнеса, следует его логическое масштабирование. Но где взять деньги, если кредит не дают, а семья не обладает такими суммами? В голову Олега приходит идея проведения ICO: выпуск своих токенов под названием «шарк-коин», продать их, а этим добыть средств на расширение бизнеса.

Олег, логично, разрабатывает «умный контракт» Ethereum, где присутствует описание «шарк-коин» (уже есть стандарт ERC-20). «Умный контракт» токена прост: присутствуют функции «покупка», «продажа», «передача», «состояние баланса».

Если кто-либо отправляет в сторону контракта Ethereum деньги (Эфиры), то внутри «умного контракта» появляются записи в словаре «тот-то кошелек имеет N шарк-коинов». Сам словарь находится в самом блокчейне, в хранилище Ethereum, и наблюдаем для всех желающих.

Олег производит загрузку в систему через Ethereum клиент, и смело начинает кричать о том, чтобы все ломанулись покупать его токены. Возможно, на волне популярности и шумихи, и найдутся покупатели на акулят. Подобное было с Useless ICO, когда парень хотел собрать деньжат на новый ПК, а по итогу насобирал десятки тыс. американских долларов.

Такая схема напоминает выпуск акций, но не является им на 100%. Больше «смахивает» на донат с виртуальной наградой. Господа ICO-профи, не спешите кидаться в автора камнями за то, что в этой истории нет ничего про маркетинг, и отсутствуют модные слова. Это все нужно, но мы рассматриваем лишь техническую часть.

Полноценное ICO требует логики: стоимость токена, лимит на оборот, какие-то скидки и т.д. Олег имеет возможность вложить логику сразу «шарк-коин», но тогда у него не будет возможности внести в нее правки, а значит никакого изменения лимитов, спецпредложений и т.д.

Подскажем Олегу, что решить задачу можно с помощью еще одного «умного контракта» Ethereum, специально для продажи. Сюда и можно вложить всю логику ICO. Таким образом, покупатели будут отправлять средства на него, а уже потом будет решаться, какое кол-во «шарк-коинов», и за какую стоимость, выдавать каждому.

Подобный «умный контракт» Ethereum так же невозможно править после загрузки в систему. Это и есть гарант честного ICO. Но теперь контракт действует в определенный срок, и есть возможность создания еще одного.

Проведение ICO подразумевает обычную практику, в которой контракт выгружается в систему заблаговременно, чтобы потенциальные клиенты могли изучить его. Также можно сделать, так называемый pre-sale. Это ограниченный по времени контракт, дающий скидку.

По окончанию ICO «шарк-коины» живут только в виде записей в контракте, и будут они там вечно. Числа в словаре не имеют стоимости, т.к. их невозможно купить или продать, только подарить.

Для формирования стоимости токенов, их требуется добавить на какую-нибудь биржу. Здесь токены переводятся на баланс биржи (есть риски при ее закрытии), где уже формируется стоимость, в зависимости от баланса спрос/ предложение.

Если в «двух словах», то так и строится ICO. Когда-то была возможность организовать его четко по этой «инструкции». Сейчас все гораздо сложнее, но как пример использования «умных контрактов» Ethereum вполне-вполне.

Провал: The DAO

Случай с The DAO является обратной стороной успеха «умных контрактов» Ethereum. Поучительная история о том, как можно сделать все верно, при этом потерпеть крах, добиться разделения блокчейна и потерять 50% комьюнити.

В 2016 году ICO было довольно новым явлением, но сообщество Ethereum уже горели идеей объединения с помощью «умных контрактов» Ethereum. Тогда и был создан проект The DAO, и являлся, по своей природе, «умным-контрактом», с механизмами фонда инвестиций: участники инвестируют, получают дивиденды, решают вопросы на собрании и т.д.

«Умный контракт» Ethereum являлся гарантом полной честности проекта. В нем даже был учтен вариант, предусматривающий возможность выхода из проекта. Отсутствие централизации в самой децентрализации! Запуск проекта был ожидаем, поэтом на старте удалось получить примерно 165 миллионов долларов США, по курсу того времени. Это было значимым событием для всего сообщества.

«Пробел» был обнаружен после 7 дней с момента старта проекта. В коде «умного контракта» была ошибка, причем в таком месте, в котором была реализация логики «выход из фонда, получение своей доли». Суть бага была в возможности подделки адреса получателя доли, на другой «умный контракт», вследствие чего можно было повторно запросить возврат до того момента, в котором основной контракт произведет фиксацию первого возврата. Так можно было вывести все средства с проекта.

Умные злодеи смогли вывести таким образом более 65 миллионов долларов США. Несмотря на то, что ошибка была в коде, а не в самом Ethereum, все «камни» полетели в их сторону. Обидно наверное, когда делаешь все на «отлично», а все равно остаешься крайним. Это очень сжатый рассказ о The DAO, подробнее вы сможете прочесть сами, если есть желание.

По сути, у ребят было 2 пути решения проблемы: оставить все деньги умным негодяям или заставить блокчейн «встать на месте», обновить все приложения, произвести откат и новый запуск. Это разделение блокчейн. Этот вариант и выбрали. Так «родился», помимо Ethereum, еще и Ethereum Classic.

Ощутимый удар по комьюнити, в котором сложно принять вмешательство и децентрализацию извне. Это понятно, ведь если автор имеет возможность сделать так со средствами, то где гарантия, что блокчейну можно довериться? Подобное было на всех тематических форумах. А что чувствовали простые покупатели ETH, можно только догадываться. История не из радостных, но поучительная.

Заключение

Существует интересная аналогия: Bitcoin – это золото, а Ethereum – это нефть. Золото бесполезный в повседневной жизни мягкий металл, из которого не сделаешь ничего прочного. Но золото приобретает огромную цену, когда некто договаривается с кем-то использовать его в качестве основной мировой валюты. Отсюда и высокая цена золота.

Ethereum – это «черное золото». Нефть может использоваться в повседневной жизни как топливо, ее можно продать. Даже при отсутствии спроса на нефть, она все равно способствует комфортному существованию человечества.

Хорошая аналогия. Из нее можно сделать вывод, что Bitcoin и  Ethereum не конкуренты друг другу. Нефть не заменит золото, и в обратном порядке тоже. Два автономных полезных ресурса, помогающих развитию человечества. Благодарность все тем, кто дочитал статью до конца. Теперь вы гораздо лучше разбираетесь в «будущем»!

 

 

 

 

 


Оцените полезность статьи:

Звёзд: 1Звёзд: 2Звёзд: 3Звёзд: 4Звёзд: 5 (1 оценок, среднее: 5,00 из 5)
Загрузка...
Обсуждение: есть 1 комментарий
  1. Oleg:

    Интересная статья. Вот кстати тоже инфа пушка Как стать хакером | Пентест с нуля | Penetration Testing

    Ответить

Ваш комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Для отправки комментария, поставьте отметку, что разрешаете сбор и обработку ваших персональных данных . Политика конфиденциальности