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

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.

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