Обрезка ветвей в Merkle Tree

В дереве Меркла листья — это фактические транзакции, а внутренние узлы — это хеш их дочерних элементов. В статье о биткойнах Сатоши говорит об обрезке ветвей в дереве Меркла для экономии места для хранения.

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

Ответы (1)

Конечно:

  • Лист (транзакция) может быть удален, когда все его выходы израсходованы.
  • Узел может быть удален, когда оба его дочерних элемента были удалены.

Однако Bitcoin Core не реализует такую ​​обрезку. Он был построен на предположении, что вы загружаете и проверяете все блоки. Благодаря этому он работает в одном из двух режимов:

  • Без обрезки (по умолчанию)
  • Не храните старые блоки или старые деревья меркла, а отслеживайте только неизрасходованные выходные данные и их scriptPubKeys. Этот режим не позволяет вам помочь синхронизировать новые узлы.
кто делает эту обрезку? Существует ли какая-либо структура данных, которая отслеживает, был ли потрачен конкретный результат или нет? Или нам нужно пройти всю цепочку блоков, чтобы определить неизрасходованный вывод?
@Curious Никто, насколько мне известно. Но, гипотетически, если бы это было сделано, то это было бы сделано отдельными узлами.
Существует ли какая-либо структура данных, которая отслеживает, был ли потрачен конкретный результат или нет? Или нам нужно пройти всю цепочку блоков, чтобы определить неизрасходованный вывод?
@Любопытно Да. Первоначально он отслеживал только блок, в котором находилась конкретная транзакция, но теперь он отслеживает каждый вывод отдельно, так что нет необходимости сверяться со всеми данными блока. Однако это выходит за рамки вашего вопроса; вам следует задать новый вопрос , если вы хотите узнать больше об этом.
Биткойн-ядро еще не реализует это. Обрезка, скорее всего, будет реализована в 0.11 (следующая версия).