Я клонировал PIVX (по сути, форк DASH) и изменил основные параметры. Он компилируется нормально. Когда я пытаюсь запустить его, сервер запускается, и в файле журнала отладки отображаются следующие ошибки:
ОШИБКА: CheckProofOfWork(): хэш не соответствует nBits
ОШИБКА: CheckBlockHeader(): ошибка подтверждения работы
ОШИБКА: CheckBlock(): ошибка CheckBlockHeader
Чтобы сгенерировать блок генезиса, я изменил следующие параметры:
scriptPubKey : использовал шестнадцатеричный код генезиса из команд генерации , упомянутых в этой ссылке pastebin .
genesis.nTime : Получена последняя метка времени unix.
Мне удалось успешно сгенерировать хеш нового генезиса, а также корень Меркла. Но после его компиляции я получаю вышеуказанную ошибку.
Я пытался найти решение в Интернете, но у большинства из них не было конкретных ответов или вообще не было ответов, кроме этого .
Это объясняет, что хэш моего генезисного блока больше целевого хэша, полученного с использованием nBits
переменной. Итак, мой вопрос: как мне убедиться, что мой исходный хэш меньше целевого хэша, чтобы избавиться от упомянутых ошибок?
Я нашел ответ. Однако, пожалуйста, поправьте меня, если я ошибаюсь в объяснении этого.
По сути, когда у нас есть входные данные для блока, мы хэшируем данные. Это хеширование может быть достигнуто с использованием нескольких методов, а именно. SHA256, скрипт, X11 и т. д.
Проблема с генерацией хеша для генезиса заключалась в том, что я использовал алгоритм scrypt для генерации хеша. Вы можете столкнуться со ссылками на вставку bin с помощью этого метода scrypt_1024_1_1_256_sp_sse2
.
Итак, в моем случае я заменил это методом, предлагаемым uint256
классом. Вы можете найти эту логику создания генезиса в этом pastebin .
Не стесняйтесь добавить что-нибудь или поправьте меня, если я ошибаюсь.