Я работаю над проектом, самообразование, где я пытающимся построить дешевое приложение шахтера. Я настроил "testnet в коробке" и написал небольшую шахтера, который строит версии 2 блоков. Горняк шахта успешно, все блоки, вплоть до 127, но при попытке представить блок 128 блоков становятся отвергнутыми со ссылкой на ошибку "AcceptBlock (): блок несоответствие высоты в coinbase"
Сценарий coinbase Я использую выглядит следующим образом: (пример не включает префикс длины сценария varint)
0180 00002f503253482f04b8864e50080800000200000001072f736c7573682f
Любопытно, как блок, который не может это один сразу мимо максимального значения подписанного байта (127) Я подозреваю, что может быть подлинной ошибка здесь, связанная с тем, как Bitcoin вычисляет ожидаемый префикс.
Внутренне высота сохраняется как "подписанный" INT: (Собранный из AcceptBlock () функция в main.cpp)
INT nHeight = 0;
Я подозреваю, что ошибки возникают, когда эти подписанные значения получают уплотненные в переменный целый. Мы, возможно, просто не видел этого, из-за возможности версии блока 2 не был введен, пока оба testnet и mainnet не было достаточно долго, чтобы замаскировать проблему. К сожалению, у меня нет среды или инструментов, созданной для компиляции и грабли вокруг в Bitcoin коде. Может кто-то здесь более подготовлены, и более знающим, чем я могу помочь мне исследовать это? Мне было бы любопытно результата следующего Snippit кода:
INT nHeight = 128;
CSCRIPT ожидать = CScript () << nHeight;
Смотрите, если байты, построенные CScript оказываются "0180" как и ожидалось.
Заранее спасибо!
Matt