Возможно эффективнее было бы изменить порядок заголовков при расчёте хеша, чтобы в 64 байта попадал перебираемый nonce.
Тогда в 16-байтовом остатке (80-64) вообще будет константное значение, которое можно будет 1 раз вычислить на пуле
Будет, но 16 уже не так эффективно как текущие 64 и в общем-то это гипотетически решаемо. Очень абстрактно - считаем в одном 64-байтном блоке hash предыдущего блока|nonce|..., в следующем 64-байтном блоке считаем merkle-hash|nonce|... и тд.
Данные в 64-байтном блоке редко меняются
Там меркль-хэш лежит. Но можно подобрать транзакции так, что меркль-хэш
будет заканчиваться на те же 4 байта, что и другой меркль-хэш. Таким образом,
опять же - второй блок неизменен, а крутим не нонс, а версию блока.
Видимо версию придётся запихивать во все 64-байтные блоки во избежание такого онанизма.