Структура цепочки блоков Bitcoind

Я пытаюсь понять структуру базовой цепочки блоков, хранящейся в основной реализации (или, скорее, просто файлы BLK, используемые полным узлом). Мой вопрос ; хранит ли цепочка блоков полную древовидную структуру, т. е. все встреченные разветвления? Или он очищает записи после разрешения форка.

Если бы я читал файлы blk последовательно, могу ли я предположить, что каждый прочитанный блок правильно упорядочен и нет разветвлений?

Спасибо!

Ответы (1)

файлы BLK не являются API. Вы не должны напрямую читать эти файлы. Что вам нужно сделать, так это запросить заголовки/блок через интерфейс JSON RPC (или интерфейс REST).

Вы можете получить хэш блока генезиса через:

bitcoin-cli getblockhash 0

Тогда можно получить блок (без транзакций):

bitcoin-cli getblock <hash>

Затем получите следующий блок, просмотрев nextblockhashэлемент в ответе блока JSON и т. д.

Также рассмотрите возможность использования интерфейса REST. Там вы можете получить двоичные ответы, которые намного быстрее (без накладных расходов на кодирование/декодирование JSON).

Чтобы ответить на вопрос более прямо: если вы прочитаете файлы blk напрямую, вы обнаружите, что блоки цепочки не в порядке, потенциально с промежутками между ними, включая разветвленные блоки, и формат может измениться в будущих версиях.
@PieterWuille большое спасибо за разъяснение.
@PieterWuille ты не прав. Читая blk-файлы с некоторой математикой, вы можете найти порядок блокировки блокчейна, исключая любые пробелы или разветвления. Возможно.
Я написал этот код в Core. Да, вы можете просканировать все блоки, а затем определить самую длинную цепочку и отфильтровать мусор. Но вопрос был не в этом. На диске блоки не по порядку.