Содержание статьи
Ethereum можно смело называть самым амбициозным последователем Bitcoin. Тот был попыткой создать децентрализованную финансовую систему, в которой правила игры задают не государственные органы и банки, а бесстрастные алгоритмы. Ethereum идет дальше и вводит альтернативную правовую систему, которая не нуждается в судах, юристах и принуждении.
Придумал Ethereum канадский программист с российскими корнями Виталик Бутерин. Когда Ethereum только появился, на дворе был 2013 год, а Бутерину исполнилось всего восемнадцать лет. Тем не менее его идея нашла живейший отклик в сообществе. Нашелся человек — Гэвин Вуд, который доказал возможность создания придуманной Бутериным системы и описал основные принципы ее работы в Ethereum Yellow Paper. Вместе с первыми участниками команды Ethereum они запустили краудфандинг и собрали инвестиций на 18 миллионов долларов в биткойнах — в обмен на 60 миллионов эфиров.
![](https://xakep.ru/wp-content/uploads/2016/07/1468824239_2b6d_contract.png)
Чем же уникален 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. Ну и конечно, существует множество модулей, которые позволяют со старта получить доступ к самым разным функциям.