Merkle_root = Hash (старый Merkle корень | заголовок хэш-Окс)
Это способ сделать это с мягкой вилкой, но с потерей эффективности.
Первоначальное предложение здесь:
Проблема с этим предложением в том, что он ограничивает количество сделок с мощностью 2.
Основная идея состояла в том, чтобы иметь 2 ^ п + 1 сделок. Например, если есть 513 сделок, то первые 512 сделок будут способствовать левому потомку корня и только в 513-м сделки будет способствовать праву ребенка.
Это означает, что вам нужно всего лишь отправить транзакцию и 513-м вы можете вычислить правильный ребенок корневого узла в дереве Merkle. Если вы предоставите хэш левого ребенка и хэш сделки (513-м 64 байта), то вы можете доказать, что сделка является 513 частью набора. Вы не нужны почти ни один из Merkle отрасли.
Сделка будет 513 имеет хэш вспомогательного заголовка, закодированный в нем. Это означает, что короткое доказательство может быть использовано, чтобы доказать, что вспомогательный заголовком является частью блока.
Как правило, при предоставлении филиала Меркла, вам необходимо предоставить хэш пути не принимается. При переходе от родительского узла к левому ребенка, вы обеспечиваете хэш правого ребенка и наоборот.
Однако, когда речь идет о последних сделках, есть только левый ребенок. Если нет никакого права ребенка, то вам не нужно отправить его хэш, поскольку он является копией хэша левого ребенка. Это происходит, если имеется нечетное число узлов для этого уровня.
Если есть 513 сделок, то это будет происходить на всех уровнях, кроме последнего.
513 -> 257 -> 129 -> 65 -> 33 -> 17 -> 9 -> 5 -> 3 -> 2 -> 1
Только 2 -> 1 требует преобразования левой хэш которая должна быть предоставлена (как это имеет четное число узлов). Это означает, что ветвь пути Меркл может быть закодирован с 32 байта. Блок 512 транзакций будет обычно требует около 300 байт для пути и требование будет увеличивать блоки становятся больше 32 * log2 (tx_count).
Трудность этого предложения заключается в том, что количество сделок ограничено. Горняк с 1023 транзакций в его пуле памяти будет только в состоянии включить 512 из них в блоке он является добыча. Заполнения операция может быть использована, чтобы заполнить дополнительное пространство.
Количество хэшей, которые должны быть предоставлены равно числу ненулевых битов в двоичном представлении графа транзакции (за исключением дополнительной операции заголовка).
Например, если бы было 11 нормальных операций и 1 сделка заголовка, то Merkle дерево будет выглядеть следующим образом
11 сделки + 1: 12 -> 6 -> 3 -> 2 -> 1
11 = 1011 (3 не ноль)
27 сделок + 1: 28 -> 14 -> 7 -> 4 -> 2 -> 1
27 = 11011 (4 отлична от нуля)
Это означает, что число хешей, которые должны быть предоставлены может быть ограничено путем ограничения числа ненулевых битов в счете транзакций. Если число ненулевых бит был ограничен до 3, то почти все операции могут быть включены (или очень мало обивка сделки потребуется).
16: 10000
17: 10001
18: 10010
19: 10011
20: 10100
21: 10101
22: 10110
24: 11000
25: 11001
26: 11010
28: 11100
Если 31 сделки были в пуле памяти, то можно было бы включить только 28 (90,3%).
Если 4 ненулевые биты были разрешены, могут быть включены, то 95% сделок и обычно больше, чем это.
Для больших графов ТХ, 3 бита будет иметь худший случай, 87,5% сделок, включенных и 4 бита будет иметь худший случай 93.75.