просто в коде не нашел сравнение по количеству нулей в начале, вижу только if (thash <= hashTarget)
Ну, всё правильно. Выполняется сравнение двух чисел, и по результату сравнения принимается решение: итерировать ли дальше nonce или мы таки нашли хеш заголовка блока, подходящий под текущий target.
И чего вы к этим нулям прицепились? С чего вы, вообще, взяли что происходит сравнение по количеству нулей?
почему каждый хеш блока, который нашел нужный nonce, выглдят так:
0000000000000000002a3efa7588628ea72576cd1fc7384c2ed4ca9e26d77040
или
00000000000000000016ea0bd16532a3d726a01b60dcf34d0756c5140c76a007
то есть всегда в начале нули? получается ближайшее значение к таргет, это значение с нулями?