Как на самом деле работает майнинг биткойн

kak na samom dele rabotaet majning bitkojn

автор Субхан Надим

WQuWSml2XKTWYlO50o6cEWn3UTVxNJZzw6RL

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

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

Часто подтверждение работы описывается как «криптографическая головоломка», но что это на самом деле?

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

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

Почему майнинг работает: криптографическое одностороннее хеширование

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

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

Однако есть четыре особых свойства этих функций, которые делают их бесценными для сети Bitcoin. Они есть:

  1. детерминированный для любого входа в криптографическую хэш-функцию результат всегда будет одинаковым.
  2. Быстро — Вычисление вывода хэш-функции при любых входных данных является относительно быстрым процессом (не требует тяжелых вычислений)
  3. Уникальный Каждый вход в функцию должен приводить к совершенно случайному и уникальному результату (другими словами, никакие два входных данных не приводят к тому же результату)
  4. Необратимый Учитывая выход хэш-функции, выходной вход получить невозможно

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

В частности, создатель протокола биткойна Сатоши Накомото решил использовать хэш-функцию SHA-256 как основу для майнинга биткойна. Это специфическая криптографическая хэш-функция, математически доказанная, обладающая вышеуказанными свойствами. Он всегда выводит a 256-битное число (наиболее базовая единица вычисления), которая обычно представлена ​​в шестнадцатеричной системе счисления с 64 символами для удобства для человека.

Выход функции SHA-256 обычно называют хеш его введение.

1iObT23KZMg-OPHVKyPW3Fp-12cFhc2oaMdI
Вход хэш-функции приводит к совершенно уникальному результату

Вот пример ввода и вывода функции SHA-256 (вы можете попробовать это самостоятельно здесь):

Input to SHA-256:
<Bitcoin Transaction>
Output to SHA-256:
77077b1f4c3ad44c83dc0bdb8d937e9b71c0ef07a35c2664bb7da85be738eacf

Интересно, что в большинстве мест, где хеширование используется в протоколе Bitcoin, двойное хеширование используется. Это означает, что выход исходной функции SHA-256 затем возвращается обратно в функцию SHA-256 для получения другого выхода. Вот как выглядит этот процесс:

Input to SHA-256(first round):
<Bitcoin Transaction>
Output (first round):
77077b1f4c3ad44c83dc0bdb8d937e9b71c0ef07a35c2664bb7da85be738eacf

Input to SHA-256 (second round):
77077b1f4c3ad44c83dc0bdb8d937e9b71c0ef07a35c2664bb7da85be738eacf
Output (second round and final result):
3c6c55b0e4b607b672b50f04e028a6951aed6dc97b91e103fb0f348c3f1dfa00

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

С функцией SHA-256 вероятность этой атаки бесконечно мала. Если бы это не было почти невозможно, SHA-256 считался бы сломанным.

Однако другие хэш-функции были «сломаны» в прошлом. Чтобы предотвратить это в будущем с SHA-256 (и фактически нарушить модель безопасности Bitcoin), лучше всего хеш хеш. Это вдвое уменьшает вероятность столкновения, что делает протокол гораздо более безопасным.

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

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

Майнинг биткойн: техническое поступление

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

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

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

Взгляд внутрь блока

Блок Bitcoin состоит в основном из двух компонентов:

1. Операции в форме a дерево Меркле

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

Дерево Меркла – это относительно простая концепция: транзакции лежат в нижней части дерева в виде листьев и хешируются с помощью функции SHA-256. Комбинация двух листовых транзакций снова хешируется с помощью функции SHA-256, чтобы сформировать родительский элемент листа. Этот родительский элемент непрерывно хешируется вверх в сочетании с другими родителями хешированных транзакций, вплоть до единой корень создается. Хэш этого корня фактически является уникальным отражением находящихся под ним транзакций.

3Y5SmuCwRz8GnPlpMVo9SUG0n3mg95o4fwoP
Визуализация того, как строится дерево Меркла – листья в самом низу дерева являются транзакциями.

Корень дерева Меркла – это комбинация хешей каждой транзакции в дереве.

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

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

Заголовок блока является итогом содержания самого блока. Он содержит следующее шесть компонентов:

  • Версия программного обеспечения, на которой работает биткойн-клиент
  • Заметка времени блока
  • Корень дерева merkle, содержащий транзакции
  • Хэш блок перед ним
  • А одноразовый
  • The цель

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

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

The одноразовый и цель это то, что заставляет майнинг развиваться. Они служат основой для решения головоломки SHA-256, которую нужно разгадать майнерам.

Пожалуйста, обратите внимание, что все эти данные в заголовке блока сжимаются до 80 б с помощью обозначения, которое называется little-endian, что делает передачу заголовков блока между узлами тривиально эффективным процессом. Для целей этого пояснения мы проигнорируем это сжатие и предположим, что данные находятся в исходной форме.

Объяснение проблемы добычи

The цель Сохраненное в заголовке блока – это просто числовое значение, хранящееся в битах. В традиционной базовой нотации 10 эта цель колеблется от 0 до где-то в диапазоне 2²²⁴ (a 67+ цифра количество), в зависимости от того, сколько майнеров соперничают, чтобы решить эту проблему одновременно.

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

Вот и все. Но это гораздо легче сказать, чем сделать.

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

Вот где одноразовый заходит.

Майнер добавляет число (начиная с 0), которое называется одноразовый, к заголовку блока и хеширует это значение. Если хеш значение не меньше целевого, майнер увеличит однократное значение на 1, снова добавит его к заголовку блока и хеширует это измененное значение. Этот процесс повторяется непрерывно, пока не будет найден хеш меньше целевого значения.

