Как Биткоин достигает децентрализации
Стимулы и проверка работы
Рассмотрим механизмы стимулирования, использующиеся в биткоин.
Ранее были сделаны предположения о том, что можно выбрать случайный узел и в процессе выполнения транзакции правильный узел будет выбираться, по крайней мере, в 50% случаев. Если у участников есть финансовые мотивы подорвать эти предположения, какой у них стимул вести себя правильно?
На рис. 2.16 показана долгосрочная консенсусная цепь и блок, который содержит попытку удвоить расходы. Можно ли как-то наказать узел, создавший этот блок?
Это проблематично по ряду причин, в том числе потому, что узлы не имеют идентификаторов, и поэтому нет возможности их наказать. Если неправильный узел нельзя наказать, следует задаться вопросом, как можно наградить узлы, которые создали правильные блоки, оказавшиеся в конечном итоге в долгосрочной консенсусной цепи?
Из-за отсутствия у узлов идентификаторов, нельзя отправить им деньги. Но если бы существовала какая-то цифровая децентрализованная валюта, то ее можно было бы использовать для вознаграждения. Другими словами, можно использовать Биткоины, чтобы стимулировать узлы, которые создали правильные блоки.
В Биткоин есть два отдельных механизма стимулирования. Первый называется наградой за блок. Согласно правилам Биткоин, узел, который создает блок, включает специальную транзакцию в этом блоке. И эта специальная транзакция - это транзакция создания монет.
Этот узел также может выбрать адрес получателя транзакции. Узел, как правило, выбирает и адресует себя как получателя этой транзакции создания монет, платя себе сам. Это можно представить как плату в обмен на услугу создания блока, входящего в консенсусную цепь.
Фактически, цена этой транзакции создания монеты имеет интересное свойство. В настоящее время она зафиксирована на 25 биткоинах, но на самом деле она уменьшается вдвое каждые четыре года. Сейчас идет второй этап. В первые четыре года существования Биткоинов это стоило 50. Теперь 25, и уменьшение будет продолжаться. Это имеет некоторые интересные последствия, которые будут рассмотрены на рис. 2.18. На основании вышесказанного, узел получает награду за блок, независимо от того, предлагает ли он блок с действительными транзакциями или он вредоносный. Как же тогда создать стимулы для честного поведения?
Как узел может получить вознаграждение? Это произойдет только в том случае, если этот блок попадет на долгосрочную консенсусную ветвь, потому что это единственный случай, когда транзакция создания монеты считается действительной, поскольку транзакция создания монет не имеет отличительных черт. Она похожа на любую другую транзакцию. Это справедливо только в том случае, если она заканчивается консенсусной цепью, в этом случае работает механизм стимулирования. Это стимулирует работу узлов, которые ведут себя правильно или, как минимум, стимулирует узлы вести себя таким образом, чтобы другие узлы согласились с созданием следующих блоков этой цепи.
Это первый механизм стимулирования. Рассмотрим механизм уменьшения платы за создание блока, входящего в консенсусную цепь, с помощью рис. 2.18, на котором изображен график с временем по оси X и общим количеством биткоинов в обращении по оси Y.
На рис. 2.18 виден первый период, когда каждый блок приводил к созданию 50 новых Биткоинов. И примерно в конце прошлого года эта награда за блок уменьшилась в два раза с 50 до 25. Можно увидеть, что каждые четыре года, расширяясь в будущее, наклон этой кривой будет уменьшаться вдвое. Это геометрическая прогрессия, у которой существует конечная сумма. То есть существует полная конечная сумма создаваемых Биткоинов. И если сложить члены геометрической прогрессии, то получится 21 миллион, исходя из скорости создания нового блока в секунду.
Также стоит отметить, что это единственный способ создания новых Биткоин. Нет другого механизма генерации монет, и именно поэтому это окончательное и общее число, пока, по крайней мере, не изменятся правила, по которым они создаются.
Получается, что награда за создание нового блока на самом деле закончится. Означает ли это, что система перестанет работать и станет небезопасной, потому что у узлов больше не будет стимулов вести себя честно? Не совсем, потому что это только первый из двух механизмов стимулирования. Существует еще один, называемый транзакционным сбором.
Что же такое сбор за транзакцию? У любой транзакции есть ее создатель. Не создатель блока, а создатель транзакции, по которой, например, Алиса платит Бобу. Что Алиса может, так это сделать исходящее значение монеты меньше, чем входящее.
И способ, которым все узлы интерпретируют это различие, согласно правилам Биткоин, заключается в том, что это и есть плата за транзакцию, и тот, кто создает блок, который первым помещает эту транзакцию в цепочку блоков, получает это вознаграждение.
Поэтому, если есть узел, который создает блок, содержащий, например, 200 транзакций, тогда сумма всех этих 200 комиссионных сборов начисляется по адресу, который узел помещает в этот блок.
Транзакционная плата является чисто добровольной, как чаевые. Но по мере того, как вознаграждение за блок начинает заканчиваться, становится все более и более важным, чтобы узлы могли вносить транзакционную плату в свои транзакции, чтобы получить разумное качество обслуживания. Но то, как данная система будет развиваться, в действительности зависит от теории игр, которая еще не полностью разработана. Таким образом, это интересная область открытых исследований в Биткоин.
После рассмотрения механизмов стимулирования узлов, рассмотрим еще несколько оставшихся проблем, чтобы иметь представление о том, как Биткоин достигает децентрализации.
Первая из них, самая сложная, - "волшебный" выбор случайного узла. Вторая заключается в том, что из-за рассмотренных механизмов вознаграждения можно попасть в пространство, бесплатное для всех, где каждый хочет запустить узел биткоинов в надежде захватить некоторые награды.
И третья - это еще более сложная версия второй проблемы. Она заключается в том, что противник может создать совершенно любое количество легальных узлов, чтобы действительно попытаться подорвать процесс достижения консенсуса.
Все эти проблемы связаны и имеют одно и то же решение. И это решение называется Доказательством выполнения работы (proof-of-work).
Вместо того чтобы выбирать случайный узел, можно выбирать узлы почти случайно. Выбирать узлы пропорционально ресурсу, который предположительно никто не сможет монополизировать. Этот ресурс - вычислительная мощность. Получается, что для гарантии выполнения работы выбираются узлы пропорционально их вычислительной мощности.
В качестве альтернативной модели можно использовать пропорцию владения валютой. Она не используется в Биткоин, но используется в его аналогах. Это называется доказательством владения долей (proof-of-stake), которое будет рассмотрено в следующих лекциях.
Выбирая узлы пропорционально их вычислительной мощности, мы позволяем узлам конкурировать друг с другом, используя свою вычислительную мощность.
Рассмотрим, что такое точная система доказательств выполнения работы в Биткоин.
![Хэш-головоломка. Чтобы создать блок, найди случайное число. Поскольку хэш-функция секретна, есть только один путь добиться успеха: пробуй каждый раз, пока не улыбнется удача](/EDI/25_07_20_1/1595629193-15985/tutorial/878/objects/2/files/2_19.png)
Рис. 2.19. Хэш-головоломка. Чтобы создать блок, найди случайное число. Поскольку хэш-функция секретна, есть только один путь добиться успеха: пробуй каждый раз, пока не улыбнется удача
Для создания блока узел, который предлагает этот блок, должен найти случайное число. В блок включаются число, предыдущий хэш и список транзакций, которые составляли этот блок. После этого вычисляется хеш всей строки. Выведенный хэш должен быть очень маленьким числом, которое попадает в небольшое целевое пространство (target space) являющейся частью довольно большого пространства, которое является выходным пространством этой хэш-функции (output space).
Ранее рассмотренные блоки содержали ряд транзакций и указатель на предыдущий блок в виде строки. Теперь в состав блока должно входить еще случайное число. Зачем это нужно? Идея в том, чтобы было умеренно трудно найти случайное число, которое удовлетворяет требуемому критерию. Критерий состоит в том, что хэширование всего блока целиком, включая случайное число, будет приводить к выходным данным определенного типа.
Исходя из предположения о защищенности хеш-функции, единственный способ добиться успеха в решении головоломки - пробовать достаточно случайных чисел, пока не повезет. Так, если бы это целевое пространство составляло всего 1% от общего объема выходных данных, нужно было бы попробовать около 100 вариантов, прежде чем вам повезет. И если эта хэш-функция должна вести себя по существу случайным образом, только 1 из 100 случайных чисел приведет к выходным данным, которые включают целевую часть.
Фактически размер этого целевого пространства не превышает 1% от объема вывода. Это намного меньше, чем можно получить за секунду.
Но в основном это вычислительная задача, которую узел должен решить для создания блока.
Теперь понятие хэш-головоломки и доказательства выполнения работы полностью устраняет требование кого-то каким-либо способом выбрать случайный узел. Вместо этого все узлы самостоятельно конкурируют за решение этих задач.
Время от времени один из них находит случайное число, которое удовлетворяет этому свойству, и этот узел затем предлагает следующий блок. Вот как происходит децентрализация. Никто не решает, какой узел предложит следующий блок.
Есть три существенных свойства функции проверки выполнения работы. Во-первых, ее очень сложно вычислить. Имеется в виду умеренно сложно на сегодняшний день, но это меняется со временем. На 1 блок нужно вычислить от 10 до 20 хэшей. Таким образом, размер целевого пространства составляет всего 1 из количества, равного от 10 до 20 размеров выходного пространства этой хэш-функции.
Если посмотреть на это с точки зрения вычислений, которые должен сделать компьютер, то получится огромное число. И из-за этого только некоторые узлы стали конкурировать в процессе создания блока, - процесс, известный как майнинг, - многократный поиск и решение задач.
Говоря о том, как капитал стимулирует майнинг, вернемся к началу лекции. Даже если технически кто-то может быть майнером, требуется много концентрации мощности или, по другому, концентрации доли участия в экосистеме Биткоина. Итак, это первое свойство задач доказательства выполнения работы.
Второе свойство состоит в необходимости регулирования стоимости. Это не та стоимость, которая фиксируется раз и навсегда. И способ, которым это достигается, состоит в том, что все узлы в сети Биткоин - одноранговые. Они автоматически заново вычисляют размер целевого пространства как долю выходного пространства, каждые две недели. При этом они поддерживают неизменность скорости вычисления цели, а это означает, что среднее время между любыми двумя последовательными действиями, производимыми в общей сети Биткоин около десяти минут.
Если майнер вложил определенное количество аппаратного обеспечения в Биткоин майнинг, но общая экосистема майнинга растет. В нее входят другие майнеры, либо они все быстрее развертывают аппаратное обеспечение. Это означает, что в течение двух недель будет найдено несколько больше блоков, чем ожидалось. И поэтому узлы будут автоматически перенастраивать параметры цели. И поэтому объем работы, которую необходимо сделать, чтобы найти блок, будет увеличиваться. Если майнер вложил в оборудование фиксированный объем инвестиций, скорость, с которой он сможет находить блоки, фактически зависит от того, что будут делать другие майнеры. Есть очень хорошая формула, чтобы проиллюстрировать это. А именно, вероятность того, что любой майнер (например, Алиса) сможет выиграть следующий блок, эквивалентна той части глобальной хэш-мощности, которую она контролирует. Если у нее есть аппаратное оборудование около 0,1% от общей мощности хэширования, она будет вычислять примерно один в каждой тысяче блоков.
Так почему эта перестройка происходит? Почему необходимо сохранить этот десятиминутный интервал постоянным? Причина проста.
Если бы время между созданием блоков было слишком мало, это было бы неэффективно – потерялось бы преимущество оптимизации, позволяющие делать много транзакций. В настоящий момент несколько сотен транзакций содержатся в одном блоке. Если бы время создания блока снизилось с десяти минут до пяти минут, это, вероятно, было бы хорошо, и есть много дискуссий об оптимальном времени создания блока альткойна. Но все согласны с тем, что время ожидания блока должно быть фиксированным. Нельзя позволять уменьшать его без ограничений, и именно поэтому необходимо автоматический пересчет цели. Благодаря тому, что функция стоимости и доказательство работы настроены, можно заявить, что большинство атак на Биткоин недопустимы, если большинство майнеров, оцененные по хэш-мощности, следуют протоколу. Это дает, как минимум, 50% вероятности того, что следующий блок будет предложен от правильного узла, а не от вредоносного.Зачем нужно, чтобы решение хэш-головоломок носило случайный характер? Никто не может предсказать, какое из случайных чисел приведет к решению. Единственный способ сделать это - попробовать варианты один за другим и надеяться, что это удастсяЭтот процесс называется тестом Бернулли. Как правило, узлы испытывают так много случайных чисел, что дискретный вероятностный процесс, называемый тестом Бернулли, может быть приближен к непрерывному процессу вероятности, называемым процессом Пуассона. И конечным результатом всего этого является то, что функция плотности распределения вероятности времени на то, чтобы найти следующий блок любым узлом в глобальной сети, выглядит как экспоненциальное распределение. Благодаря этому существует небольшая вероятность того, что если блок найден сейчас, следующий блок будет найден очень скоро, в течение нескольких секунд или через минуту. Вероятность того, что это займет много времени (например, час) также небольшая. В целом сеть автоматически регулирует сложность, так что время межблочного периода поддерживается в среднем длительностью в десять минут.
На рис. 2.20 приведен график, который показывает, как часто блоки будут создаваться всей сетью.
Для майнера, заинтересованного в быстром поиске блоков, график плотности распределения вероятности будет иметь одинаковую форму, но на X-оси он будет иметь другой масштаб.
Для конкретного майнера среднее время, чтобы найти блок, учитывая, что он только что нашел блок, будет 10 минут, деленные на долю хэш-мощности, которую он контролирует. Итак, если у майнера есть 0,1% от общей хэш-мощности сети, он будет искать блоки каждые 10 000 минут, что составляет несколько дней. Таким образом, не только основное время между блоками будет очень высоким, дисперсия времени между найденными блоками также будет высока.
Третьим важным свойством функции выполнения работы является проверка того, что новый узел правильно вычислил доказательство работоспособности. Даже если он тратит в среднем от 10 до 20 попыток найти случайное число, являющееся правильным результатом хеш-функции, это случайное число должно быть опубликовано как часть блока. Поэтому для любого другого узла нужно смотреть на содержимое блока, хэшировать их все вместе и проверять, не меньше ли выходные данные, чем целевые.
Это важное свойство, позволяющее избавиться от централизации. Не нужен централизованный орган, проверяющий, что майнеры выполняют свою работу правильно. Любой узел или любой майнер может мгновенно проверить, что блок, найденный другим, удовлетворяет этому свойству проверки доказательства выполнения работы, и тем самым они могут быть уверены, что этот майнер вложил много вычислительной мощности в поиск блока.
Терминологический словарь
Атака двойного расхода – атака, при которой данное количество монет тратится более чем в одной сделке.
Атака Сибиллы – атака, в компьютерной безопасности, при которой репутация системы подрывается путем подделки идентификаторов в одноранговых сетях.
Доказательство выполнения работы (Proof-of-work, POW) — принцип защиты распределенных систем от злоупотребления услугами (например, рассылок спама), основанный на необходимости выполнения запрашивающей стороной некоторой достаточно сложной длительной работы (POW-задачи), результат которой легко и быстро проверяется обслуживающей стороной (односторонняя функция). Главная особенность этих схем заключается в асимметрии затрат времени.
Процесс Пуассона - ординарный поток однородных событий, для которого число событий в интервале А не зависит от чисел событий в любых интервалах, не пересекающихся с А, и подчиняется распределению Пуассона. В теории случайных процессов описывает количество наступивших случайных событий, происходящих с постоянной интенсивностью.
Тест Бернулли - Любой тест или ситуация с двумя взаимно исключающими и исчерпывающими возможными результатами; например, орел/решка при подбрасывании монеты. В серии тестов Бернулли получается биноминальное распределение.
Функция плотности распределения вероятности - функция, значение которой при любом заданном образце (или точке) в пространстве выборки (набор возможных значений, принимаемых случайной величиной) можно интерпретировать как предоставление относительной вероятности того, что значение случайной величины будет равно этой выборке.
Хэширование или хеширование (hashing) — преобразование массива входных данных произвольной длины в (выходную) битовую строку фиксированной длины, выполняемое определённым алгоритмом. Функция, реализующая алгоритм и выполняющая преобразование, называется "хеш-функцией" или "функцией свёртки". Исходные данные называются входным массивом, "ключом" или "сообщением". Результат преобразования (выходные данные) называется "хешем", "хеш-кодом", "хеш-суммой", "сводкой сообщения".
Экспоненциальное распределение - абсолютно непрерывное распределение, моделирующее время между двумя последовательными свершениями одного и того же события.