hash1 и midstate. Для лайта не знаю (точнее там в начале scrypt'а тоже SHA256), в чистом sha256:
"Первые 80 байт"(а надо их из сетевого порядка в человеческий перевернуть) это 640 бит, в sha256 можно затолкать
512 (с учетом правила дополнения сообщений в конце последнего куска по 512бит должна быть длина, то есть если
имеем 512 бит сообщения, то полный "конвеер"(да я делал конвеером, им понятнее, но пришлось делать классикой
по 3раунда последовательно, тк ни в одну FPGA не влезло)) надо прогонять 2 раза: первый 512бит сообщения, второй 1 в начале и длина (512) в конце.
Обратно на землю. 640 бит это 512 + 128, причем мы меняем только последние 32 из тех 128, дальше 1 и "640длина" в конце.
Таким образом hash1 это результат sha256 после первого прогона(первые 512бит), чтобы получить хэш сообщения
надо допрогнать еще один проход(128бит_"1"0000....0000"640"). То есть hash1 не нужен, тк есть midstate.
Ну и собственно вопрос а что нам мешает считать второй прогон только с места где мы меняем nounce, а не с начала?
А ничего. Вот midstate и будет являться тем самым состоянием в конце постоянной части.
То есть если мы используем midstate, то нам надо прогнать sha256 1,8125 раза вместо 3 раз, когда мы меняем nounce.
К сожалению формат midstate не знаю, всегда считал его отдельно.
На своем игрушечном майнере на спартане 3 никогда не майнил, но блоки он "находил" уже найденные,
я кормил его найденными блоками с blockchain.info и проверял, найдет ли он нужный nounce, было 1-2Мх/с с 30МГЦ.
Делал летом, со злости распаял взапчасти.
тьфу все зря написал, уже было, всеравно запощу.