Сохраняют ли полные узлы полное дерево Меркла или они восстанавливают его при создании доказательства Меркла?

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

Вопрос 1) Есть ли место, где хранятся полные деревья Меркла? Я не имею в виду корневые хэши merkle, так как я знаю, что они находятся в заголовках блоков.

Вопрос 2) Допустим, полный узел начинает доказывать легкому узлу, что конкретная транзакция находится в блоке J. Как полный узел отправляет ветвь merkle легкому узлу? Он снова перебирает транзакции, чтобы получить хэши, а затем отправляет хэши транзакций внутренних узлов, или полные узлы уже где-то хранят полное дерево Меркла (все дерево и каждый внутренний хэш)?

Ответы (1)

Bitcoin Core в своей реализации BIP37 вычисляет доказательства Меркла на лету. Он нигде не хранит деревья Меркла блоков (хранится только его корень).

Спасибо, Питер. Я хочу добавить кое-что. Корни merkle используются для сокращения операций с n до logn . Похоже, что для полного узла количество операций по-прежнему равно n. он сокращается до logn для легких узлов, поскольку полный узел отправляет только путь дерева Меркла вместо всего дерева Меркла. ты согласен со всем, что я только что сказал?
какие-либо комментарии по поводу моего последнего ответа? Заранее спасибо.
@Nika Это правильно, хотя это действительно единственный вариант. BIP37 использует фильтры Блума для выбора интересных транзакций, а это не то, для чего мы можем построить индекс для быстрого поиска. В результате ответ узла должен пройти через весь блок в любом случае, чтобы определить, даже какие транзакции интересны клиенту. Построение дерева Меркла и ответ с путями совпадающих транзакций — незначительные затраты по сравнению с этим.