Краткий экскурс в Ethereum


ethereum logo

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

Придумал Ethereum канадский программист с российскими корнями Виталик Бутерин. Когда Ethereum только появился, на дворе был 2013 год, а Бутерину исполнилось всего восемнадцать лет. Тем не менее его идея нашла живейший отклик в сообществе. Нашелся человек — Гэвин Вуд, который доказал возможность создания придуманной Бутериным системы и описал основные принципы ее работы в Ethereum Yellow Paper. Вместе с первыми участниками команды Ethereum они запустили краудфандинг и собрали инвестиций на 18 миллионов долларов в биткойнах — в обмен на 60 миллионов эфиров.

mist

Чем же уникален Ethereum?

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

В рудиментарной форме умные контракты присутствуют и в Bitcoin, но создатель криптовалюты Сатоси Накамото намеренно ограничил их возможности. Для описания условий сделок в Bitcoin встроен язык программирования под названием Script. Он напоминает Forth, но не позволяет устраивать циклы, не сохраняет состояние между вызовами и лишен доступа к данным транзакции или блокчейна. Этого хватает только на самые простые задачи.

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

Чтобы избежать злоупотребления ресурсами — проблемы, которая вынудила Сатоси лишить Script полноты по Тьюрингу, — в Ethereum предусмотрено «горючее» (gas). Его количество у создателя транзакции ограничивает максимальное число исполняемых команд. Это не дает создавать вредоносные контракты, которые погружают машины майнеров в бесконечный цикл.

Достоинства Ethereum

Если рассматривать Ethereum как платформу для гарантированных вычислений, то по сравнению с традиционными системами у него есть следующие плюсы:

  • авторизация пользователя через криптографические подписи;
  • полностью настраиваемая логика транзакции и изменения состояний;
  • устойчив к DDoS-атакам;
  • нет единой точки отказа сети;
  • история всех действия сети хранится в открытом доступе в децентрализованной распределенной базе данных (блокчейне).

Сейчас Ethereum уступает по своей популярности только Bitcoin. Технология заинтересовала финансовый конгломерат JPMorgan Chase, входящий в «большую четверку» американских банков, с ним экспериментировал Банк Англии, а корпорации IBM и Microsoft применяли Ethereum в своих проектах.

Основные понятия

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

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

  • принцип построения системы (технологию);
  • распределенный децентрализованный доверенный реестр;
  • протокол;
  • базу данных, копии которой хранятся на компьютерах, участвующих в работе системы;
  • одноранговую сеть, в которой все участники равноправны и осуществляют взаимодействия в заданном порядке, в том числе за счет экономических стимулов.

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

Майнер — нода, которая не только записывает блоки в блокчейн, но и обрабатывает транзакции и участвует в майнинге следующего блока. Майнеры работают над решением математической задачи, а именно над поиском хеша, который удовлетворяет определенным условиям. Большая вычислительная мощность означает большую вероятность за определенное время найти удовлетворяющий условиям хеш и намайнить новый блок. За нахождение блока майнер получает награду в виде токенов системы («эфира»). Это стимулирует участников сети поддерживать работу системы. После того как сформировался блок и у всех участников обновилась информация, изменить запись уже невозможно. Защиту от мошенничества обеспечивают математический алгоритм и наличие других пользователей. Статистику добычи «эфира» можно посмотреть на ethernodes.org.

Газ, эфир, ETH — валюта Ethereum. В отличие от многих криптовалют, эфир позиционируется разработчиками не как альтернатива обычным валютам, а как некое виртуальное топливо для учета использования ресурсов децентрализованной сети. Чтобы недобросовестные пользователи не парализовали работу майнеров и полных нод (к примеру, введя их в бесконечный цикл), автор транзакции должен сразу задать максимально допустимое число шагов в вычислении. К контрактам прикрепляется некоторое количество ETH, и, если этот лимит превышен (кончился газ), вычисление прерывается, произведенные изменения откатываются, но комиссии остаются уплаченными. Эфир продается на биржах криптовалют, а капитализация всех токенов ETH достигла одного миллиарда долларов. Курс «эфира» с конца прошлого года вырос более чем в десять раз, но из-за истории с The DAO опустился вниз. На момент написания статьи он составляет около 13 долларов.

Ethereum Virtual Machine, EVM — часть протокола Ethereum, которая управляет состояниями и осуществляет обработку транзакций. С практической точки зрения EVM представляет собой гигантский распределенный автономный компьютер, который содержит миллионы объектов, называемые аккаунтами. Аккаунты могут управлять внутренней базой данных, выполнять код и взаимодействовать друг с другом. Для более детального описания рекомендуем изучить Ethereum White Paper и документацию к последнему релизу Ethereum Homestead Release.

Умные контракты — компьютерные протоколы, которые облегчают, проверяют или обеспечивают соблюдение контрактов. Они обычно имеют пользовательский интерфейс и часто эмулируют логику договорных положений. Умные контракты призваны обеспечивать лучшую безопасность, чем традиционные контракты, основанные на праве, и снижать издержки, связанные с заключением договоров. Определяющее свойство умного контракта — это самоисполняемость. Если договоры, которые заключают между собой люди, предполагают, что при несоблюдении условий нужно идти в суд (и составляются они с учетом этого), то программные контракты исполняются автоматически. Сторонники умных контрактов утверждают, что многие виды договорных положений могут быть сделаны частично или полностью самовыполняемыми, самодостаточными или и то и другое сразу.

