просто в коде не нашел сравнение по количеству нулей в начале, вижу только if (thash <= hashTarget)
Ну, всё правильно. Выполняется сравнение двух чисел, и по результату сравнения принимается решение: итерировать ли дальше nonce или мы таки нашли хеш заголовка блока, подходящий под текущий target.
И чего вы к этим нулям прицепились? С чего вы, вообще, взяли что происходит сравнение по количеству нулей?
почему каждый хеш блока, который нашел нужный nonce, выглдят так:
0000000000000000002a3efa7588628ea72576cd1fc7384c2ed4ca9e26d77040
или
00000000000000000016ea0bd16532a3d726a01b60dcf34d0756c5140c76a007
то есть всегда в начале нули? получается ближайшее значение к таргет, это значение с нулями?
Ну вроде во втором классе средней школы проходят.
1 = 01 = 001 = 0001 = 00000...000001
2 = 02 = 002 = 0002 = 00000...000002
0000000000000000002a3efa7588628ea72576cd1fc7384c2ed4ca9e26d77040 = 2a3efa7588628ea72576cd1fc7384c2ed4ca9e26d77040
00000000000000000016ea0bd16532a3d726a01b60dcf34d0756c5140c76a007 = 16ea0bd16532a3d726a01b60dcf34d0756c5140c76a007
ВНЕЗАПНО:
1 < 2
0001 < 0002
16ea0bd16532a3d726a01b60dcf34d0756c5140c76a007 < 2a3efa7588628ea72576cd1fc7384c2ed4ca9e26d77040
00000000000000000016ea0bd16532a3d726a01b60dcf34d0756c5140c76a007 < 0000000000000000002a3efa7588628ea72576cd1fc7384c2ed4ca9e26d77040