Все ли майнеры в пуле майнинга увеличивают переменную nonce один за другим, начиная с нуля?

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

Предположим, что блок out выглядит следующим образом:

    to_mine_block = {
    Block No: 1000
    Prev Block:999 
    timestamp: "1000-01-01 00:00:00"
    Data : "XYZ"
    nonce : ?
}

Теперь to_mine_block отправляется всем n майнерам . Будут ли n майнеров запускать следующий код для

String target = new String(new char[difficulty]).replace('\0', '0'); 

while(!hash.substring( 0, difficulty).equals(target)) {
    nonce ++;
    hash = calculateHash();
}

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

Ответы (1)

Это не то, как майнинг обычно работает в пуле. Программное обеспечение для майнинга обычно присваивает extranonceкаждому майнеру разные значения, что является частью транзакции coinbase, и в результате получается другой корень Меркла (и другой заголовок блока). Тогда все они могут начать с одноразового номера 0, как вы предлагаете, но они не будут участвовать друг друга для одного и того же блока, потому что они разные .

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

  • Версия
  • hashPrevBlock
  • hashMerkleRoot
  • Время
  • Биты
  • одноразовый номер

См. https://en.bitcoin.it/wiki/Block_hashing_algorithm