Что на самом деле решают биткойн-майнеры?

Патоши パトシ

Что на самом деле решают биткойн-майнеры?

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

Стивен Горник

пользователь10225

Хорошо, но КАКИЕ данные мы добываем! Кажется, никто не знает. Меня не волнует, как это работает, я хочу знать, откуда поступают данные, из которых битовый майнинг - это расшифровка или шифрование.

большой джош

Вот наглядная, игровая версия проблемы, которую биткойн-майнеры печатают, чтобы решить. Это буквально майнер бинкоинов, и если вы решите проблему, вы выиграете биткойн. hashhunt.josh.com

Лодевейк

Они пытаются найти случайный одноразовый номер (небольшие случайные данные), который входит в блок и делает блок хэшем (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…

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

производитель вещей7

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

производитель вещей7

Кроме того, ваш пример концептуально движется в правильном направлении, но настоящий успех достигается, когда хэш заголовка sha256 меньше цели. Пример цели: 00000000000001ae00000000000000больше, чем 00000000000001adf44c7d69767585<-- это будет действительный хэш.

Леонардо Маркес

«А это хэш одной специальной транзакции, которую вы только что создали и которая дает вам 25 BTC (текущее вознаграждение): 916d849af76». Как создается эта транзакция?

Стефан Хименес

@Reonarudo: проще всего использовать один из ваших адресов для создания единого стандартного вывода, который нужно потратить, но вы также можете подделать любую пользовательскую транзакцию с помощью пользовательских сценариев, если вам это нравится (вам разрешен общий баланс +25 BTC). для этой транзакции некоторое время назад не разрешались дополнительные входы, но, возможно, теперь они разрешены).

Леонардо Маркес

Так что обычно я просто добавляю адрес своего кошелька в конце между - и --?

Стефан Хименес

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

Тобиас Кинцлер

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

керемиспирли

Вау, отличный ответ! Есть несколько вещей, которые я все еще не мог понять: допустим, вы искали решение в течение 6 минут, и пришла новая транзакция. 1) что происходит сейчас? если мне придется начать сначала, то это звучит так, как будто все должны начать сначала. Тогда как блокчейн может гарантировать нахождение блока примерно за 10 минут? 2) Как эта транзакция вообще приходит ко мне? 3) Что, если я найду решение для этого блока, а потом ко мне придет новая транзакция от какого-то другого узла, принявшего ее для только что закрытого мной блока?

Стефан Хименес

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

керемиспирли

2) Транзакция, которая будет добавлена ​​в текущий блок, та, которая заставила меня и всех (?) других перезапустить расчет. Как это приходит ко мне? А также 3) Зачем мне принимать его за 0,001 биткойн, если я должен найти новый блок и получить 25 биткойнов? Спасибо Стефан!

производитель вещей7

Ниже приводится описание глобальной статистической игры, в которую играют примерно каждые 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

Резюме

Итак, в конце концов, все, что делает майнер, это:

  1. Возьмите заголовок блока в качестве входных данных
  2. Изменить одноразовый номер
  3. Проверьте, меньше ли хэш заголовка блока , чем цель. Если это так, вы выиграли.
  4. Перейти к шагу 2 (или перейти к шагу 1, если кто-то другой выиграл блок)

Хотите посмотреть, что делает Bitcoin-QT, когда находит блок?... Я разместил это здесь. . Информация в этом посте поможет вам понять, что произошло.

Джон16384

Разве одноразовый номер (32 бита) не слишком мал, чтобы найти хэш, который должен начинаться с 14 ведущих нулей (14x4 = 56 бит)? Поиск такого хэша потребует в среднем 2 ^ 56/2 попыток, а с 32-битным одноразовым номером возможны только 2 ^ 32 попытки, прежде чем все возможные значения одноразового номера будут исчерпаны. Изменить: время меняется каждую секунду, я думаю, это применимо только в том случае, если скорость хеширования превышает 4 GH/sec (что, я думаю, так и есть...)

производитель вещей7

Да, вы правы, ... из URL-адреса в заголовке блока:Whenever Nonce overflows (which it does frequently), the extraNonce portion of the generation transaction is incremented, which changes the Merkle root.

Вэнс МакКоркл

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

производитель вещей7

@VanceMcCorkle Среди оборудования для майнинга биткойнов это гонка среди тех, кто сможет дальше нажать на педаль газа, не взорвав двигатель. Каждое движение поршня создает хэш-код (так сказать). Значение имеет только >>ГОНКА ПО СЖИГАНИЮ НЕФТИ<<. Биткойн должен спонсироваться Big Oil and Coal.

Вэнс МакКоркл

@ChristopherJonMankowski За исключением того, что место, где я живу здесь, в штате Вашингтон, буквально питается от дождевой воды (плотина Гранд-Кули). Плюс сдаю зеленый хостинг для майнеров. Тем не менее, я до сих пор не нашел ясного объяснения процесса проверки блока, которое имело бы для меня смысл. Хотя мне еще предстоит прочитать стандарт биткойнов.

производитель вещей7

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

Стивен Горник

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

Это нетехническое определение майнинга.

«Авторитетом» двойных расходов является блокчейн. Блокчейн состоит из истории всех блоков в блокчейне плюс следующий блок транзакций. Субсидия вознаграждения в настоящее время составляет 25 BTC для стороны, которая отправит следующий блок. Но эй ... вы бы хотели эти 25 BTC (стоимостью около 825 долларов США), как и я, как и все остальные. Так как же сделать так, чтобы я не мог обмануть и сам получить блок?

Ну, вы ввели систему, что мы с вами должны конкурировать. Это то, что делает доказательство работы — оно делает так, что, когда я требую вознаграждения, легко доказать, что я действительно выполнил требуемую работу. Таким образом, для того, чтобы у меня был 2%-й шанс найти блок, мне нужно вложить 2% работы по майнингу. Я не могу выполнять менее 2% всей работы и при этом решать блоки как минимум в 2% случаев (в среднем).

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

пользователь125245

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

Биткойн-блокчейн использует алгоритм безопасного хеширования SHA-256 для генерации 32-байтовых чисел одинаковой длины таким образом, который требует предсказуемого количества усилий процессора. Чтобы получить вознаграждение в криптовалюте (и зафиксировать «законные» транзакции в реестре), майнеры вычисляют хеш блоков, которые соответствуют определенным критериям (установленным системой).

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