Даниэль Дрешер
Основы блокчейна: вводный курс для начинающих в 25 небольших главах
Daniel Drescher
Blockchain Basics
A Non-Technical Introduction in 25 Steps
Все права защищены. Любая часть этой книги не может быть воспроизведена в какой бы то ни было форме и какими бы то ни было средствами без письменного разрешения владельцев авторских прав.
Copyright © 2017 by Daniel Drescher
© Оформление, издание, перевод, ДМК Пресс, 2018
* * *Об авторе
Даниэль Дрешер (Daniel Drescher) – опытный профессионал в банковской сфере, работавший в области электронной торговли ценными бумагами в нескольких банках. В последнее время его деятельность сосредоточена на задачах автоматизации, машинного обучения и обработки больших данных в сфере торговли ценными бумагами. Кроме того, Даниэль имеет докторскую степень по эконометрике (метематической экономике) в Берлинском Техническом университете и степень магистра инженерии программного обеспечения, присвоенную Оксфордским университетом.
О Техническом рецензенте
Лоренс Керк (Laurence Kirk) после успешной карьеры автора оперативного финансового прикладного программного обеспечения для делового центра Сити в Лондоне заинтересовался потенциальными возможностями технологии создания распределенного программного обеспечения для финансового учета. Он поступил в Оксфордский университет для получения степени магистра и основал компанию Extropy.io, консультирующую стартапы по разработке прикладных программ для платформы Ethereum. Увлеченный возможностями технологии распределенного программного обеспечения, сейчас он является разработчиком, экспертом-консультантом и инструктором по вопросам использования платформы Ethereum.
Предисловие
Данное предисловие отвечает на самый важный вопрос, на который обязан ответить любой автор: зачем читать эту книгу? Или на более конкретный вопрос: зачем читать еще одну книгу по технологии Blockchain? Продолжайте читать, и вы поймете, зачем написана эта книга, чего ждать от нее и чего в ней не следует искать. Вы также узнаете, для какой аудитории написана эта книга и как она организована.
Зачем нужна еще одна книга о технологии блокчейна?
Технология блокчейна (Blockchain, или цепочка блоков транзакций) сразу после своего появления привлекла большое внимание при крупномасштабных обсуждениях и в специализированных средствах массовой информации. Некоторые энтузиасты даже объявили блокчейн самым великим изобретением с момента появления Интернета. Поэтому за несколько последующих лет о блокчейне было написано большое количество книг и статей. Но если вы хотите узнать больше о том, как устроен и как работает блокчейн, то вскоре можете просто потеряться в бездне книг, в которых технические подробности описываются весьма поверхностно, или базовые технические концепции излагаются на чрезмерно формализованном уровне. Первый вариант не удовлетворяет любознательного читателя, поскольку не дает описания технических деталей, необходимых для понимания и оценки по достоинству технологии блокчейна, во втором случае при изучении требуется владение именно теми знаниями, которые вы хотите получить.
Эта книга предназначена для заполнения разрыва между абсолютно технической литературой по блокчейну, с одной стороны, и книгами, в которых почти все внимание сосредоточено на специализированных приложениях, или на описаниях предполагаемого экономического эффекта от применения этих приложений, или даже на рассуждениях о будущем блокчейна, с другой стороны.
Эта книга написана, потому что концептуальное понимание технических основ блокчейна необходимо, чтобы понять функциональность специализированных блокчейн-приложений, исследовать бизнес-варианты деятельности блокчейн-стартапов или полноправно участвовать в обсуждении ожидаемых экономических эффектов. Без хорошего понимания базовых теоретических концепций невозможно дать числовую оценку реального эффекта или потенциального воздействия блокчейна вообще или числовую оценку полезности, добавляемой специализированными блокчейн-приложениями. Главное внимание в этой книге уделено основополагающим теоретическим концепциям блокчейна, так как недостаточное понимание новой технологии может привести к чрезмерному увлечению внешними ее сторонами и последующему разочарованию, когда не оправдываются иллюзорные, ничем не обоснованные ожидания.
В этой книге излагаются теоретические концепции, на основе которых сформирована технология блокчейна, в лаконичном и понятном стиле, рассчитанном на неподготовленных (с технической точки зрения) читателей. Книга отвечает на три главных вопроса, возникающих при знакомстве с любой новой технологией: что это такое? зачем это нужно мне? как это работает?
Чего не следует ждать от этой книги
В этой книге преднамеренно не рассматриваются приложения, использующие блокчейн. Несмотря на то что криптовалюты в целом и Bitcoin в частности являются основными приложениями на основе блокчейна, в книге блокчейн описывается как «технология вообще». Такой подход выбран для того, чтобы ярче выделить общие ключевые концепции и технические шаблоны блокчейна, а не ограничиваться более узкими специализированными частными случаями конкретных приложений. Таким образом:
• эта книга не о Bitcoin или какой-либо другой криптовалюте;
• эта книга не рассматривает какого-то одного специализированного блокчейн-приложения;
• в этой книге нет математических доказательств основных концепций блокчейна;
• эта книга не о программировании с использованием технологии блокчейна;
• в этой книге не обсуждаются последствия применения технологии блокчейна с точки зрения законодательства;
• в этой книге не рассматриваются социальное, экономическое и этическое воздействия технологии блокчейна на наше общество или на человечество в целом.
Тем не менее некоторые из этих тем в некоторой степени обсуждаются в соответствующих подразделах данной книги.
Чего следует ожидать от этой книги
Книга подробно описывает технические концепции технологии блокчейна, такие как транзакции, хэш-значения, криптография, структуры данных, пиринговые системы, распределенные системы, целостность систем и консенсус в распределенной среде в стиле, понятном для читателей с недостаточно высоким уровнем технической подготовки. Дидактический подход к изложению материала основан на четырех элементах:
• диалоговый («разговорный») стиль;
• отсутствие математических выкладок и формул;
• постепенное продвижение по проблемной области;
• использование метафор и аналогий.
Диалоговый («разговорный») стильЭта книга преднамеренно написана в диалоговом, или «разговорном», стиле. Здесь абсолютно не применяется математический и компьютерный жаргон, чтобы устранить все препятствия для читателей, не вполне подготовленных с технической точки зрения. Но здесь представлена и объяснена вся терминология, необходимая для участия в обсуждениях и для понимания других публикаций по теме блокчейна.
Отсутствие математических выкладок и формулГлавные элементы технологии блокчейна, такие как криптография и алгоритмы, основаны на сложных математических концепциях, которые, в свою очередь, предъявляют свои особые требования к их пониманию, а также приводят к необходимости изучения математических выкладок и формул, устрашающих на вид. И все же в книге намеренно не используются ни математические выкладки, ни формулы, чтобы избежать ненужной сложности и не создавать дополнительных затруднений для читателей с недостаточной технической подготовкой.
Постепенное продвижение по проблемной областиГлавы в этой книге соответствуют своего рода шагам, или этапам, по вполне обоснованной причине. Такие шаги, или этапы, формируют процесс обучения, в котором последовательно, уровень за уровнем наращиваются знания о технологии блокчейна. Порядок этапов обучения был выбран с особой тщательностью. Они охватывают основы программной инженерии, подробно описывают терминологию, дают обоснование необходимости использования блокчейна и подробно рассматривают отдельные концепции, заложенные в основу технологии блокчейна, и взаимодействие ее составляющих. Строгая последовательность глав-этапов подчеркивает их взаимозависимость и дидактические цели. Тем самым обеспечивается логически связное изложение материала, а не набор отдельных глав, которые можно читать в любом порядке.
Использование метафор и аналогийКаждая глава-этап, представляющая новую концепцию, начинается с образного описания ситуации из реальной жизни. Такие метафоры служат четырем основным целям. Во-первых, они готовят читателя к правильному восприятию новой технической концепции. Во-вторых, объединяя техническую концепцию с простой жизненной ситуацией, метафора устраняет психологический барьер при «исследовании новой территории». В-третьих, метафоры позволяют изучать новые концепции с помощью подобия и аналогий. Наконец, метафоры формируют простые практические правила для запоминания новых концепций без затруднений.
Как организована эта книга
Книга состоит из 25 глав-этапов, сгруппированных по пяти основным темам (частям), которые в совокупности формируют процесс обучения с постепенным наращиванием знаний о технологии блокчейна. В главах рассматриваются основы программной инженерии, объясняется необходимая терминология, обосновывается необходимость применения технологии блокчейна, описываются отдельные концепции, заложенные в основу этой технологии, а также взаимодействие между ее компонентами, рассматриваются приложения блокчейна и направления разработок и активных исследований в этой области.
Часть I: Терминология и основы технологииВ главах 1-3 рассматриваются основные концепции программной инженерии и группа терминов, необходимых для понимания последующих глав. К концу главы 3 вы получите общее представление об основных концепциях и общую картину области использования технологии блокчейна.
Часть II: Зачем нужна технология блокчейнаВ главах 4-7 объясняется, зачем нужна технология блокчейна, какие задачи она решает, почему решение этих задач важно, а также описываются потенциальные возможности блокчейна. К концу главы 7 вы будете хорошо понимать проблемную область технологии блокчейна, среды, в которой применение блокчейна наиболее эффективно, и почему в этих областях применение блокчейна рассматривается в первую очередь.
Часть III: Как работает блокчейнТретья часть является главной частью книги, поскольку подробно описывает внутреннее устройство и функционирование блокчейна. В главах 8-21 последовательно представлены 15 различных технических концепций, в совокупности составляющих основу технологии блокчейна. К концу главы 21 вы будете полностью понимать все основные концепции блокчейна, их функционирование по отдельности, а также их взаимодействие для создания крупного комплексного механизма, называемого блокчейн.
Часть VI: Ограничения и способы их преодоленияВ главах 22 и 23 главное внимание уделено основным ограничениям технологии блокчейна, описываются их причины и кратко намечаются способы их преодоления. К концу главы 23 вы будете понимать, почему основополагающая идея технологии блокчейна, подробно описанная в предыдущих главах, может оказаться не подходящей для крупных коммерческих приложений с потенциальной возможностью масштабирования, какие изменения были внесены для преодоления этих ограничений и как эти изменения повлияли на свойства блокчейна.
Часть V: Использование технологии блокчейна, общие выводы и перспективыВ главах 24 и 25 рассматриваются возможные варианты практического применения технологии блокчейна в реальном мире, а также вопросы, на которые необходимо найти ответы при выборе блокчейн-приложения. В этой части также определяются области разработок и активных исследований технологии блокчейна. К концу главы 25 вы будете полностью понимать технологию блокчейна и обладать вполне достаточной подготовкой для чтения более сложных технических материалов и участия в постоянно продолжающихся обсуждениях технологии блокчейна.
Дополнительные материалы
Веб-сайт www.blockchain-basics.com предоставляет дополнительные материалы по темам некоторых глав данной книги.
Часть I
Терминология и основы технологии
В этой части описываются основные концепции программной инженерии, а также устанавливаются правила организации и стандартизации при обсуждении основ технологии. Этот этап обучения также представляет концепции программной архитектуры и целостности программного обеспечения, а еще их связь с технологией блокчейна. К концу этого этапа вы будете хорошо понимать цели и задачи технологии блокчейна и ее потенциальные возможности.
Глава 1
Понимание уровней и аспектов
Анализ систем посредством разделения их на уровни и аспекты
Эта глава закладывает основу для дальнейшего процесса изучения технологии блокчейна, четко определяя правила и способы организации и стандартизации при обсуждении основ технологии. В главе рассматриваются возможные методики анализа программных систем, объясняется, почему важно рассматривать программную систему как совокупность уровней. Далее наглядно демонстрируется, какие преимущества можно извлечь при анализе различных уровней системы и как такой подход помогает понять технологию блокчейна. В конце главы приводится краткое вводное описание концепции целостности программного обеспечения и подчеркивается ее важность.
МетафораУ вас есть мобильный телефон? Я почти уверен, что есть, так как у подавляющего большинства людей имеется, по крайней мере, один мобильный телефон. Что вы знаете о разнообразных протоколах беспроводного обмена информацией, используемых для отправки и приема данных? Что вы знаете об электромагнитных волнах, являющихся основой мобильной связи? Большинству из нас не слишком много известно об этих технических подробностях, потому что такие знания не являются необходимыми для практического использования мобильного телефона. К тому же почти все мы настолько заняты, что у нас вряд ли найдется время на изучение этих тонкостей. Мысленно разделяя мобильный телефон на общеизвестные составные части, мы учитываем, что обязательное присутствие этих частей невозможно игнорировать или считать само собой разумеющимся.
Такой подход к технологии не ограничивается только мобильными телефонами. Мы используем его во всех случаях, когда приходится осваивать новый телевизор, компьютер, стиральную машину и т. п. Но такие «мысленные» составные части в высшей степени индивидуальны, так как каждый по-своему решает, что считать важным, а что не зависит от наших индивидуальных предпочтений, от конкретной технологии, от наших целей и практических знаний. В результате ваше мысленное разделение мобильного телефона на составные части может отличаться от моего разделения того же самого мобильного телефона. Обычно это приводит к проблемам при обмене информацией, особенно если я пытаюсь объяснить вам, что необходимо знать об устройстве конкретной модели мобильного телефона. Таким образом, единый универсальный подход к разделению системы на составляющие компоненты является ключевым моментом при изучении и обсуждении любой технологии. В этой главе описывается, как следует разделять систему на составные части или уровни и соответствующим образом формулировать основные положения при обсуждении технологии блокчейна.
Уровни программной системыНа протяжении всей книги при разделении любой системы на составные части используются следующие две методики:
• сопоставление приложения и его реализации;
• разделение на функциональные и нефункциональные аспекты.
Сопоставление приложения и его реализации
Мысленное отделение потребностей пользователя от технических подробностей внутреннего устройства системы приводит к разделению уровня приложения и уровня реализации. Все, принадлежащее к уровню приложения, рассматривается как потребности пользователя (например, прослушивание музыки, фотографирование, заказ номера в отеле и т. д.). Все, принадлежащее к уровню реализации, рассматривается с точки зрения обеспечения выполнения вышеперечисленных действий (например, преобразование цифровой информации в акустические сигналы, определение цвета пиксела в цифровой видеокамере или передача сообщения по сети Интернет в систему бронирования номеров отеля). Элементы уровня реализации являются техническими по своей сущности и рассматриваются как средства достижения той или иной цели.
Разделение на функциональные и нефункциональные аспекты
Различие между тем, что система делает и как она это делает, приводит к разделению функциональных и нефункциональных аспектов. Примерами функциональных аспектов являются: передача данных по сети, воспроизведение музыки, фотографирование и редактирование отдельных пикселов в изображении. Примеры нефункциональных аспектов: удобный графический пользовательский интерфейс, быстрое программное обеспечение, возможность безопасного хранения пользовательских данных и защита их приватности. Другими важными нефункциональными аспектами системы являются безопасность и целостность. Целостность (integrity) означает, что система ведет себя именно так, как от нее ожидают, в то же время понятие целостности включает в себя и многие другие аспекты, такие как, например, безопасность (защищенность) и корректность [8]. Эффективным способом запоминания различий между функциональными и нефункциональными аспектами системы является аналогия с грамматикой русского или английского языка: глаголы описывают действия (что делается), а наречия – как выполняются эти действия. Например, человек может идти быстро или медленно. В обоих случаях действие «идти» одинаково, но способы выполнения этого действия различны. Поэтому в качестве практического правила можно предложить аналогию: функциональные аспекты соответствуют глаголам, нефункциональные аспекты соответствуют наречиям.
Одновременное изучение двух уровнейОпределение функциональных и нефункциональных аспектов и разделение на уровень приложения и уровень реализации можно выполнять одновременно, получая в результате двумерную таблицу. В табл. 1.1 показан результат мысленного разделения на уровни системы «мобильный телефон» с одновременным определением функциональных и нефункциональных аспектов.
Таблица 1.1 Пример мысленного разделения на уровни мобильного телефона
Таблица 1.1 может описывать видимость (или невидимость) конкретных элементов системы для ее пользователей. Функциональные аспекты уровня приложения в большинстве своем являются видимыми элементами системы, поскольку предназначены для удовлетворения очевидных потребностей пользователей. Эти элементы обычно хорошо знакомы пользователям. С другой стороны, нефункциональные аспекты уровня реализации редко проявляют себя как основные элементы системы. Их наличие считается само собой разумеющимся.
ЦелостностьЦелостность (integrity) – это важный нефункциональный аспект любой программной системы. Понятие целостности включает три главных компонента [5]:
• целостность данных (data integrity): данные, используемые и сопровождаемые системой, должны быть полными, корректными и непротиворечивыми;
• целостность поведения (behavioral integrity): система ведет себя, как предполагается, и не допускает логических ошибок;
• безопасность (защита) (security): система способна ограничить доступ к своим данным и функциональным возможностям, разрешая его только авторизованным пользователям.
Возможно, большинство людей считает целостность программных систем фактом, не требующим подтверждения, потому что большую часть времени имеет дело с системами, сохраняющими свою целостность. Это становится возможным благодаря тому, что программисты и инженеры затратили огромное количество времени и усилий на разработку систем, обеспечивающих собственную целостность. Иногда возможна не совсем верная оценка труда инженеров по созданию систем, обеспечивающих высокий уровень целостности. Но наше мнение может измениться, как только мы встретимся с системой, не обладающей этим свойством. Это могут быть случаи потери данных, необъяснимого поведения программного обеспечения или обнаружения факта доступа посторонних лиц к вашим личным закрытым данным. Это ситуации, когда ваш мобильный телефон, компьютер, программа электронной почты, текстовый процессор или электронная таблица заставляет вас разозлиться и забыть о хороших манерах. Во всех подобных случаях мы действительно начинаем понимать, насколько важным аспектом является целостность программного обеспечения. Поэтому не должно вызывать удивления то обстоятельство, что профессиональные разработчики программного обеспечения затрачивают огромное количество времени на кажущийся незначительным аспект уровня реализации.
ПерспективаВ этой главе представлена вводная информация о некоторых общих принципах программной инженерии. Здесь рассматривались концепции целостности, функциональные и нефункциональные аспекты, уровни приложения и реализации программной системы. Понимание этих концепций поможет вам более широко взглянуть на среду, в которой существует технология блокчейна. В следующей главе будет представлена более подробная картина применения концепций, описанных в данной главе.
Резюме• Анализ систем может выполняться с помощью разделения:
– на уровень приложения и уровень реализации;
– на функциональные и нефункциональные аспекты.
• Уровень приложения сосредоточен на потребностях пользователя, уровень реализации – на способах удовлетворения этих потребностей.
• Функциональные аспекты определяют, что делать, нефункциональные аспекты определяют, как это делать.
• Большинству пользователей хорошо известны функциональные аспекты уровня приложения системы, в то время как нефункциональные аспекты системы, особенно относящиеся к уровню реализации, практически невидимы для пользователя.
• Целостность является важным нефункциональным аспектом любой программной системы и включает три главных элемента:
– целостность данных;
– целостность поведения;
– безопасность (защита).
• Большинство критических сбоев программного обеспечения, таких как потери данных, необъяснимое поведение, доступ посторонних лиц к личным закрытым данным, является результатом нарушения целостности системы.
Глава 2
Более подробная картина
Архитектура программного обеспечения и ее связь с технологией блокчейна
В этой главе не только представлена более подробная картина среды, в которой существует технология блокчейна, но и более точно определяется место расположения этой технологии в общей картине. Чтобы лучше увидеть все это, в главе вводится концепция архитектуры программного обеспечения и объясняется ее связь с концепцией разделения системы на уровни и аспекты. Чтобы помочь вам в определении места расположения технологии блокчейна в общей картине, здесь особо отмечаются взаимосвязи между технологией блокчейна и архитектурой программного обеспечения. В конце главы главная цель технологии блокчейна формулируется буквально в одном предложении. Правильное восприятие этой главной цели является важнейшей основой понимания всей технологии блокчейна и содержимого всех последующих глав.
МетафораУ вас есть автомобиль? Большинство людей имеет автомобили. Даже если вы никогда не покупали машину, вероятнее всего, вы все же знаете, что машины оснащены различными типами двигателей (например, дизельными, бензиновыми или электрическими). Это пример применения принципа модульности как результата реализации идеи разделения на уровни для автомобилей. Возможность выбора одного из нескольких типов двигателя при покупке машины может привести к значительным различиям функциональных возможностей транспортных средств.
Две машины, внешне выглядящие абсолютно одинаково, могут совершенно отличаться по мощности их двигателей, следовательно, обеспечивать различные скорости вождения. Кроме того, выбор двигателя повлияет и на другие характеристики автомобиля, такие как цена, стоимость техобслуживания, тип потребляемого топлива, система отвода выхлопных газов, размеры тормозных колодок. Мысленно представляя схему этих взаимосвязей, можно гораздо быстрее понять роль технологии блокчейна в общей картине программной среды.