Пример добычи

Вот грубое приближение того, что составило первое название блока:

  • Корень merkle транзакции в блоке Genesis:
Merkle Root:
4a5e1e4baab89f3a32518a88c31bc87f618f76673e2cc77ab2127b7afdeda33b
  • Первая известная версия Bitcoin: 0.1.0
  • Отметка времени блока: 2009–01–03 18:15:05
  • Цель (это также самая высокая цель, которую когда-либо будет):
Target:
0x00000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  • Нет предыдущего хеша блока – это был первый блок, поэтому это уникальный случай

Окончательный заголовок блока после добавления его компонентов вместе:

RgFYX1FSetNk-EJF91HSNTcVhqIYyDziZJkD
Данные блока Genesis (это включает в себя nonce, но прикидываем, что это не так), источник: bitcointalk

Давайте возьмем это большое заглавие и вычислим двойной хеш:

SHA-256 of header:
7d80bd12dfdccbdde2c41c9f406edfc05afb3320f5affc4f510b05a3394e1c91

SHA-256 of the previous result (final result):
c5aa3150f61b752c8fb39525f911981e2f9982c8b9bc907c73914585ad2ef12b

И целевой, и выходной хеш являются невероятно большими числами при превращении в базу 10 (запомните, длина более 67 цифр). Вместо того чтобы попытаться продемонстрировать сравнение этих двух здесь, следующая функция Python обрабатывает сравнение:

def isBlockHashLessThanTarget(blockHash, target):
    return int(blockHash, 16) < int(target, 16)

True возвращается, если хеш меньше целевого, а в противном случае — false.

Вот результат с нашим хэшем целевого блока:

mI97AvtxoLFh08Qy99YmpOesirwiyS3a6iLj

Теперь берём исходное шестнадцатеричное значение блока и добавляем к нему 1. Вот следующий результат:

M7hXm9TXd9CFp3vmZ4sOUHxyvuzMHowjTifh
Обратите внимание, что последняя цифра теперь равна 1 через добавление одноразового числа

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

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

Перечисленный одноразовый номер в блоке Genesis составляет 2,083,236,893.

Это означает, что Сатоши Накомото повторил этот процесс более 2 миллиардов раз, прежде чем нашел хэш, который был приемлем.

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

subhan-nadeem/bitcoin-mining-python
bitcoin-mining-python — Реализация алгоритма майнинга Bitcoin на Python
github.com

Посмотрите, сколько времени вам понадобится, чтобы успешно извлечь блок Genesis!

Одноразовое значение в заголовке блока сохраняется как 32-битное число. Это означает, что самое высокое, которого кто-то может достичь, это 2³² (приблизительно 4 миллиарда). После 4 миллиардов итераций nonce иссякает, и если решение не найдено, майнеры снова застреют.

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

Если все 4 миллиарда возможных значений nonce исчерпаны, то extraNonce добавляется и увеличивается к coinbase. Вычисляется новый корень merkle, а впоследствии и новый заголовок блока одноразовый повторяется снова. Этот процесс повторяется, пока не будет найден достаточный хэш.

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

Награда шахтера

Майнер, наиболее быстро опубликовавший блок, получает новую биткойн, созданную из воздуха. В настоящее время это вознаграждение составляет 12,5 BTC. Как же возникают эти биткойны?

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

Майнер обязан добавить эту транзакцию в блок перед ее майнингом. Был, по крайней мере, один случай, когда майнеры забыли добавить вознаграждение к транзакции перед майнингом блока, фактически уничтожив 12,5 BTC!

Проверка подтверждения работы

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

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

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

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

Время блока и настройка цели

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

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

Например, давайте возьмем простейшую цель, когда-либо существовавшую в биткойнах: блок генезиса. Вероятность того, что любой хеш будет меньше простейшей цели, составляет 1 до 2³². Это каждый более четырех миллиардов. Таким образом, мы можем разумно ожидать, что кто-то выполнит 2³² итерацию проблемы майнинга, чтобы найти правильный хеш. Узлы в сети ожидали, что будут выполнены четыре миллиарда этих итераций. все Майнеры в сети каждые 10 минут.

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

На самом деле, узлы в сети отслеживают время блокировки. 2016 год блоков, который выходит ровно через две недели. Каждые две недели общее время блокировки сравнивается с ожидаемым временем блокировки (что составляет 20160 минут).

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

M3-52KmmkeyZCRECDfzfdACTrILXpveYlDn5
Формула для расчета новой цели запускается каждые 20160 минут (две недели) каждым узлом биткойна.

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

Текущая общая скорость хеширования в сети составляет 28,27 экзахеша в секунду. Это 28,27 x 10¹⁸ хеши запускаются каждую секунду на всех компьютерах сети.

d9dUC5kBAfoDhYFAhuUIF-49pjPT-risoGxB

В итоге

Сейчас мы всесторонне рассмотрели следующее:

  • Почему криптографическое одностороннее хеширование является жизненно важным для подтверждения работы
  • Разбивка постройки блока Bitcoin
  • Фактический процесс майнинга и сама итерация
  • Как узлы могут легко проверять другие блоки
  • Как сети удается поддерживать алгоритм и конкурентоспособность, отслеживая время блокировки и корректируя цель

Теперь вы должны быть в состоянии понять и объяснить, как фактически работает proof-of-work и почему оно считается полностью безопасным алгоритмом, который обеспечивает децентрализацию и консенсус!

Следите за мной в Twitter и Medium, если в будущем вас интересуют более глубокие и информативные статьи, подобные этому!

Добавить комментарий

Ваш адрес email не будет опубликован.