Содержит ли корень merkle хэши транзакций из предыдущих блоков?

Каждый блок в блокчейне содержит значение корня Меркла. Таким образом, для любого блока существует некоторый список транзакций, и вы создаете дерево меркле на основе этих транзакций. Для других блоков повторится тот же процесс.

Мой вопрос: предположим, что A, B, C, D являются транзакциями, и мы создаем дерево Меркла и добавляем корень Меркла в блок. Теперь позже мы получили транзакции E, F, G, H, поэтому:

  1. основано ли дерево Меркла только на E, F, G, H
  2. или он основан на A,B,C,D,E,F,G,H .

Я хочу знать, что для некоторого блока мы создали значение корня Меркла на основе A, B, C, D. Для других заблокируйте, включаем ли мы предыдущую транзакцию с новыми транзакциями и создаем дерево Меркла. Или только с новыми транзакциями создается дерево Меркла.

Ответы (3)

Блокчейн — это механизм, с помощью которого биткойны сходятся в одном общем состоянии. Участники отправляют в сеть платежные поручения в виде неподтвержденных транзакций, из которых майнеры затем выбирают набор транзакций в качестве своих кандидатов в блоки. Таким образом, корень 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 заголовка предыдущего блока. Заголовок блока включает корень Меркла, хеш предыдущего блока, метку времени и другие поля. Таким образом, используя хэш заголовка предыдущего блока в заголовке текущего блока, вы, по сути, косвенно фиксируете транзакции, которые были включены в предыдущий блок, таким образом формируя цепочку.

Это означает, что если мы собираем некоторые транзакции в какое-то время, скажем, T (1), чем корень Merkle на основе этих транзакций. Через некоторое время скажем T (2), если мы собираем какую-то другую транзакцию, а затем корень Merkle на основе транзакций, которые мы собираем в момент времени T (2). Предыдущие транзакции не включаются в текущее дерево Меркла для получения значения корня Меркла.
@SanjeevDwivedi Да, это правильно, если вы имели в виду транзакции в блоке. Существуют неподтвержденные транзакции, не включенные в блоки (используемая комиссия может быть низкой и т. д.), которые не будут составлять часть корня меркла ни в одном блоке. Корень merkle не содержит транзакций из предыдущих блоков. Но использование хэша заголовка предыдущего блока в заголовке текущего блока косвенно фиксирует транзакции в предыдущем блоке.

Для каждого нового блока создается новое дерево транзакций Меркла. Как только блок включается в цепочку блоков, дерево Меркла (и, следовательно, корень Меркла) для этого блока не изменяется. В вашем примере, если вы майнер, пытающийся добыть блок, вы можете продолжить с транзакциями A, B, C и D или сформировать новое дерево Меркла с A, B, C, D, E, F, G и H. , Чем больше комиссия за транзакции для E, F, G и H, тем больше вероятность того, что майнер переключится с попыток добыть блок с помощью A, B, C и D на попытку добыть блок с помощью A, B, C, D, Е, Ф, Г и Н.

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