Как SHA256 и майнинг защищают сеть биткойнов PlatoBlockchain Data Intelligence. Вертикальный поиск. Ай.

Как SHA256 и майнинг защищают сеть Биткойн

Как Биткойн защищается энергией? А что такое одноразовый номер? Ответы на эти и другие вопросы внутри!

То, как работает майнинг, завораживает. Когда я объясняю это людям, мне нравится видеть их лица в тот момент, когда они сходят с ума. Я объясню это здесь, но просто знайте, я представляю все ваши лица, когда ваши мозги взорвутся!

Я должен начать с хеш-функций. Без хеш-функций Биткойн был бы невозможен. Позвольте мне сначала объяснить, что это такое, не только для того, чтобы вы могли выглядеть круто на вечеринках, но и потому, что это имеет основополагающее значение для понимания того, как работает Биткойн — особенно майнинг, а также транзакции — под капотом.

Вам не нужно понимать, как работает Биткойн, чтобы извлечь из него выгоду, точно так же, как вам не нужно понимать, как работает TCP/IP, чтобы пользоваться Интернетом. Но продолжайте, потому что это довольно интересно, и я облегчу вам понимание, обещаю.

Хеш-функции

Давайте начнем со схемы, которую я объясню ниже…

Как SHA256 и майнинг защищают сеть биткойнов PlatoBlockchain Data Intelligence. Вертикальный поиск. Ай.
(Графика/@jirols_btc)

Слева вход, в центре функция, справа выход. Входными данными могут быть любые данные, главное, чтобы они были цифровыми. Он может быть любого размера, при условии, что ваш компьютер может его обрабатывать. Данные передаются функции SHA256. Функция берет данные и вычисляет число, выглядящее как случайное, но со специальными свойствами (обсуждаемыми позже).

Первый безопасный алгоритм хеширования (SHA) был изначально разработан АНБ и сейчас есть много разных версий (биткоин использует SHA256). Это набор инструкций о том, как смешать данные очень сложным, но определенным образом. Инструкция не секрет и это даже можно сделать вручную, но это очень утомительно.

Для SHA256 вывод представляет собой 256-битное число (не совпадение).

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

Хотя функция возвращает 256-значное двоичное число, значение обычно выражается в шестнадцатеричном формате длиной 64 цифры.

Шестнадцатеричный означает, что вместо 10 возможных символов, к которым мы привыкли в десятичном формате (от 0 до 9), у нас есть 16 символов (десять, к которым мы привыкли, 0-9, плюс буквы a, b, c, d, e, и f; которые имеют значения от 11 до 15). Например, чтобы представить значение десятичного числа 15 в шестнадцатеричном виде, мы просто пишем «f», и это то же самое значение. Есть много информации, доступной в Интернете с быстрым поиском Google, если вам нужна дополнительная проработка.

Чтобы продемонстрировать SHA256 в действии, я могу взять номер 1 и запустить его через онлайн-калькулятор хешрейта, и получил этот вывод (в шестнадцатеричном формате):

Как SHA256 и майнинг защищают сеть биткойнов PlatoBlockchain Data Intelligence. Вертикальный поиск. Ай.

Верхний блок — это ввод, нижний блок — результат.

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

Выходное шестнадцатеричное число, преобразованное в десятичное, будет (обратите внимание, что для записи требуется больше цифр):

48,635,463,943,209,834,798,109,814,161,294,753,926,839,975,257,569,795,305,637,098,542,720,658,922,315

И преобразованный в двоичный это:

11010111000011010110010011100111111111100110100111111001110000110011101011010111000000001001110111111110101101000111111010101110100011110101101101001001110101010100010001011110001110101001001110000000001111001010010110111011011011110000111010110110100101111010111001101011100110101110011010111001101011100110101110011010111001101011100111

Просто из интереса, вот то же самое значение в база 64.

1w1k5/5p+cM61wCd/rR+ro9bSdVEXjqTgDylu28OtpY=

Обратите внимание, что наименьшее возможное значение, которое SHA256 может вернуть, равно нулю, но LENGTH по-прежнему составляет 256 бит. Вот как представляется ноль:

0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000

И максимально возможное значение:

1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111

В десятичном виде это:

