Как правильно установить атрибуты для хэша блока и nBits в PIVX Fork?

Я клонировал PIVX (по сути, форк DASH) и изменил основные параметры. Он компилируется нормально. Когда я пытаюсь запустить его, сервер запускается, и в файле журнала отладки отображаются следующие ошибки:

ОШИБКА: CheckProofOfWork(): хэш не соответствует nBits
ОШИБКА: CheckBlockHeader(): ошибка подтверждения работы
ОШИБКА: CheckBlock(): ошибка CheckBlockHeader

Чтобы сгенерировать блок генезиса, я изменил следующие параметры:

  • pszTimestamp : Используются случайные последние новости.
  • vAlertPubKey: используется ключ оповещения из команд генерации, упомянутых в этой ссылке pastebin .
  • scriptPubKey : использовал шестнадцатеричный код генезиса из команд генерации , упомянутых в этой ссылке pastebin .

  • genesis.nTime : Получена последняя метка времени unix.

  • genesis.nNonce: получен из алгоритма создания генезисного блока, упомянутого в этой ссылке pastebin .

Мне удалось успешно сгенерировать хеш нового генезиса, а также корень Меркла. Но после его компиляции я получаю вышеуказанную ошибку.

Я пытался найти решение в Интернете, но у большинства из них не было конкретных ответов или вообще не было ответов, кроме этого .

Это объясняет, что хэш моего генезисного блока больше целевого хэша, полученного с использованием nBitsпеременной. Итак, мой вопрос: как мне убедиться, что мой исходный хэш меньше целевого хэша, чтобы избавиться от упомянутых ошибок?

Ответы (1)

Я нашел ответ. Однако, пожалуйста, поправьте меня, если я ошибаюсь в объяснении этого.

По сути, когда у нас есть входные данные для блока, мы хэшируем данные. Это хеширование может быть достигнуто с использованием нескольких методов, а именно. SHA256, скрипт, X11 и т. д.

Проблема с генерацией хеша для генезиса заключалась в том, что я использовал алгоритм scrypt для генерации хеша. Вы можете столкнуться со ссылками на вставку bin с помощью этого метода scrypt_1024_1_1_256_sp_sse2.

Итак, в моем случае я заменил это методом, предлагаемым uint256классом. Вы можете найти эту логику создания генезиса в этом pastebin .

Не стесняйтесь добавить что-нибудь или поправьте меня, если я ошибаюсь.