Что на самом деле решают биткойн-майнеры?
Как и в случае с майнингом, что на самом деле решают майнеры биткойнов? Я читал, что они решают хэши, но что это на самом деле означает. Можем ли мы увидеть, что они решают? Может ли кто-нибудь привести пример того, что может решить машина для майнинга биткойнов?
Они пытаются найти случайный одноразовый номер (небольшие случайные данные), который входит в блок и делает блок хэшем (SHA256), который (в двоичном виде) начинается с определенного количества нулей. Чем больше нулей, тем более редкий хеш. Хороший хеш-результат непредсказуем, поэтому приходится много раз пытаться найти хороший одноразовый номер.
Количество нулей зависит от того, насколько сложно будет найти блок. В Биткойне новый блок настраивается каждые 10 минут (в среднем, учитывая скорость, с которой обнаруживаются предыдущие блоки).
Интересно: поскольку хэши непредсказуемы, не имеет значения, как изменится одноразовый номер! В большинстве случаев это просто число, считая от 0 вверх!
Вот чрезвычайно упрощенный набросок проблемы, но он должен дать довольно хорошее представление о том, в чем проблема.
Данные:
Это хэш последнего блока (укороченный до 30 символов):
00000000000001adf44c7d69767585
Это хэши нескольких действительных транзакций, ожидающих включения (сокращенно).
5572eca4dd4
db7d0c0b845
А это хэш одной специальной транзакции, которую вы только что создали, которая дает вам 25 BTC (текущее вознаграждение):
916d849af76
Собираем следующий блок:
Теперь давайте воспользуемся грубым приближением того, как может выглядеть новый блок (настоящий блок использует двоичный формат). Он содержит хэш предыдущего блока и хэши этих трех транзакций:
00000000000001adf44c7d69767585--5572eca4dd4-db7d0c0b845-916d849af76--
Теперь займемся майнингом вручную! Наша цель — дополнить этот блок одноразовым номером (куском мусора) таким образом, чтобы хэш нового блока начинался с 13 нулей (учитывая предыдущий хэш, кажется, что 13 нулей — это текущая сложность!).
Майнинг (пытаемся доработать этот блок):
Давайте попробуем с nonce=1 и вычислим хэш блока (я использую алгоритм хеширования md5, но Биткойн использует двойной sha256):
> echo "00000000000001adf44c7d69767585--5572eca4dd4-db7d0c0b845-916d849af76--1" | md5sum
8b9b994dcf57f8f90194d82e234b72ac
Не повезло, хэш начинается не с 0… Попробуем с nonce=2
> echo "00000000000001adf44c7d69767585--5572eca4dd4-db7d0c0b845-916d849af76--2" | md5sum
5b7ce5bcc07a2822f227fcae7792fd90
Неудачно…
…
Если мы будем продолжать до тех пор, пока nonce=16, мы получим наш первый начальный нуль.
> echo "00000000000001adf44c7d69767585--5572eca4dd4-db7d0c0b845-916d849af76--16" | md5sum
03b80c7a34b060b33dd8fbbece79cee3
Для nonce=208 мы получаем два лидирующих нуля!
> echo "00000000000001adf44c7d69767585--5572eca4dd4-db7d0c0b845-916d849af76--208" | md5sum
0055e55df5758517c9bed0981b52ce4a
Продолжайте в том же духе... Если вы, наконец, найдете хэш с 13 ведущими нулями... вы выиграли! Другие майнеры теперь будут использовать ваш блок, вы только что получили 25 BTC.
Но вам придется быть быстрым!
Вернуться к шагу 1…
Если кому-то удастся построить блок раньше вас, вам придется начать заново с хэшем нового блока (тот, который принадлежит победителю).
00000000000001ae00000000000000
больше, чем 00000000000001adf44c7d69767585
<-- это будет действительный хэш.Ниже приводится описание глобальной статистической игры, в которую играют примерно каждые 10 минут. Интервал игры контролируется сложностью , которая говорит, сколько «хэшей» необходимо для каждого интервала.
Другими словами, difficulty
и target
определяют «шансы дома» против вашего шанса получить выигрышный хэш SHA. Это nonce
зона «стирания».
Каждый хэш потребляет электроэнергию и выделяет тепло, что требует дополнительного охлаждения.
Вот что делается с каждым хешем:
Шаг 1
На высоком уровне программное обеспечение майнера берет список активных транзакций, а затем группирует их вместе в нечто, называемое «блоком».
Или, точнее говоря: программное обеспечение майнера сводит все транзакции в сводное представление, называемое «корнем Меркла», и хеширует его, что является репрезентативным для транзакций.
Шаг 2
Затем программное обеспечение для майнинга преобразует его в двоичный формат, называемый заголовком блока , который также ссылается на предыдущие блоки (также называемые цепочкой).
Field Purpose Updated when... Size (Bytes)
Version Block version number You upgrade the software and 4
it specifies a new version
hashPrevBlock 256-bit hash of the previous A new block comes in 32
block header
hashMerkleRoot 256-bit hash based on all A transaction is accepted 32
the transactions in the block
Time Current timestamp as seconds Every few seconds 4
since 1970-01-01T00:00 UTC
Bits Current target in compact format The difficulty is adjusted 4
Nonce 32-bit number (starts at 0) A hash is tried (increments) 4
Шаг 3:
Аппаратное обеспечение майнера изменяет небольшую часть этого блока, называемую «одноразовым номером».
Шаг 4:
Заголовок блока хешируется и сравнивается с целью, как если бы это было просто большое число, например 10 000 000 > 7 000 000 (настоящие числа намного больше и в шестнадцатеричном формате). Цель сжимается и сохраняется в каждом блоке в поле, называемом битами.
Расширенная цель выглядит так:
Target 0000000000000083ef00000000000000000000000000000000000000000000000
И цель состоит в том, чтобы убедиться, что хэш SHA256 блока меньше этого значения. В приведенном ниже примере " 83ee
" меньше, чем " 83ef
"
Чтобы упростить эту концепцию, вы можете приблизить цель, подсчитав начальные нули (как объясняет другой ответ здесь). Вот пример:
Вот пример блока с транзакциями, который вы можете просмотреть на BlockChain.info. Посмотрите в верхнем правом углу веб-страницы этот хэш:
Hash 0000000000000083ee9371ddff055eed7f02348e4eda36c741a2fc62c85bc5cf
Этот предыдущий хеш был от сегодняшнего дня и имеет 14 начальных нулей. Давайте сравним это с тем, что было необходимо 3 года назад с блоком 100 , в котором 8 лидирующих нулей.
Hash 00000000a8ed5e960dccdf309f2ee2132badcc9247755c32a4b7081422d51899
Резюме
Итак, в конце концов, все, что делает майнер, это:
Хотите посмотреть, что делает Bitcoin-QT, когда находит блок?... Я разместил это здесь. . Информация в этом посте поможет вам понять, что произошло.
Whenever Nonce overflows (which it does frequently), the extraNonce portion of the generation transaction is incremented, which changes the Merkle root.
Майнинг дает возможность достичь консенсуса в отношении того, как должна выглядеть книга транзакций, и знать, что никто не мошенничает.
Это нетехническое определение майнинга.
«Авторитетом» двойных расходов является блокчейн. Блокчейн состоит из истории всех блоков в блокчейне плюс следующий блок транзакций. Субсидия вознаграждения в настоящее время составляет 25 BTC для стороны, которая отправит следующий блок. Но эй ... вы бы хотели эти 25 BTC (стоимостью около 825 долларов США), как и я, как и все остальные. Так как же сделать так, чтобы я не мог обмануть и сам получить блок?
Ну, вы ввели систему, что мы с вами должны конкурировать. Это то, что делает доказательство работы — оно делает так, что, когда я требую вознаграждения, легко доказать, что я действительно выполнил требуемую работу. Таким образом, для того, чтобы у меня был 2%-й шанс найти блок, мне нужно вложить 2% работы по майнингу. Я не могу выполнять менее 2% всей работы и при этом решать блоки как минимум в 2% случаев (в среднем).
Таким образом, в результате, когда отправляется блок транзакции, все одноранговые узлы проверяют, что не было двойных трат, что была заявлена правильная сумма субсидии и что отправитель действительно потратил работу, необходимую для этого решения. При соблюдении этих трех правил центральный орган, управляющий процессом или способный контролировать результат, отпадает.
Майнеры угадывают случайное целевое число, которое решает уравнение, сгенерированное протоколом Биткойн. Конечно, это предположение делают компьютеры, а не люди.
Биткойн-блокчейн использует алгоритм безопасного хеширования SHA-256 для генерации 32-байтовых чисел одинаковой длины таким образом, который требует предсказуемого количества усилий процессора. Чтобы получить вознаграждение в криптовалюте (и зафиксировать «законные» транзакции в реестре), майнеры вычисляют хеш блоков, которые соответствуют определенным критериям (установленным системой).
«Предполагаемое число» формируется из окончательного хэша хэша текущего блока, одноразового номера , данных и хэша предыдущего блока. Поиск грубой силы повторяется до тех пор, пока майнеры не обнаружат хеш, который меньше целевого числа.
Стивен Горник
пользователь10225
большой джош