[БЕЗ_ЗВУКА]
[БЕЗ_ЗВУКА] Итак,
в этом видео поговорим об экономической мотивации участников в сети,
то есть можем ли мы мотивировать ноды быть честными.
До этого момента мы все время говорили о распределенном консенсусе как о каком-то
абстрактном техническом протоколе, но теперь мы можем использовать и тот факт,
что биткоин является валютой, которая имеет определенную ценность.
То есть если посмотреть на иллюстрацию,
мы задаем вопрос: как наградить того, кто последует за верхней цепью,
за более длинной цепью — за цепью, которая соответствует правилам протокола?
Какие есть в биткоине мотивации?
Их вообще две.
Первая — это награда за нахождение блока.
Та нода, которая создает блок, то есть пока что мы говорим «выиграла в лотерею»,
может включить в него специальную транзакцию,
которая создает новые монеты из воздуха.
И может выбрать получателя.
Естественно, она выбирает сама себя.
Потратить эту награду создатель блоков в дальнейшем сможет только если блок
попадет в длинную цепь консенсусов.
Потому что если, допустим, биржи, на которых можно продать биткоины — они
честные игроки, и они следуют за наиболее длинной цепью, если вдруг кто-то решит
начать строить какую-то побочную цепь, он зря просто потратит время, потому чо
биржа ее вообще никогда не увидит, и она отсечет ее как короткую, как невалидную.
Количество новых монет, которые может создать сам себе тот,
кто нашел блок — так называемый майнер, — оно фиксировано.
Фиксировано — оно ограничено правилами протокола.
На сегодняшний день это 12.5 биткоинов за блок.
Эта награда уполовинивается каждые 4 года.
Начиналось все с 50 биткоинов за блок, потом стало 25,
сейчас 12.5, и в итоге она сойдет почти что в 0.
Награда за нахождение блоков — это единственный способ создания новых
биткоинов, то есть это то, откуда они берутся.
На сегодняшний день найдено уже большую часть биткоинов — почти что 17 миллионов
из 21.
Но в принципе окончательна самая последняя миссия,
когда уже будет делить на 2 почти что невозможно, случится только в 2140 году.
Но в принципе в 2030 году уже почти все биткоины будут найдены.
Вторая мотивация — это комиссия за транзакции.
Тот, кто посылает транзакцию в сеть, может сделать так, чтобы сумма выходов,
то есть новых создаваемых монет вот в этой транзакции,
была меньше суммы входов, то есть сжигаемых монет в этой транзакции.
Эта разница является комиссией, и ее тоже может к себе присвоить тот,
кто нашел блок.
Зачем вообще нужны комиссии?
Чтобы как-то ограничивать количество транзакций, которые могут попасть в блок в
принципе, чтобы люди просто туда-сюда их не посылали, чтобы заспамить сеть.
В итоге у нас получилась довольно хорошая модель: и экономическая мотивация,
и консенсус, — но у нас остались проблемы.
Во-первых, мы не ответили на вопрос,
каким образом мы все-таки выбираем случайную ноду, которая создаст блок,
то есть как мы устраиваем эту лотерею и как ее сделать честной.
И второй вопрос — это как предотвратить атаки Сибиллы.
Всего в сети может быть, допустим,
100 честных нод, чтобы злоумышленнику с вероятностью больше,
чем 50 %, найти следующий блок, при случайном выборе — вот если в лотерее
— ему достаточно просто-напросто взять и запустить еще 100 нод.
Причем важно понимать, что атака Сибиллы — под нодами можно понимать даже
не целый какой-то компьютер или станцию, это может быть виртуальный компьютер,
то есть здесь не нужно какое-либо физическое присутствие.
Вот на одном компьютере можно запустить 100 нод.
В итоге нам надо как-то решить эту проблему.
Мы можем попробовать, вместо того чтобы выбирать случайную ноду с помощью
какой-то лотереи, построить такую модель, чтобы вероятность выбора следующей ноды,
которая находит блок, была пропорциональна какому-либо сильно ограниченному ресурсу,
который в теории никто не должен был бы монополизировать.
В частности, вот алгоритм Proof of Work («доказательство работы») — он говорит
о пропорции вычислительной мощности, то есть вычислительной мощностью
являются процессоры, видеокарты, так называемые асики специальные для майнинга.
Суть в том, что они считают — их невозможно взять из воздуха,
потому что они нужны физически, потому без физического какого-то оборудования
невозможно провести сложные математические расчеты.
Вторая популярная модель называется Proof of Stake — она не используется в биткоине,
используется в других криптовалютах.
Здесь пропорциональность вот этого ограниченного ресурса,
тут — пропорциональность владения монетами.
Чем у меня больше монет изначальных в системе,
тем у меня больше вероятность найти следующий блок.
Тут разница в чем?
Proof of Work-систему можно запустить с нуля как бы,
потому что люди начинают считать на существующих процессорах что-то и давать
доказательства того, что у них есть процессоры.
В Proof of Stake-системе изначально должно быть какое-то распределение монет с
помощью какого-то другого алгоритма за счет ICO или чего-то такого.
Но в принципе с нуля ее запустить, как биткоин,
Proof of Stake-систему невозможно.
Как работает Proof of Work?
Выбор нод, которые создают новый блок,
происходит в пропорции от вычислительной мощности.
То есть, соответственно, если у меня два процессора, у меня вероятность найти
следующий блок в два раза больше, чем у того, у кого один процессор.
Мы создаем некоторое соревнование между нодами за то, чтобы создать новый блок.
Все ноды участвуют одновременно, то есть нету такого, что кто-то нашел блок,
потом он ждет своей очереди, и дальше, когда эта очередь настала,
опять начинает что-то считать.
И мы ставим перед собой задачу,
чтобы создание вот таких новых личностей было относительно сложным процессом.
То есть тех, кто майнит, чтобы из ниоткуда эти процессоры не брались.
Понятно, что процессоры — это довольно дорогой ресурс.
В Proof of Work используется так называемая задача нахождения
наименьшего хеша, то есть, собственно, мы уже сейчас переходим именно к тому,
что же все-таки все эти процессоры, видеокарты и все это оборудование,
что они там считают, что они перемалывают с такой скоростью.
Это задача нахождения наименьшего хеша.
Чтобы создать блок, нам необходимо найти такое специальное
значение числа, подобрать, чтобы хеш от этого числа плюс
предыдущий хеш блок плюс сумма всех транзакций каких-то было очень маленьким.
На следующем слайде будет пример, конкретно как это выглядит.
Если хеш-функцию, которую мы выбрали,
криптографическая хеш-функция является надежной,
то единственный вариант найти вот такое случайное число — nonce называется — это
перепробовать максимальное количество случайных этих nonce, до тех пор пока нам
не повезет и мы не найдет достаточно маленькое значение хеш-функции.
Как это выглядит на примере?
Мы здесь попробовали с помощью sha256-функции закодировать
строчку «Привет!» и попробовать прибавить к этой строчке еще одно случайное число.
Допустим, для простоты примера мы будем использовать не случайные числа,
а просто числа по порядку, хотя это, в общем-то, не очень правильно.
Мы можем заметить, чтобы найти такой хеш, который начинается с двух
хексовых ноликов, нам потребовалось уже 400 итераций.
Чтобы найти такой хеш, который начинается с трех ноликов — 1000,
с четырех ноликов — 60 тысяч и так далее.
То есть с каждым ноликом задачу все усложняется и усложняется и растет
экспоненциально.
И, соответственно, понятно, что как бы хеш как бы из 5 ноликов — это как если
представить, как любое hex-число, как любая строка,
она может быть представлена как число, но он является наименьшим.
Свойства Proof of Work какие должны быть?
Первое — это должно быть тяжело подсчитать необходимое значение nonce.
На сегодняшний день общий хеш-рейт в сети огромный
— каждую секунду считается порядка 10 миллиардов гигахешей.
И в принципе уже на сегодняшний день обычный компьютер имеет очень маленькую
вероятность найти тот самый блок, то есть если у нас есть только один процессор,
потому что он выдает очень мало этих хешей в секунду.
Поэтому на самом деле в этом рынке уже участвуют профессионалы,
так называемые майнеры, майнинговые фирмы большие.
Но в принципе за счет этого вся эта система является очень безопасной,
потому что невозможно из ниоткуда взять еще столько же железа,
которое используется для Proof of Work, который есть сейчас,
чтобы каким-то образом нарушить весь этот распределенный консенсус.
Вторым свойством Proof of Work является изменяемая сложность (difficulty).
Зачем это нужно?
Если, допустим, у нас есть сейчас 10 компьютеров, которые участвуют в сети.
Что произойдет, когда к нам еще подключатся 10?
Мы будем находить блоки в два раза быстрее,
потому что у нас стало в два раза больше мощностей.
И, соответственно, поломается вот эта вот модель эмиссии,
что она должна идти потихонечку.
Более того, у нас будут выходить слишком часто новые блоки, потому что в 2 раза —
это не страшно, но когда к нам присоединятся тысячи компьютеров,
это будет уже не в 2 раза, а намного больше.
Это будет неудобно, потому что невозможно так быстро туда-сюда передавать информацию
целыми блоками и приходить к консенсусу.
Поэтому существует изменяемая сложность: в соответствии с правилами протокола вот это
вот целевое минимальное значение хеш-функции (количество нулей в начале) —
оно пересчитывается в среднем каждые две недели, каждые 2016 блоков.
Основная мысль: чтобы среднее время между блоками оставалось
примерно равным 10 минутам, то есть это понятно, что это нормальное распределение,
потому что случайный процесс.
Иногда это может быть 10 минут, иногда это может быть 5 минут,
иногда это может быть час.
Поэтому иногда некоторые люди ждут подтверждения,
когда же дойдут мои биткоины до биржи — по нескольку часов просто потому,
что не везет, не находится следующий блок.
Но в целом мы приходим в среднем к 10 минутам.
И эта сложность нам должна давать то,
что все-таки вероятность найти блок была равна доли нашей хеш-мощности.
И третье, последнее основное, свойство — это что хоть и блок тяжело найти,
необходимо, чтобы кто угодно с самым простейшим процессором мог легко и
быстро проверить всю проделанную нами работу.
Действительно, поскольку вот случайно найденные значения мы публикуем в
заголовке блока, любой может быть проверен,
что хеш вот этого значения плюс содержимого блока плюс хеша предыдущего
блока — оно меньше, чем целевое значение, которое установлено консенсусом.
В результате мы получаем довольно безопасную систему: атаки недостижимы,
если большинство майнеров, то есть большинство хеш-мощностей,
следуют правилам протокола.
Мы чуть-чуть говорили ранее про наиболее длинную цепь.
Я сказал то, что более правильное определение: цепь с наибольшей работой.
Так вот, действительно, может один процессор создать тысячу блоков подряд,
но они будут более короткой цепью в этом понимании, чем цепи из двух блоков, над
которой работали все-все-все майнеры сети, которые есть сейчас со своими хешами.
Естественно, наиболее длинной цепью является все-таки та цепь,
у которой больше работы.
И в итоге получается, что в отличие от большинства вот этих нод,
часть которых из них может быть виртуальными, такой подход,
где мы доказываем, что у нас есть какая-то мощность, которая нам дает право голоса,
он действительно обеспечивает безопасность.
[ЗВУК]