Каждый блок в блокчейне содержит значение корня Меркла. Таким образом, для любого блока существует некоторый список транзакций, и вы создаете дерево меркле на основе этих транзакций. Для других блоков повторится тот же процесс.
Мой вопрос: предположим, что A, B, C, D являются транзакциями, и мы создаем дерево Меркла и добавляем корень Меркла в блок. Теперь позже мы получили транзакции E, F, G, H, поэтому:
Я хочу знать, что для некоторого блока мы создали значение корня Меркла на основе A, B, C, D. Для других заблокируйте, включаем ли мы предыдущую транзакцию с новыми транзакциями и создаем дерево Меркла. Или только с новыми транзакциями создается дерево Меркла.
Блокчейн — это механизм, с помощью которого биткойны сходятся в одном общем состоянии. Участники отправляют в сеть платежные поручения в виде неподтвержденных транзакций, из которых майнеры затем выбирают набор транзакций в качестве своих кандидатов в блоки. Таким образом, корень Merkle представляет собой обязательство по одному конкретному списку ранее неподтвержденных действительных транзакций. Когда создается новый блок, все участники сети проверяют блок, а затем принимают новый набор балансов в качестве текущего состояния сети.
Помимо корня Merkle в качестве фиксации транзакций этого блока, заголовок блока также фиксирует ровно один предыдущий блок в качестве его родителя, включая хэш этого предшествующего блока. Поскольку предшественник, в свою очередь, привержен своему собственному предшественнику, новый блок, таким образом, индуктивно связывает всю историю, начиная с блока Бытия.
Учитывая, что каждый предыдущий блок, в свою очередь, содержит корень Merkle, с помощью которого он фиксирует свой собственный набор транзакций, любой новый блок также косвенно фиксирует полную историю всех транзакций.
Возвращаясь к вашему примеру, это означает, что если блок № 1 зафиксирует {A, B, C, D}
, корень Merkle в блоке № 2 будет зафиксировать только {E, F, G, H}
. Тем не менее, Блок № 2 {A, B, C, D}
косвенно подтверждает это, объявляя Блок № 1 своим предшественником.
Корень Меркла зависит от блока, поэтому каждый блок имеет свой корень Меркла. Если транзакции AH принадлежат одному и тому же блоку, то вам придется вычислять корень меркла, используя все транзакции из AH, если нет, вы будете иметь корень меркла, содержащий транзакцию AD в блоке N, и корень меркла, содержащий транзакции EH в блоке N+1.
Блоки фиксируются в предыдущем блоке с использованием previousblockhash
двойного хэша SHA-256 заголовка предыдущего блока. Заголовок блока включает корень Меркла, хеш предыдущего блока, метку времени и другие поля. Таким образом, используя хэш заголовка предыдущего блока в заголовке текущего блока, вы, по сути, косвенно фиксируете транзакции, которые были включены в предыдущий блок, таким образом формируя цепочку.
Для каждого нового блока создается новое дерево транзакций Меркла. Как только блок включается в цепочку блоков, дерево Меркла (и, следовательно, корень Меркла) для этого блока не изменяется. В вашем примере, если вы майнер, пытающийся добыть блок, вы можете продолжить с транзакциями A, B, C и D или сформировать новое дерево Меркла с A, B, C, D, E, F, G и H. , Чем больше комиссия за транзакции для E, F, G и H, тем больше вероятность того, что майнер переключится с попыток добыть блок с помощью A, B, C и D на попытку добыть блок с помощью A, B, C, D, Е, Ф, Г и Н.
Ключевым моментом здесь является то, что деревья транзакций Меркла не могут быть изменены после включения в глобальную цепочку блоков, но до этого их можно изменять локально так часто, как вы пожелаете.
Санджив Двиведи