115,792,089,237,316,195,423,570,985,008,687,907,853,269,984,665,640,564,039,457,584,007,913,129,639,935

В шестнадцатеричном формате это:

FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFffffffffffffffffffffffffffffff

Обратите внимание, что букв F ровно 64.

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

0000000000000000000000000000000000000000000000000000000000000000

Вот краткое изложение некоторых фактов о хеш-функции, которые жизненно важно оценить:

  • Вход не может быть определен по выходу
  • Вход может быть любой длины
  • Выход всегда одинаковой длины
  • Вывод всегда будет воспроизводиться одинаково, если вы предоставите один и тот же ввод.
  • Любое изменение на входе, каким бы малым оно ни было, приведет к непредсказуемому и совершенно другому результату.
  • Вывод кажется случайным, но на самом деле он детерминирован (то есть вычисляется и воспроизводится).
  • Результат не может быть предсказан. Его можно только рассчитать, а это требует измеримого объема работы компьютера (и часов работы с карандашом и бумагой! Не делайте этого).

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

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

Горнодобывающая промышленность

Я начну с демонстрации концепции работы, откуда происходит «доказательство работы» в Биткойне.

Перейдите к онлайн-калькулятору хэшей и введите «Я создаю 50 биткойнов и плачу себе эту сумму».

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

Как SHA256 и майнинг защищают сеть биткойнов PlatoBlockchain Data Intelligence. Вертикальный поиск. Ай.

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

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

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

Обратите внимание, как простое добавление «Nonce:» в качестве заголовка дополнительного поля меняет вывод хэша.

Как SHA256 и майнинг защищают сеть биткойнов PlatoBlockchain Data Intelligence. Вертикальный поиск. Ай.

Вывод по-прежнему не начинается с «0», поэтому давайте добавим немного ерунды (я добавил бессмысленный «x»):

Как SHA256 и майнинг защищают сеть биткойнов PlatoBlockchain Data Intelligence. Вертикальный поиск. Ай.

Он по-прежнему не начинается с нуля. Я пробовал еще несколько символов, пока хэш не начинался с нуля:

Как SHA256 и майнинг защищают сеть биткойнов PlatoBlockchain Data Intelligence. Вертикальный поиск. Ай.

Ну вот. Теперь, в соответствии с произвольными правилами, которые я установил для этой воображаемой версии Биткойна, текст в окне ввода является действительным блоком с одной транзакцией, приносящей мне 50 биткойнов.

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

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

Как SHA256 и майнинг защищают сеть биткойнов PlatoBlockchain Data Intelligence. Вертикальный поиск. Ай.

Хэш начинается с «f», а не с «0», поэтому мне придется попробовать некоторые значения в поле nonce:

Как SHA256 и майнинг защищают сеть биткойнов PlatoBlockchain Data Intelligence. Вертикальный поиск. Ай.

На этот раз мне повезло больше, и я нашел подходящий одноразовый номер всего с четырех попыток. Напомним, что для первого блока потребовалось 22 попытки. Здесь есть некоторая случайность, но обычно не так уж сложно найти действительный хэш, если все, что мы пытаемся получить, это один ноль. Существует 16 возможных значений для первой цифры хеша, поэтому у меня есть шанс 1 из 16, что любое изменение, которое я внесу в поле ввода, приведет к тому, что первая цифра хэша будет «0».

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

Я добавлю поле времени в следующий блок, так как мне это нужно, чтобы объяснить следующую «регулировку сложности»:

Как SHA256 и майнинг защищают сеть биткойнов PlatoBlockchain Data Intelligence. Вертикальный поиск. Ай.

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

Здесь достаточно, чтобы я мог начать объяснять несколько интересных концепций о блокчейне Биткойн и майнинге.

Выигрыш блока

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

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

С каждым блоком создаются новые биткойны, которые в совокупности составляют общий объем предложения. Если майнеров много, то по статистике следует ожидать, что блоки будут производиться быстрее, а значит, и биткойн будет создаваться быстрее. Проблема, да?

В поисках ограниченного предложения биткойнов с предсказуемым выпуском с течением времени Сатоши Накамото подумал об этой проблеме и ввел цикл отрицательной обратной связи, чтобы поддерживать производство блоков в среднем с 10-минутными интервалами. Как? Посмотрим, сможешь ли ты придумать способ. Остановитесь на мгновение и подумайте — посмотрите, сможете ли вы придумать такое же гениальное решение, и продолжайте читать, когда сдадитесь.

