Книга Блокчейн, страница 23. Автор книги Александр Цихилов

Разделитель для чтения книг в онлайн библиотеке

Онлайн книга «Блокчейн»

Cтраница 23

На самом деле для данной проблемы напрашивается очевидное решение: если статическая сложность задачи является барьером для экономической стабильности системы, то необходимо сделать ее динамической. Как нам уже известно, для того, чтобы получить n нулевых бит в начале строки хеша, надо перебрать для хеширования максимум 2n прообразов. Очевидно, что чем больше число n, тем сложность задачи экспоненциально увеличивается. Накамото предложил хешировать заголовок создаваемого блока, начав с самой маленькой сложности. В этом случае нужно было получить всего восемь нулевых символов в начале строки хеша заголовка. Поскольку один символ занимает четыре бита, то необходимо было перебрать не более 232 вариантов, то есть около 4,3 млрд. А затем, по мере увеличения количества узлов в сети, которые пытаются искать валидные хеши, пропорционально поднимать сложность, увеличивая требования к количеству стартовых нулей.

Когда Накамото запустил свою сеть Биткоин в начале января 2009 года, в ней, помимо самого создателя системы, не было других участников. Поэтому первые блоки «намайнил» именно сам Накамото. Когда в сети Биткоин стали появляться другие узлы, сложность сети начала постепенно увеличиваться. Логика управления сложностью была заложена следующая: сложность сети должна быть такова, чтобы вне зависимости от количества узлов, которые ищут блоки, а также от их вычислительной мощности новый блок можно было бы найти в среднем не более и не менее чем за десять минут. Сложность пересчитывалась каждые 2016 блоков, то есть примерно один раз в две недели. Совокупное, реально затраченное время нахождения всех 2016 блоков разделялось на их количество, и полученный результат сравнивался с десятиминутным эталоном. Если блоки находились в среднем быстрее, сложность увеличивалась – то есть поднимались требования к количеству нулей в хеше заголовка блока. Если медленнее – требования уменьшались.

Теперь следует сделать отступление, чтобы разобраться, каким образом перебираются хеши в процессе майнинга. Поскольку хешируется заголовок блока, это означает, что хешируемая информация довольно статична. А это, в свою очередь, говорит о том, что при неизменном прообразе мы будем все время получать один и тот же хеш. Что входит в противоречие с нашей целью – найти «золотой» хеш, чтобы он начинался с большого количества нулей. Давайте взглянем еще раз на структуру заголовка блока, чтобы понять: есть ли там какая-либо динамическая величина, которая будет меняться настолько быстро, чтобы у майнера была возможность хешировать миллионы, миллиарды или даже триллионы прообразов в секунду?

Порядковый номер блока – информация сугубо статичная, которая меняться не будет. Номер версии блока также представляет собой фиксированное значение. Теперь что касается времени создания блока, которое выражается в секундах, прошедших с 1 января 1970 года. Логично было бы предположить, что оно будет меняться не чаще раза в секунду, что для нашей задачи является крайне низкой динамикой. Число транзакций в блоке и вычисленное из них корневое значение дерева Меркла – информация также относительно постоянная. Однако бывают случаи, когда во время поиска валидного хеша майнеру поступают новые транзакции с более высокой комиссией, чем те, что он ранее включил в блок, – тогда блок будет иметь смысл пересобрать заново. Но данная процедура также имеет достаточно низкую динамику и проблем с необходимым разнообразием хешей не решает.

Получается, что коль скоро высокодинамичная информация в заголовке блока естественным образом отсутствует, для решения поставленной задачи необходимо вводить в процедуру майнинга некий искусственный элемент. Он не будет нести никакой полезной нагрузки, кроме как играть роль дополнительной составляющей заголовка блока, как прообраза для хеширования. И такой элемент действительно присутствует в заголовке каждого блока, и называется он «нонс» (nonce). Именно значение этого нонса майнер и будет исключительно быстро менять при переборе, открывая возможности для получения огромного количества разнообразных хешей, среди которых может оказаться и заветный «золотой» хеш с требуемым количеством нулей.

По сути, процедура майнинга и сводится к поиску подходящего значения этого самого нонса, который, будучи добавленным к заголовку блока, позволит майнеру вычислить валидный хеш, дающий ему право на создание нового блока, безусловно принимаемого всей сетью. Однако процедура поиска необходимого значения нонса достаточно сложна. В сети Биткоин используется алгоритм хеширования SHA-256, который предполагает два цикла по 64 итерации хеширования каждый. По состоянию на весну 2019 года сложность сети Биткоин требует наличия 18 первых нулевых символов для нахождения валидного хеша, соответствующим 72 нулевым битовым значениям. Что требует примерно 272 или около 5 · 1021 переборов хешей. Много это или мало? Давайте попробуем сравнить это число, скажем, с количеством песчинок на всех пляжах нашей планеты. Ученые сопоставляют количество песчинок с величиной, приближенной к 1018. Таким образом, сложность нахождения нужного нам валидного хеша с такими требованиями сопоставима с процедурой перебора всех песчинок примерно на 5000 планет, условно подобных Земле. Вот пример такого валидного хеша, с требованием по сложности в 18 начальных нулей:


Блокчейн

Как уже упоминалось, первые блоки сети Биткоин Сатоши Накамото находил самостоятельно и использовал для этого обычный компьютер. Как, собственно, и другие участники сети, которые стали постепенно в ней появляться. И на том самом начальном уровне сложности обычного процессора компьютера вполне хватало, чтобы находить блок за положенные в среднем десять минут. Однако по мере роста количества участников сети сложность стала автоматически пересчитываться в сторону увеличения, и в какой-то момент для обычного компьютерного процессора вычислительная задача стала «неподъемной». Тем не менее майнеры быстро нашли выход – они задействовали для поиска блоков не центральный процессор, а тот, который был установлен на их видеокартах. В силу специфики своей вычислительной архитектуры графический процессор гораздо быстрее рассчитывал хеши, чем центральный. Но через определенное время сложность возросла настолько, что и графический процессор перестал справляться с майнингом блоков. Правда, решение было найдено довольно скоро: в июне 2012 года компания Butterfly Labs начала поставлять специальное программно-аппаратное обеспечение под названием ASIC (Application-Specific Integrated Circuit, или «интегральная схема специального назначения»). Фактически это был небольшой специализированный компьютер, полностью оптимизированный только под одну задачу – перебирать хеши по алгоритму SHA-256 и делать это исключительно быстро. Началась эра сначала частного, а затем и промышленного майнинга Биткоина с использованием самых новейших аппаратных средств, производимых различными компаниями, активно конкурирующих между собой.


Блокчейн

Для того чтобы понять, насколько увеличилась сложность сети за первые десять лет ее существования, рассмотрим понятие скорости перебора хешей, или «хешрейт» (hashrate). Различают хешрейт как отдельного устройства, так и совокупный хешрейт всей сети. Очевидно, что чем выше общий хешрейт сети Биткоин, тем выше сложность нахождения валидного хеша для создания блока. Иначе майнеры находили бы блоки слишком быстро, что противоречит логике, заложенной в блокчейн-систему. Вот как менялся хешрейт на протяжении десяти лет существования сети Биткоин (на примере логарифмического графика):

Вход
Поиск по сайту
Ищем:
Календарь
Навигация