Как «сначала заголовки» влияет на структуру BLKxxxx.dat?

Предполагая, что на полном узле работает Bitcoincore v0.10txindex=1), как именно новая функциональность «сначала заголовки» влияет на структуру данных блокчейна? (В частности, blkxxxx.datданные, хотя, возможно, я не знаю о других файлах, которые являются вспомогательными для структуры данных).

В README.md для выпуска указано, что обратной совместимости v0.9.x для данных блокчейна v0.10 нет blk.

Поскольку в версии 0.10.0 используется синхронизация по заголовкам и параллельная загрузка блоков (см. далее), блочные файлы и базы данных не имеют обратной совместимости со старыми версиями Bitcoin Core или другого программного обеспечения:

Блоки будут храниться на диске не по порядку (на самом деле в том порядке, в котором они были получены), что делает его несовместимым с некоторыми инструментами или другими программами. Из-за этого переиндексация с использованием более ранних версий также больше не будет работать.

Как же тогда данные blk версии 0.10 анализируются клиентом? И, кроме того, почему «сначала заголовки» вообще меняют структуру, учитывая, что кажется, что это логически устанавливает «шаблон» для данных Tx?

Ответы (2)

Протестировав с BlockStore NBitcoin , формат тот же. Файлы BLK представляют собой почти необработанные блоки (с небольшим дополнительным заголовком).

Любой сохраненный блок в этом файле имеет сеть, к которой он принадлежит, его размер, за которым следуют данные блока. На эти блоки указывает база данных leveldb по их (fileId, offset).

Однако порядок изменился, я сам использовал тот факт, что эти блоки были упорядочены в прошлом, чтобы построить цепочку заголовков из папки биткойнов. Такой код сейчас сломался бы. (Теперь я подключаюсь напрямую к одноранговому узлу, а не полагаюсь на папку блока)

Насколько я понимаю, просто блоки хранятся в другом порядке. Первая синхронизация заголовков использует параллельную загрузку, а блоки загружаются (и затем сохраняются) не по порядку. Раньше в более старых версиях блоки загружались, а затем сохранялись по порядку, поэтому они добавили комментарий в README.

Я считаю, что это не меняет структуру хранения любого отдельного блока, просто теперь они, вероятно, не в правильном порядке.

Да, это имеет смысл. Я пытаюсь получить конкретный ответ на низком уровне, поэтому, возможно, кто-то, хорошо разбирающийся в чтении обсуждений на Github, может присоединиться.
Достаточно честно, я признаю, что этот ответ немного высокого уровня. Но я подозреваю, что реальных низкоуровневых изменений может и не быть. Файлы Blk___.dat буквально содержат необработанные блоки, поэтому я чувствую, что максимум, что вы можете сделать, это хранить их в другом порядке.
Я доложу :) Я ценю ответ, приятель. Я просто разочарован тем, что так много функций программного обеспечения, включая blk, bitcoin-tx, остальные функции и т. д. и т. д., скрыты в Github.