Узлы: я упоминаю «действительные» блоки. И что? Кто проверяет? Биткойн-узлы есть. Биткойн-узел пока хранит копию блокчейна и следует набору правил, чтобы проверять, соответствуют ли новые блоки правилам, и отклонять те, которые им не соответствуют. Где правила? В коде. Компьютер, загружающий биткойн-код, является узлом.

Регулировка сложности

Среднее время создания новых блоков Биткойн рассчитывается каждым узлом каждые 2016 блоков (вот почему необходимо поле времени). Это часть протокола и правил, которым следуют узлы. Формула применяется для настройки количества нулей, с которых должен начинаться каждый хэш блока, чтобы быть действительным.

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

Если блоки производятся слишком быстро, то цель хеширования корректируется в соответствии с предопределенными правилами, которым все узлы следуют одинаково (это заложено в их коде).

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

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

Вот следующий блок:

Как SHA256 и майнинг защищают сеть биткойнов PlatoBlockchain Data Intelligence. Вертикальный поиск. Ай.

Обратите внимание на время. С момента предыдущего блока прошло более 10 минут (только успел продемонстрировать). 10-минутная цель является вероятностной; никогда точно не известно, когда будет найден следующий блок.

Я возился с клавиатурой минуту, пока не появились два нуля. Это было экспоненциально сложнее, чем найти один ноль. Вероятность найти два нуля подряд равна 1 к 16.2, или шанс 1 из 256.

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

Я только что просмотрел последний настоящий биткойн-блок, который содержит хэш предыдущего блока. Хэш был:

000000000000000000084d31772619ee08e21b232f755a506bc5d09f3f1a43a1

Это 19 нулей! Есть 1 из 1619 шанс найти такой блок с каждой попыткой. Биткойн-майнеры делают много-много попыток в секунду по всему миру.

Количество попыток в секунду известно как «скорость хеширования». В настоящее время предполагаемая скорость хеширования в мире составляет чуть менее 200 миллионов терахэшей в секунду (один терахеш — это триллион хэшей). При таком количестве попыток в секунду блок с хешем, начинающимся с 19 нулей, находится примерно каждые 10 минут.

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

Половина

Когда Биткойн только появился, каждый блок производил 50 биткойнов. В правилах блокчейна Биткойн указано, что после каждых 210,000 10 блоков вознаграждение будет уменьшаться вдвое. Этот момент известен как «уполовинивание» и происходит примерно каждые четыре года. Сокращение вдвое в сочетании с регулировкой сложности блоков с 2140-минутными интервалами означает, что примерно в 0.00000001 году вознаграждение за блок будет составлять 1, или 21 сатоши, наименьшую единицу биткойна, и больше не может быть уменьшено вдвое. Майнинг не остановится, но награда за блок будет равна нулю. С этого момента новые биткойны не будут создаваться в будущем, а количество биткойнов поддается математическому расчету и достаточно близко к XNUMX миллиону монет. Общий запас известен так — он задается программно.

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

Как именно вознаграждение за блок сокращается вдвое? Это в коде, хранимом узлами. Они знают, что нужно отклонять любой новый блок после 210,000 25, когда майнер платит себе более 420,000 биткойнов. А затем отклонить любые блоки после 12.5 XNUMX, когда майнер платит себе более XNUMX биткойнов, и так далее.

Операционные издержки

До сих пор я показывал только воображаемые блоки с одной транзакцией — транзакцией, в которой майнеру выплачивается вознаграждение. Это называется «транзакция coinbase».

Он назван не в честь компании Conbase, я имею в виду Coinbase. Компания назвала себя в честь транзакции coinbase, а не наоборот. Не запутайтесь.

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

Как SHA256 и майнинг защищают сеть биткойнов PlatoBlockchain Data Intelligence. Вертикальный поиск. Ай.

На этот раз я не стал искать настоящий хэш (на самом деле это настоящий хеш, указанный в блоке 200,001 XNUMX). Этот одноразовый номер я просто придумал для развлечения, но обратите внимание, что туда можно встроить сообщение.

