Индекс Bitcoin Core LevelDB сохраняет разветвленные блоки

Я заметил, что он bitcoindбудет постоянно сохранять непроверенные блоки, которые он получает, даже если они окажутся небольшими разветвлениями блокчейна, что, вероятно, происходит из-за относительно одновременного обнаружения двух блоков одинаковой высоты. Это не создает проблем для функциональности Bitcoin Core, поскольку в источнике наверняка есть процесс, который игнорирует такие маленькие ответвления, однако мне любопытно, что данные сохраняются в данных, сохраненных в файлах и в и , .datтем.ldb не .bitcoin/blocks/менее .bitcoin/blocks/index. Есть ли способ удалить эти недопустимые блоки, принадлежащие небольшим разветвлениям в блокчейне, не -reindexзатрагивая весь блокчейн? Их бы -reindexвообще убрать?

Это незначительное влияние. Менее 1% блоков устарели.

Ответы (2)

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

С технической точки зрения, каталог $DATADIR/blocks для Bitcoin Core не является представлением блокчейна. Это хранилище всех действительных блоков, которые мы когда-либо загружали. Какой из них в конечном итоге считается основной цепью, это другой вопрос, и он решается независимо.

Также обратите внимание, что в режиме обрезки удаляются все старые блоки, включая эти небольшие ответвления.

Я не могу придумать никакого удобного способа сделать это.

Единственный метод, который приходит на ум, — создать для себя bootstrap.datфайл из собственного обновленного узла, затем выйти из Bitcoin Core и вручную очистить все соответствующие файлы БД перед импортом из bootstrap.dat.

Эти маленькие вилки называются "сиротками"? Почему они появляются только тогда, когда вы действительно запускаете узел? Это потому, что узлы не ретранслируют потерянные блоки, а сохраняют их на неопределенный срок?