Введение в технологию Блокчейн

Тимур Сергеевич Машнин, 2021

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

Оглавление

Распределенное согласование

Давайте рассмотрим децентрализацию в Биткойне на техническом уровне.

Ключевой термин, который здесь возникнет, это консенсус и, в частности, распределенный консенсус.

Основная техническая проблема, которая возникает при создании распределенной системы цифровых денег — это достижение распределенного консенсуса.

Консенсус — это процесс получения согласованного результата группой участников, например, утверждение транзакций в распределённых системах.

Распределенный консенсус имеет различные применения, и он десятилетиями изучался компьютерной наукой.

Традиционное мотивирующее использование консенсуса — это обеспечение надежности в распределенных системах.

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

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

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

Предположим, что у нас есть n узлов, каждый из которых имеет входное значение.

И некоторые из этих узлов неисправны.

Распределенный консенсусный протокол имеет следующие два свойства:

Он должен завершиться с согласованным значением на всех корректных узлах.

И это значение должно быть предложено корректным узлом, то есть оно само должно быть корректным.

Что это означает в контексте Биткойна?

Чтобы понять, как распределенный консенсус может работать в биткойне, помните, что биткойн — это одноранговая система.

Когда Алиса хочет заплатить Бобу, то, что она на самом деле делает, это транслирует транзакцию на все узлы Bitcoin, которые составляют одноранговую сеть.

Кстати, Алиса транслирует транзакцию на все одноранговые узлы Bitcoin, но при этом компьютер Боба может не находится в сети.

Конечно, возможно, что Боб запускает один из узлов в одноранговой сети.

Фактически, если он хочет получить уведомление о том, что эта транзакция действительно произошла и что он получил деньги, запуск узла Бобом был бы логичным.

Тем не менее, нет необходимости, чтобы Боб слушал в сети; запуск узла для Боба не требуется для получения средств.

Биткойны будут его, независимо от того, работает ли он в сети или нет.

Что именно здесь означает, что узлы достигают консенсуса в сети Bitcoin?

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

Это приводит к созданию единого глобального журнала для системы.

Вспомним, что в ScroogeCoin для оптимизации мы помещаем транзакции в блоки.

Аналогичным образом, в биткойне мы принимаем консенсус на основе блокчейна.

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

Кроме того, каждый узел содержит пул неутвержденных транзакций, о которых он слышал, но которые еще не включены в цепочку блоков.

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

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

Как именно узлы достигают консенсуса по блоку?

Один из способов сделать это: через равные промежутки времени, скажем каждые 10 минут, каждый узел в системе предлагает своему пулу неутвержденных транзакций быть следующим блоком.

Затем узлы выполняют некоторый консенсусный протокол, где вход каждого узла является его собственным предложенным блоком.

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

Если консенсусный протокол завершается успешно, в качестве вывода будет выбран валидный блок.

Даже если выбранный блок был предложен только одним узлом, это будет допустимый результат, если блок корректный.

Теперь, может быть какая-то валидная неутвержденная транзакция, которая не была включена в блок, но это не проблема.

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

Этот подход имеет некоторое сходство с тем, как работает биткойн, но это не совсем так, как на самом деле работает биткоин.

С этим подходом существует ряд технических проблем.

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

Во-вторых, и особенно в контексте биткойнов, сеть крайне несовершенна.

Это одноранговая система, и не все пары узлов связаны друг с другом.

Например, в сети могут быть неисправности из-за плохого подключения к Интернету, и, таким образом, выполнение консенсусного протокола, в котором все узлы должны участвовать, на самом деле невозможно.

Наконец, в системе много задержек, потому что она охватывает весь Интернет.

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

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

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

Поэтому консенсусный протокол не может содержать инструкции в виде: «Узел, который отправил самое первое сообщение на шаге 1 протокола, должен выполнить нечто на шаге 2».

Это не будет работать, потому что не все узлы согласятся, какое сообщение было отправлено первым на этапе 1 протокола.

Отсутствие глобального времени сильно ограничивает набор алгоритмов, которые могут использоваться в консенсусных протоколах.

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

В качестве примера рассмотрим проблему византийских генералов.

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

Генералы общаются с помощью посыльных, чтобы разработать совместный план действий.

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

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

Было доказано, что этого невозможно достичь, если одна треть или более генералов являются предателями.

Другой результат невозможности достичь консенсуса, известный под именами авторов, которые его впервые доказали, называется результатом невозможности Фишера-Линча-Патерсона.

При некоторых условиях, которые включают в себя узлы, действующие детерминированным образом, они доказали, что консенсус невозможен даже при одном неисправном процессе.

Несмотря на эти результаты невозможности достичь консенсуса, все равно существуют некоторые консенсусные протоколы.

Одним из наиболее известных среди этих протоколов является Paxos.

Paxos допускает определенные компромиссы.

С одной стороны, он никогда не дает противоречивого результата.

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

Но есть хорошие новости: эти результаты невозможности были доказаны в очень конкретных моделях.

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

Как ни странно, при нынешнем состоянии исследований, консенсус в Биткойне лучше работает на практике, чем в теории.

То есть мы наблюдаем за консенсусом, но не разработали теорию, чтобы полностью объяснить, почему он работает.

Но разработка такой теории важна, поскольку она может помочь нам предсказать непредвиденные атаки и проблемы, и только когда у нас будет сильное теоретическое понимание того, как работает Биткойн, мы будем иметь сильные гарантии безопасности и стабильности Bitcoin.

Какие предположения в традиционных моделях консенсуса, которые Биткойн нарушает?

Во-первых, в нем вводится идея стимулов, которая является новой для распределенного консенсусного протокола.

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

Таким образом, биткойн не совсем решает проблему распределенного консенсуса в общем смысле, но решает ее в конкретном контексте валютной системы.

Во-вторых, биткойн включает в себя понятие случайности.

Как мы увидим далее, консенсусный алгоритм Биткойна в значительной степени зависит от рандомизации.

Кроме того, Биткойн устраняет понятие конкретной отправной точки и конечной точки для достижения консенсуса.

Вместо этого, консенсус происходит в течение длительного периода времени, около часа в реальной системе.

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

Вместо этого, со временем, вероятность того, что прогноз будет соответствовать окончательному консенсусу, увеличивается, и вероятность расхождения консенсуса экспоненциально снижается.

Эти различия в модели являются ключевыми для способности Bitcoin обходить традиционные результаты невозможности достижения консенсуса для распределенных консенсусных протоколов.

Смотрите также

а б в г д е ё ж з и й к л м н о п р с т у ф х ц ч ш щ э ю я