Известно, что Сатоши включил слова «Канцлер на пороге второй помощи банкам» в первый блок биткойнов (блок «Генезис») после заголовка газеты за день.

Как SHA256 и майнинг защищают сеть биткойнов PlatoBlockchain Data Intelligence. Вертикальный поиск. Ай.

Дело в том, что включено 132 транзакции (показаны не все). Посмотрите на транзакцию № 132 — 2.3 биткойна с адреса платят 2.1 биткойна на другой адрес, а также на второй адрес сумму 0.1 биткойна (я использовал точки, чтобы сократить длину адреса).

Таким образом, источник в 2.3 биткойна платит в общей сложности 2.2 биткойна (2.2 + 0.1 = 2.2). Не хватает 0.1 биткойна? Нет, разницу требует майнер, как я объясню.

Майнеру разрешено заплатить себе 25 биткойнов в качестве вознаграждения за блок (поскольку прошло 210,000 50 блоков, поэтому вознаграждение было уменьшено вдвое с 25 до 27.33880022). Но если вы посмотрите, транзакция coinbase составляет 2.33880022. Дополнительные 132 биткойна поступают от других XNUMX транзакций в блоке — все входы будут немного больше, чем сумма выходов. Таким образом, майнер может потребовать этот «брошенный» биткойн в качестве оплаты себе. Это считается комиссией за транзакцию, выплачиваемой майнеру.

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

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

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

Можно ли перезаписать блок?

Это крайне маловероятно, и стоит понять, почему. Тогда вы поймете, почему биткойн-транзакции неизменны (неизменяемы).

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

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

Повторение коллективного хеширования всего мира от отредактированного блока до последнего блока является препятствием для редактирования биткойнов. Энергия была потрачена на создание этих хэшей со всеми этими невероятными нулями, и эти затраты энергии должны быть повторены для редактирования Биткойна. Вот почему энергия, используемая для майнинга биткойнов, не «тратится впустую»; она предназначена для защиты Биткойн от правок, для того, чтобы сделать бухгалтерскую книгу неизменной без необходимости доверять центральному органу.

Что произойдет, если два майнера найдут блок одновременно?

Это на самом деле случается время от времени, и это всегда сортируется следующим образом:

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

Для иллюстрации назовем один из блоков синим, а другой красным (у них нет цвета, просто потерпите).

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

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

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

Приложение

Почему блок майнера, занявшего второе место, недействителен

Предположим, блок 700,000 700,000 только что был добыт MINER-A. Тридцать секунд спустя MINER-B также создал другую версию блока 30 700,001. Когда MINER-B транслирует эту альтернативу, каждый узел отклонит ее, потому что они уже видели и приняли блок MINER-A. Более того, предположим, что за эти 700,000 секунд MINER-C нашел блок 700,001 XNUMX. Учитывая, что конкурирующий XNUMX XNUMX-й блок MINER-B не расширяет текущую цепочку (которая достигает XNUMX XNUMX), он также отклоняется по этой причине.

Еще более интересно то, что если бы MINER-B работал над блоком 700,001 700,000 вместо конкурирующей версии 700,001 700,000, у них было бы столько же шансов добыть действующий блок XNUMX XNUMX, как и найти альтернативный блок XNUMX XNUMX. Поэтому, как только какой-либо майнер увидит новый блок, он должен приложить усилия к следующему блоку.

Однако если Miner-B нашел блок 700,000 XNUMX через одну секунду после того, как это сделал MINER-A, то возможно, что некоторые узлы сначала увидят блок MINER-A, а другие сначала увидят блок MINER-B, в зависимости от географического положения и скорости интернета. В этом случае существует временная вилка, и некоторые майнеры будут работать над расширением одной версии, в то время как другие майнеры будут работать над расширением другой. Как объяснялось ранее с использованием дескрипторов «синяя цепочка» и «красная цепочка», в конечном итоге одна из версий будет распространяться дальше другой и единогласно станет действительной версией.

Это гостевой пост Армана Пармана. Высказанные мнения являются полностью их собственными и не обязательно отражают точку зрения BTC Inc или Биткойн-журнал.

Отметка времени:

Больше от Биткойн-журнал