000000000000000000039083710e88a6c44368130eb8be8de2d40d181ebeafaa

000000000000000000036083710e88a6c44368130eb8be8de2d40d181ebeafaa

What is the difference between these two Hashes?

Reply to this note

Please Login to reply.

Discussion

или биткоин не случайность...

значит нужно переводить биткоин на новый алгоритм или просто будет другая валюта. все просто!) но само распределение мне не нравиться...

ab7d1bc61db8d3763e3c13cdd5504a46d8d5c918c19fcf592facc4b55f2be172

0000000000000000000003c13cdd5504a46d8d5c918c19fcf592facc4b55f2be172

Чем отличаются эти???

а знаете почему нельзя увеличивать размер блока биткоина???

тогда он не сможет обратно расчитать хэш и проверить подлинность его))))

Так что этот алгоритм не случайность)

и все проблемы так и остануться из-за не хватки денег на планете)))

Когда хэшируемый файл весь считан и уже передан в функцию sha256_update() остается только вызвать завершающую функцию sha256_final(), которая если размер файла был не кратен 64 байтам, то добавит дополнительные padding байты, впишет в конец последнего блока данных общую длину данных в битах и сделает финальный sha256_transform().

Результат хэширования остается в массиве state.

Это так сказать «высокий уровень».

Применительно к майнеру биткоина, конечно разработчики думают как бы считать поменьше да поэффективней.

Все просто: заголовок содержит всего 80 байт, что не кратно 64 байтам. Таким образом нужно было бы для первого sha256 уже делать два sha256_transform(). Однако по счастью для майнеров, nonce блока находится в конце заголовка, значит первый sha256_transform() можно выполнить всего один раз — это будет так называемый midstate. Далее майнер перебирает все варианты нонсе, которых 4 миллиарда, 2^32 и подставляет их в соответствующее поле для второго sha256_transform(). Этот трансформ завершает первую функцию sha256. Ее результат — это восемь 32х битных слов, то есть 32 байта. От них найти sha256 просто — вызывается завершающий sha256_transform() и все — готово. Заметьте, что входные данные 32 байта меньше по размеру, чем нужные для sha256_transform() 64 байта. Значит опять блок будет дополнен нулями и в конец будет вписана длина блока.

Итого всего три вызова sha256_transform() из которых первый нужно считать только один раз для вычисления midstate.

Я попытался развернуть все манипуляции с данными происходящие при вычислении хэша заголовка блока биткоина в единую функцию, так, чтобы было понятно, как происходит все вычисление конкретно для биткоина и вот что получилось: