Что такое Ethereum?
Ethereum
часто называют "мировым компьютером". Но что это значит? Давайте начнем с технического описания, а затем попытаемся расшифровать его с помощью практического анализа возможностей и характеристик Ethereum, сравнивая его с Bitcoin и другими блокчейн платформами (платформами децентрализованного обмена информацией).
С точки зрения вычеслительных наук, Ethereum - это детерминированная машина состояний, состоящая из всеобще доступного состояния и виртуальной машины, которая применяет изменения к этому состоянию.
С более прикладной точки зрения, Ethereum - это децентрализованная вычислительная инфраструктура с открытым исходным кодом, которая выполняет программы, называемые смарт-контрактами
. Она (вычислительная инфраструктура) использует блокчейн для синхронизации и хранения изменений состояния системы, а также криптовалюту под названием эфир
(ether) для измерения и ограничения вычислительных ресурсов для выполнения этих программ.
Платформа Ethereum позволяет разработчикам создавать децентрализованные приложения со встроенными экономическими функциями. Обеспечивая высокую доступность, проверяемость, прозрачность и нейтральность, она (платформа) также уменьшает или устраняет цензуру и некоторые риски связанные с посредниками.
По сравнению с Биткойном
Многие люди приходят в Ethereum, уже имея некоторый опыт работы с криптовалютами, в частности с Bitcoin
. Ethereum имеет много общего с другими блокчейнами: одноранговая сеть (объединяющая участников), византийский отказоустойчивый алгоритм консенсуса для синхронизации состояния (блокчейн с доказательством работы), использование криптографических примитивов, таких как цифровые подписи и хэши, и цифровая валюта (эфир).
Однако во многих отношениях и цель, и конструкция Ethereum разительно отличаются от тех блокчейнов, которые были до него, включая Bitcoin.
Назначение Ethereum заключается не в том, чтобы быть платежной сетью с цифровой валютой. Хотя цифровая валюта эфир является неотъемлемой частью Ethereum и необходима для его функционирования, эфир задуман как валюта для оплаты использования платформы Ethereum.
В отличие от Bitcoin, который имеет очень ограниченный язык сценариев, Ethereum задуман как программируемый блокчейн общего назначения, на котором работает виртуальная машина, способная выполнять код произвольной и неограниченной сложности. Если скриптовый язык Bitcoin намеренно ограничен простой оценкой истинности/ложности условий расходования средств, то язык Ethereum является полным по Тьюрингу, что означает, что Ethereum может прямо функционировать как компьютер общего назначения.
Компоненты блокчейна
Компонентами блокчейна являются (обычно):
- одноранговая сеть (peer-to-peer, p2p), соединяющая участников и распространяющая транзакции и блоки на основе стандартизированного протокола "gossip".
- сообщения в форме транзакций, представляющие переходы состояний
- набор правил консенсуса, определяющих, что считать транзакцией и как определять правильность транзакции
- машина состояний, которая обрабатывает транзакции в соответствии с правилами консенсуса
- цепочка криптографически защищенных блоков, которая действует как журнал всех проверенных и принятых транзакций
- алгоритм консенсуса, который децентрализует контроль над блокчейном, заставляя участников сотрудничать в обеспечении соблюдения правил консенсуса
- теоретико-игровая схема стимулирования (например, стоимость нахождения правильного доказательства выполнения работы плюс вознаграждение за блок) для экономической безопасности машины состояний в открытой, конкурентной среде.
- одна или несколько программных реализаций вышеперечисленного с открытым исходным кодом ("клиенты").
Все или большинство этих компонентов обычно объединены в одном программном клиенте. Например, в Bitcoin эталонная реализация разработана проектом с открытым исходным кодом Bitcoin Core и реализована как клиент bitcoind. В Ethereum вместо эталонной реализации существует эталонная спецификация - математическое описание системы в Yellow Paper (см. раздел "Дальнейшее чтение"). Существует ряд клиентов, которые построены в соответствии с эталонной спецификацией.
В прошлом мы использовали термин "блокчейн" для обозначения всех только что перечисленных компонентов, как сокращенное обозначение комбинации технологий, которые охватывают все описанные характеристики. Однако сегодня существует огромное разнообразие блокчейнов с различными свойствами. Нам нужны уточнения, которые помогут нам понять характеристики рассматриваемого блокчейна, такие как открытый, публичный, глобальный, децентрализованный, нейтральный и устойчивый к цензуре, чтобы определить важные возникающие характеристики системы "блокчейн".
Рождение Ethereum
Все великие инновации решают реальные проблемы, и Ethereum не является исключением. Ethereum был задуман в тот момент, когда люди осознали силу модели Bitcoin и пытались выйти за рамки криптовалютных приложений. Но разработчики столкнулись с проблемой: им нужно было либо строить приложения на основе Bitcoin, либо создавать новый блокчейн. Строить приложение на основе Биткойна означало жить в рамках преднамеренных ограничений сети и пытаться найти обходные пути. Ограниченный набор типов транзакций, типов данных и размеров хранилища данных, казалось, ограничивал типы приложений, которые могли работать непосредственно на Bitcoin; все остальное требовало дополнительных внецепочечных уровней, что сразу же сводило на нет многие преимущества использования публичного блокчейна. Для проектов, которые нуждались в большей свободе и гибкости, оставаясь на цепочке, единственным выходом было создание нового блокчейна. Но это означало много работы: создание всех элементов инфраструктуры, исчерпывающее тестирование и т.д.
В конце 2013 года Виталик Бутерин, молодой программист и энтузиаст биткойна, начал думать о дальнейшем расширении возможностей биткойна и Mastercoin (оверлейный протокол, который расширял биткойн, предлагая элементарные смарт-контракты). В октябре того же года Виталик предложил команде Mastercoin более обобщенный подход, который позволял гибким и скриптовым (но неполными по Тьюрингу) контрактам заменить специализированный язык контрактов Mastercoin. Хотя команда Mastercoin была впечатлена, это предложение было слишком радикальным изменением, чтобы вписаться в их дорожную карту развития.
В декабре 2013 года Виталик начал делиться документом, в котором излагалась идея создания Ethereum: блокчейн общего назначения, полный по Тьюрингу. Несколько десятков человек увидели этот проект и высказали свои замечания, что помогло Виталику доработать предложение.
Оба автора этой книги получили ранний вариант whitepaper и прокомментировали его. Андреас М. Антонопулос был заинтригован этой идеей и задал Виталику множество вопросов об использовании отдельного блокчейна для обеспечения соблюдения правил консенсуса при выполнении смарт-контрактов и о последствиях использования языка, полного по Тьюрингу. Андреас продолжал с большим интересом следить за развитием Ethereum, но находился на ранних стадиях написания своей книги Mastering Bitcoin и принял непосредственное участие в Ethereum только много позже. Однако доктор Гэвин Вуд был одним из первых, кто связался с Виталиком и предложил свою помощь в программировании на C++. Гэвин стал соучредителем, архитектором и техническим директором Ethereum.
Как вспоминает Виталик в своей записи "Предыстория Ethereum":
Это было время, когда протокол Ethereum был полностью
моим собственным творением. Однако с этого момента
к нему начали присоединяться новые участники.
Самым заметным в протокольной части был Гэвин Вуд...
Гэвину также можно в значительной степени приписать
заслугу в тонком изменении видения от рассмотрения
Ethereum как платформы для создания программируемых
денег, с контрактами на основе блокчейна, которые
могут хранить цифровые активы и передавать их в
соответствии с заданными правилами, к вычислительной
платформе общего назначения. Это началось с
изменений в акцентах и терминологии, а позже это
влияние усилилось с усилением акцента на ансамбле
"Web3", который рассматривал Ethereum как одну
из частей набора децентрализованных технологий,
две другие - Whisper и Swarm.
Начиная с декабря 2013 года, Виталик и Гэвин совершенствовали и развивали эту идею, вместе создавая протокольный уровень.
Основатели Ethereum думали о блокчейне без конкретной цели, который мог бы поддерживать широкий спектр приложений, будучи запрограммированным. Идея заключалась в том, что, используя блокчейн общего назначения, такой как Ethereum, разработчик может программировать свое конкретное приложение, не прибегая к реализации базовых механизмов одноранговых сетей, блокчейнов, алгоритмов консенсуса и т. д. Платформа Ethereum была разработана для абстрагирования от этих деталей и обеспечения детерминированной и безопасной среды программирования для децентрализованных приложений блокчейна.
Как и Сатоши, Виталик и Гэвин не просто изобрели новую технологию; они объединили новые изобретения с существующими технологиями и представили прототип изобретения.
Основатели работали в течение многих лет, создавая и совершенствуя свое видение. И 30 июля 2015 года был добыт первый блок Ethereum. Мировой компьютер начал служить всему миру.
Примечание. Статья Виталика Бутерина "Предыстория Ethereum" была опубликована в сентябре 2017 года и представляет собой увлекательный взгляд от первого лица на самые ранние моменты Ethereum. Вы можете прочитать ее на сайте https://vitalik.ca/general/2017/09/14/prehistory.html.
Четыре этапа развития Ethereum
Развитие Ethereum было запланировано на четыре отдельных этапа, на каждом из которых происходили значительные изменения. На каждом этапе могут выходить подвыпуски, известные как "жесткое разветвление", которые изменяют функциональность таким образом, что это ломает обратную совместимость.
Четыре основных этапа разработки имеют кодовые названия Frontier
, Homestead
, Metropolis
и Serenity
. Промежуточные жесткие разветвления, которые появились на сегодняшний день, имеют кодовые названия Ice Age
, DAO
, Tangerine Whistle
, Spurious Dragon
, Byzantium
, Constantinople/St. Petersburg
, Istanbul
и Muir Glacier
. Этапы разработки и промежуточные разветвления показаны на следующей временной шкале, которая "датируется" номером блока:
Блок № 0
Frontier - начальная стадия Ethereum, длившаяся с 30 июля 2015 года по март 2016 года.
Блок № 200,000
Ice Age - жесткое разветвление для введения экспоненциального повышения сложности, чтобы мотивировать переход к PoS, когда он будет готов.
Блок № 1,150,000
Homestead - вторая ступень Ethereum, запущенная в марте 2016 года.
Блок № 1,192,000
DAO - жесткое разветвление, которое возместило убытки жертвам взломанного контракта DAO и привел к разделению Ethereum
и Ethereum Classic
на две конкурирующие системы.
Блок № 2,463,000
Tangerine Whistle - жесткое разветвление, которое изменило расчет газа для некоторых операций ввода-вывода с высокой нагрузкой и очистивший накопленное состояние от атаки типа "отказ в обслуживании" (DoS), которая использовала низкую стоимость газа для этих операций.
Блок № 2,675,000
Spurious Dragon - жесткое разветвление, которое устранило дополнительные вектора DoS-атак и еще одной очистки состояния. Кроме того, добавлен механизм защиты от атак повторного воспроизведения.
Блок № 4,370,000
Metropolis / Byzantium-Metropolis - третья ступень развития Ethereum. Запущенный в октябре 2017 года, Byzantium является первой частью Metropolis, добавляя низкоуровневые функциональные возможности и регулируя вознаграждение и сложность блока.
Блок № 7,280,000
Constantinople/St. Petersburg планировался как вторая часть Metropolis с аналогичными улучшениями. За несколько часов до его активации была обнаружена критическая ошибка. Поэтому жёсткое разветвление было отложено и переименовано в Санкт-Петербург.
Блок № 9,069,000
Istanbul - дополнительное жесткое разветвление с тем же подходом и тем же названием, что и в предыдущих двух.
Блок № 9,200,000
Muir Glacier - жесткое разветвление, единственной целью которого была повторная корректировка сложности в связи с экспоненциальным ростом, введенным в Ice Age.
Также были объявлены два жёстких разветвлений, Berlin и London, и сейчас мы находимся на заключительном этапе развития Ethereum под кодовым названием Serenity. Serenity предполагает глубокую реорганизацию инфраструктуры, которая сделает Ethereum более масштабируемым, более безопасным и более устойчивым. Она представлена как вторая версия Ethereum, "Ethereum 2.0".
Ethereum: блокчейн общего назначения
Оригинальный блокчейн, а именно блокчейн Bitcoin, отслеживает состояние биткойнов и их принадлежность. Биткойн можно представить как распределенную консенсусную машину состояний, где транзакции вызывают глобальный переход состояния, изменяя владение монетами. Переходы состояния ограничены правилами консенсуса, что позволяет всем участникам (в конечном итоге) сходиться к общему (консенсусному) состоянию системы после добычи нескольких блоков.
Ethereum также является распределенной машиной состояний. Но вместо того, чтобы отслеживать только состояние владения валютой, Ethereum отслеживает переходы состояния хранилища данных общего назначения, то есть хранилища, которое может содержать любые данные, выражаемые в виде кортежа ключ-значение. В хранилище данных типа "ключ-значение" хранятся произвольные значения, каждое из которых ссылается на некоторый ключ; например, значение "Mastering Ethereum" ссылается на ключ "Название книги". В некотором смысле это служит той же цели, что и модель хранения данных в памяти с произвольным доступом (RAM), используемая в большинстве компьютеров общего назначения. В памяти Ethereum хранятся как код, так и данные, а для отслеживания изменений этой памяти во времени используется блокчейн Ethereum. Как и компьютер общего назначения с хранимыми программами, Ethereum может загружать код в свою машину состояний и запускать его, сохраняя полученные изменения состояния в блокчейне. Два критических отличия от большинства компьютеров общего назначения заключаются в том, что изменения состояния Ethereum регулируются правилами консенсуса, а состояние распределяется глобально. Ethereum отвечает на вопрос: "Что если бы мы могли отслеживать любое произвольное состояние и программировать машину состояний для создания всемирного компьютера, работающего на основе консенсуса?".
Компоненты Ethereum
В Ethereum компонентами блокчейн-системы, описанной в разделе "Компоненты блокчейна", являются, в частности:
P2P-сеть
Ethereum работает в основной сети Ethereum, которая адресуется через TCP-порт 30303, и использует протокол под названием ÐΞVp2p.
Правила консенсуса
Правила консенсуса в Ethereum определены в справочной спецификации Yellow Paper (см. Дальнейшее чтение).
Транзакции
Транзакции Ethereum - это сетевые сообщения, которые включают (помимо прочего) отправителя, получателя, значение и полезную нагрузку данных.
Машина состояний
Переходы между состояниями Ethereum обрабатываются виртуальной машиной Ethereum (EVM) - виртуальной машиной на основе стека, выполняющей байткод (инструкции на машинном языке). Программы EVM, называемые "смарт-контрактами", пишутся на языках высокого уровня (например, Solidity) и компилируются в байткод для выполнения на EVM.
Структуры данных
Состояние Ethereum хранится локально на каждом узле в виде базы данных (обычно это LevelDB от Google), которая содержит транзакции и состояние системы в виде сериализованной хешированной структуры данных, называемой деревом Меркла Патриция.
Алгоритм консенсуса
Ethereum использует модель консенсуса Биткойна, Nakamoto Consensus, которая использует последовательные блоки с одной подписью, взвешенные по важности PoW для определения самой длинной цепочки и, следовательно, текущего состояния. Однако в ближайшем будущем планируется перейти на систему взвешенного голосования PoS под кодовым названием Casper.
Экономическая безопасность
В настоящее время Ethereum использует алгоритм PoW под названием Ethash, однако в будущем он будет отменен с переходом на PoS.
Клиенты
Ethereum имеет несколько совместимых реализаций клиентского программного обеспечения, наиболее известными из которых являются Go-Ethereum (Geth) и Parity.
Дополнительная литература
Следующие ссылки содержат дополнительную информацию об упомянутых здесь технологиях:
- Желтый документ Ethereum
- The Beige Paper, переработанный вариант Yellow Paper для более широкой аудитории на менее формальном языке: https://github.com/chronaeon/beigepaper
- Сетевой протокол ÐΞVp2p: https://github.com/ethereum/devp2p/blob/master/rlpx.md
- Список ресурсов виртуальной машины Ethereum: https://eth.wiki/en/concepts/evm/ethereum-virtual-machine-(evm)-awesome-list
- База данных LevelDB (чаще всего используется для хранения локальной копии блокчейна): https://github.com/google/leveldb
- Патрицианские деревья Меркла: https://eth.wiki/en/fundamentals/patricia-tree
- Алгоритм Ethash PoW: https://eth.wiki/en/concepts/ethash/ethash
- Casper PoS v1 Implementation Guide: http://bit.ly/2DyPr3l
- Клиент Go-Ethereum (Geth): https://geth.ethereum.org/
- Клиент Parity Ethereum: https://parity.io/
Ethereum и полнота по Тьюрингу
Как только вы начнете читать об Ethereum, вы сразу же столкнетесь с термином "полнота по Тьюрингу". Говорят, что Ethereum, в отличие от Bitcoin, является полным по Тьюрингу. Что именно это означает?
Этот термин относится к английскому математику Алану Тьюрингу, который считается отцом компьютерной науки. В 1936 году он создал математическую модель компьютера, состоящую из машины состояний, которая манипулирует символами, считывая и записывая их в последовательную память (напоминающую бумажную ленту бесконечной длины). С помощью этой конструкции Тьюринг создал математическую основу для ответа (отрицательного) на вопросы о всеобщей вычислимости, то есть о том, все ли проблемы разрешимы. Он доказал, что существуют классы проблем, которые не поддаются вычислению. В частности, он доказал, что проблема остановки (можно ли, учитывая произвольную программу и ее входные данные, определить, прекратит ли программа в конечном итоге выполнение) не является разрешимой.
Алан Тьюринг также определил, что система является полной по Тьюрингу, если она может быть использована для моделирования любой машины Тьюринга. Такая система называется универсальной машиной Тьюринга (УМТ).
Способность Ethereum выполнять сохраненную программу в машине состояний, называемой виртуальной машиной Ethereum, одновременно с чтением и записью данных в память делает его системой, полной по Тьюрингу, а значит, и УВМ. Ethereum может вычислить любой алгоритм, который может быть вычислен любой машиной Тьюринга, учитывая ограничения конечной памяти.
Новаторская инновация Ethereum заключается в объединении архитектуры вычислений общего назначения компьютера с хранимыми программами с децентрализованным блокчейном, что позволяет создать распределенный односоставной (singleton) мировой компьютер. Программы Ethereum работают "везде", но при этом создают общее состояние, которое защищено правилами консенсуса.
Полнота по Тьюрингу как "особенность"
Услышав, что Ethereum завершен по Тьюрингу, вы можете прийти к выводу, что это свойство, которое каким-то образом отсутствует в системе, которая по Тьюрингу неполна. Скорее наоборот. Полнота по Тьюрингу достигается очень легко; на самом деле, самая простая из известных Тьюринг-полных машин состояний имеет 4 состояния и использует 6 символов, а определение состояния имеет длину всего 22 инструкции. Действительно, иногда обнаруживается, что системы являются "случайно полными по Тьюрингу". Увлекательную ссылку на такие системы можно найти на сайте http://bit.ly/2Og1VgX.
Однако полнота по Тьюрингу очень опасна, особенно в системах с открытым доступом, таких как публичные блокчейны, из-за проблемы остановки, которую мы затрагивали ранее. Например, современные принтеры неполны по Тьюрингу, и им можно дать напечатать файлы, которые отправят их в замороженное состояние. Тот факт, что Ethereum является полным по Тьюрингу, означает, что любая программа любой сложности может быть вычислена Ethereum. Однако такая гибкость порождает некоторые острые проблемы безопасности и управления ресурсами. Принтер, не реагирующий на запросы, можно выключить и включить снова. Это невозможно в публичном блокчейне.
Последствия полноты Тьюринга
Тьюринг доказал, что невозможно предсказать, завершится ли программа, смоделировав ее на компьютере. Проще говоря, мы не можем предсказать путь программы, не запустив ее. Тьюринг-полные системы могут работать в "бесконечных циклах" - термин, используемый (в чрезмерном упрощении) для описания программы, которая не завершается. Тривиально создать программу, выполняющую цикл, который никогда не заканчивается. Но непреднамеренные бесконечные циклы могут возникать без предупреждения из-за сложных взаимодействий между начальными условиями и кодом. В Ethereum это создает проблему: каждый участвующий узел (клиент) должен подтверждать каждую транзакцию, запуская все смарт-контракты, которые он вызывает. Но, как доказал Тьюринг, Ethereum не может предсказать, завершится ли смарт-контракт или как долго он будет работать, не запустив его на самом деле (возможно, он будет работать вечно). Случайно или специально, смарт-контракт может быть создан таким образом, что он будет выполняться вечно, когда узел пытается его подтвердить. Это фактически DoS-атака. И конечно, между программой, которой требуется миллисекунда для подтверждения, и программой, которая работает вечно, находится бесконечное множество неприятных, ресурсозатратных, раздувающих память, перегревающих процессор программ, которые просто тратят ресурсы. В мировом компьютере программа, которая злоупотребляет ресурсами, получает возможность злоупотреблять ресурсами всего мира. Как Ethereum ограничивает ресурсы, используемые смарт-контрактом, если он не может заранее предсказать использование ресурсов?
Чтобы ответить на этот вызов, Ethereum вводит механизм учета, называемый газом. Когда EVM выполняет смарт-контракт, он тщательно учитывает каждую инструкцию (вычисления, доступ к данным и т. д.). Каждая инструкция имеет заранее определенную стоимость в единицах газа. Когда транзакция запускает выполнение смарт-контракта, она должна включать количество газа, которое устанавливает верхний предел того, что может быть потреблено при выполнении смарт-контракта. EVM прекратит выполнение, если количество газа, потребляемого при вычислениях, превысит количество газа, доступное в транзакции. Газ - это механизм, который Ethereum использует для обеспечения вычислений, завершенных по Тьюрингу, ограничивая при этом ресурсы, которые может потреблять любая программа.
Следующий вопрос: "Как получить газ для оплаты вычислений на мировом компьютере Ethereum? Вы не найдете газ ни на одной бирже. Его можно купить только в рамках транзакции, и купить его можно только за эфир. Эфир должен быть отправлен вместе с транзакцией, и он должен быть явно предназначен для покупки газа, наряду с приемлемой ценой на газ. Как и в насосе, цена на газ не является фиксированной. Газ покупается для транзакции, вычисления выполняются, а неиспользованный газ возвращается обратно отправителю транзакции.
От блокчейн общего назначения к децентрализованным приложениям (DApps)
Ethereum начинался как способ создания блокчейна общего назначения, который можно было программировать для различных целей. Но очень быстро концепция Ethereum расширилась и стала платформой для программирования DApps. DApps представляют собой более широкую перспективу, чем смарт-контракты. DApp - это, как минимум, смарт-контракт и пользовательский веб-интерфейс. В более широком смысле DApp - это веб-приложение, построенное на базе открытых, децентрализованных, одноранговых инфраструктурных сервисов.
DApp состоит как минимум из:
- смарт-контракты на блокчейне
- веб-интерфейс пользователя.
Кроме того, многие DApp включают в себя другие децентрализованные компоненты, такие как:
- Децентрализованный (P2P) протокол и платформа для хранения данных
- Децентрализованный (P2P) протокол и платформа для обмена сообщениями.
Совет. Вы можете встретить DApps, написанные как ÐApps. Символ Ð - это латинский символ "ETH", обозначающий Ethereum. Чтобы отобразить этот символ, используйте кодовую точку Юникода 0xD0 или, при необходимости, HTML-символическую сущность eth (или десятичную сущность #208).
Третья эпоха Интернета
В 2004 году появился термин "Web 2.0", описывающий эволюцию Интернета в сторону пользовательского контента, отзывчивых интерфейсов и интерактивности. Web 2.0 - это не техническая спецификация, а скорее термин, описывающий новую направленность веб-приложений.
Концепция DApps призвана перевести Всемирную паутину на следующий естественный этап эволюции, внедряя децентрализацию с протоколами peer-to-peer в каждый аспект веб-приложения. Для описания этой эволюции используется термин web3, означающий третью "версию" веба. Впервые предложенный доктором Гэвином Вудом, web3 представляет собой новое видение и фокус для веб-приложений: от централизованных и управляемых приложений к приложениям, построенным на децентрализованных протоколах.
В последующих главах мы изучим библиотеку Ethereum web3.js JavaScript, которая связывает приложения JavaScript, запускаемые в браузере, с блокчейном Ethereum. Библиотека web3.js также включает интерфейс к сети хранения данных P2P под названием Swarm и службе обмена сообщениями P2P под названием Whisper. Благодаря этим трем компонентам, включенным в библиотеку JavaScript, работающую в вашем браузере, разработчики получают полный набор средств разработки приложений, позволяющий им создавать web3 DApps.
Культура разработки Ethereum
До сих пор мы говорили о том, как цели и технологии Ethereum отличаются от целей и технологий других блокчейнов, предшествовавших ему, таких как Bitcoin. В Ethereum также совершенно иная культура разработки.
В Биткойне разработка ведется на основе консервативных принципов: все изменения тщательно изучаются, чтобы ни одна из существующих систем не была нарушена. По большей части изменения внедряются только в том случае, если они обратно совместимы. Существующим клиентам разрешается отказаться от обновления, но они будут продолжать работать, если решат не обновляться.
В Ethereum, для сравнения, культура разработки сообщества ориентирована на будущее, а не на прошлое. Мантра (не совсем серьезная) гласит: "Двигайся быстро и ломай вещи". Если необходимо внести изменения, они будут реализованы, даже если это означает, что недействительны предыдущие предположения, нарушена совместимость или клиенты вынуждены обновляться. Культура разработки Ethereum характеризуется быстрыми инновациями, быстрой эволюцией и готовностью внедрять перспективные улучшения, даже если это происходит за счет некоторой обратной совместимости.
Для вас как разработчика это означает, что вы должны сохранять гибкость и быть готовыми перестроить свою инфраструктуру, когда некоторые из базовых предпосылок изменятся. Одной из серьезных проблем, с которыми сталкиваются разработчики Ethereum, является противоречие между развертыванием кода в неизменной системе и платформой разработки, которая продолжает развиваться. Вы не можете просто "обновить" свои смарт-контракты. Вы должны быть готовы развернуть новые, перенести пользователей, приложения и средства и начать все сначала.
Как ни странно, это также означает, что цель создания систем с большей автономией и меньшим централизованным контролем все еще не полностью реализована. Автономия и децентрализация требуют немного большей стабильности платформы, чем та, которую вы, вероятно, получите в Ethereum в ближайшие несколько лет. Для того чтобы "развивать" платформу, вы должны быть готовы отбраковывать и перезапускать свои смарт-контракты, что означает, что вы должны сохранять определенную степень контроля над ними.
Но, с положительной стороны, Ethereum движется вперед очень быстро. Здесь мало возможностей для "велосипедного шеддинга" - выражения, означающего задержку развития из-за споров о мелких деталях, например, о том, как построить велосипедный сарай на заднем дворе атомной электростанции. Если вы начнете спорить, вы можете внезапно обнаружить, что пока вы отвлекались, остальная команда разработчиков изменила план и отказалась от велосипедов в пользу автономных судов на воздушной подушке.
В конце концов, развитие платформы Ethereum замедлится, и ее интерфейсы станут фиксированными. А пока инновации являются движущим принципом. Вам лучше не отставать, потому что никто не будет тормозить за вас.
Зачем изучать Ethereum?
Блокчейн имеет очень крутую кривую обучения, поскольку он объединяет множество дисциплин в одну область: программирование, информационную безопасность, криптографию, экономику, распределенные системы, одноранговые сети и т. д. Ethereum делает эту кривую обучения гораздо менее крутой, поэтому вы можете быстро приступить к работе. Но под поверхностью обманчиво простой среды скрывается гораздо больше. По мере того как вы учитесь и начинаете смотреть глубже, всегда появляется еще один слой сложности и удивительного.
Ethereum - отличная платформа для изучения блокчейн, и она создает огромное сообщество разработчиков быстрее, чем любая другая платформа блокчейн. Как никакая другая, Ethereum - это блокчейн для разработчиков, созданный разработчиками для разработчиков. Разработчик, знакомый с приложениями на JavaScript, может зайти в Ethereum и очень быстро начать создавать рабочий код. В течение первых нескольких лет существования Ethereum часто можно было увидеть футболки с объявлениями о том, что вы можете создать токен всего за пять строк кода. Конечно, это обоюдоострый меч. Легко написать код, но очень трудно написать хороший и безопасный код.
Чему вас научит эта книга
В этой книге вы погрузитесь в Ethereum и рассмотрите каждый компонент. Вы начнете с простой транзакции, разберете, как она работает, создадите простой контракт, сделаете его лучше и проследите его путь по системе Ethereum.
Вы узнаете не только о том, как использовать Ethereum - как он работает, - но и о том, почему он устроен именно так, как устроен. Вы сможете понять, как работает каждая из частей, как они сочетаются друг с другом и почему.