Децентрализованные приложения, dapps — приложения, которые реализованы с помощью смарт-контрактов. Приложение не выполняется в каком-то конкретном месте, но тем не менее можно быть уверенным, что оно исполнится (если, конечно, его выполнение не прервется из-за недостатка газа). С точки зрения традиционной разработки они могут выглядеть непривычно. Бэкенд здесь — это задеплоенный смарт-контракт. Если ты хочешь к нему обратиться, то нужно установить соединение с локальной или удаленной нодой с помощью библиотеки web3.js, которая предоставляет API для запросов к блокчейну. После этого можно делать фронтенд приложения, если, конечно, он необходим.

Клиенты Ethereum

У Ethereum есть множество реализаций, они написаны на C++, Go, Python, Rust, Java, Haskell. Самый популярный клиент на сегодняшний день — это Geth, он написан на языке Go. Активно идет разработка и клиента на Rust — Parity. Первый релиз Parity уже вышел и показал отличную производительность. Существует также проект EthereumJS — клиент, написанный на JavaScript. Он разработан специально для тестирования и разработки контрактов.

После установки клиента ты можешь синхронизировать блокчейн и взаимодействовать с сетью из консоли. Но гораздо удобнее начинать с графического клиента Mist browser. После первого запуска ты создаешь аккаунт и синхронизируешь блокчейн. По умолчанию будет использоваться Mainnet, основная сеть. Помимо нее, существует тестовая сеть — Testnet. Она во многом аналогична Mainnet, но служит «песочницей».

На чем пишут смарт-контракты

Существует много языков для написания смарт-контрактов. Наиболее популярный (и с большим отрывом!) — это Solidity. По синтаксису он близок к JavaScript. Есть и альтернативный вариант — Serpent, он по духу ближе к Python.

Контракты можно скомпилировать в байт-код EVM с помощью компилятора solc или воспользоваться онлайновым компилятором. Mist browser позволяет деплоить контракты в сеть в виде исходного кода на Solidity или байт-кода EVM. Далее ты можешь использовать web3.js для создания веб-приложений, которые будут взаимодействовать с контрактом.

Существует несколько фреймворков для разработки — они предоставляют некоторые полезные функции. Если собираешься программировать смарт-контракты, рекомендуем изучить Truffle, Embark и dapple, а затем выбрать тот, что покажется наиболее удобным и соответствующим задаче.

Для разработки веб-приложений, которые взаимодействуют с умными контрактами, сформировался определенный стек. В него входят web3.js и Meteor. Ну и конечно, существует множество модулей, которые позволяют со старта получить доступ к самым разным функциям.

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

follow litvintech


Comments 8


Очень познавательно. Я тоже думаю что кефир не плох, но лиск скорей всего его обойдёт.

20.10.2016 14:39
0

Ты серьезно по поводу Лизки? Лизка отличная штука, но как-то не уверен, что удастся перейти дорогу кефиру. Все таки за кефиром Бутерин, а это весьма раскрученная личность.

20.10.2016 14:41
0

Когда у нас два кефира, необходимо определить какой из них верный - это не хило напрягает.

20.10.2016 15:00
0

Если имелось ввиду кефир и кефир классик, тогда у кефира классика нет будущего можно даже не брать его во внимание.

22.10.2016 12:33
0

Лиск уже почти полгода на генезис делегатах. Вряд ли что выйдет с таким подходом.

20.10.2016 15:15
0

А еще прежде чем кидаться такими спекуляциями хорошо бы заглянуть и разобраться в технологии. Тогда (возможно) взгляд трансформируется не в пользу Лиска.

20.10.2016 15:16
0

Время рассудит.

20.10.2016 16:11
0

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

20.10.2016 20:33
0

о. спасибо за пост.
интересно читать.

20.10.2016 22:06
0

Виталик - ГЕНИЙ !!!

22.10.2016 18:53
0

Жаль что тема The DAO даже не затронута, а это самое мутное для меня, например.

26.10.2016 09:08
0

я могу ответить на вопросы по поводу DAO.

19.11.2016 18:51
0

Это типо ООО только в блокчейне.

03.12.2016 15:25
0

Эфир помер. Да здравствует Голос!

21.11.2016 18:08
0

Я тоже этой технологией интересуюсь с самого ее появления. На самом деле тут все просто, если вы понимаете http и php. Контракт - это тоже самое что php-файл. То есть вы ему что-то посылаете, а он вам отвечает. При этом изменяется состаяние его записы в распределенной БД. Весь кайф смарт-контрактов - то что они могут взаимодействовать (общаться) между собой. Ну по аналогии php функции типо curl или file_get_contents. То есть можно создавать системы из контрактов. Как проги из классов. Отличие тоько в том, что каждое сообщение переданное классу имеет свою стоимость. На самом деле в сетях все имеет свою стоимость. И гениальность Виталика, что он придумал алгоритм для ее подсчета :)

03.12.2016 14:44
0