¿Merkle root contiene hashes de transacciones de bloques anteriores?

Cada bloque en una cadena de bloques contiene un valor de raíz Merkle. Entonces, para cualquier bloque, hay una lista de transacciones y crea un árbol Merkle basado en estas transacciones. Para otros bloques, se repetirá el mismo proceso.

Mi pregunta es: supongamos que A, B, C, D son transacciones y creamos un árbol Merkle y agregamos la raíz Merkle en bloque. Ahora más tarde obtuvimos las transacciones E,F,G,H, así que:

  1. si el árbol merkle se basa solo en E, F, G, H
  2. o se basa en A,B,C,D,E,F,G,H.

Quiero saber que para algún bloque, creamos un valor de raíz Merkle basado en A,B,C,D. Para otros, bloquee si incluimos transacciones anteriores con nuevas transacciones y creamos un árbol Merkle. O con solo transacciones nuevas, se crea el árbol merkle.

Respuestas (3)

La cadena de bloques es el mecanismo para que Bitcoin converja en un estado compartido. Los participantes envían órdenes de pago en forma de transacciones no confirmadas a la red desde la cual los mineros luego seleccionan un conjunto de transacciones en sus candidatos de bloque. Por la presente, la raíz de Merkle representa un compromiso con una lista específica de transacciones válidas no confirmadas previamente. Cuando se crea un nuevo bloque, todos los participantes de la red validan el bloque y luego adoptan el nuevo conjunto de saldos como el estado actual de la red.

Además de la raíz de Merkle como compromiso con las transacciones de este bloque, el encabezado del bloque también se compromete con exactamente un bloque anterior como su padre al incluir el hash de ese bloque predecesor. Como el predecesor a su vez se comprometió con su propio predecesor, un nuevo bloque se compromete inductivamente con la historia completa desde el Bloque Génesis.

Dado que cada bloque anterior contiene a su vez una raíz de Merkle con la que se comprometió con su propio conjunto de transacciones, cualquier bloque nuevo también se compromete indirectamente con el historial completo de todas las transacciones.

Volviendo a su ejemplo, esto significa que si el Bloque n. ° 1 se comprometió con {A, B, C, D}, la raíz de Merkle en el Bloque n. ° 2 solo se comprometería con {E, F, G, H}. Sin embargo, el Bloque n.° 2 se compromete {A, B, C, D}indirectamente al declarar al Bloque n.° 1 como su predecesor.

Gracias por esta valiosa información. Es de mucha ayuda para mi.

La raíz de Merkle es específica de bloque, por lo que cada bloque tiene una raíz de Merkle diferente. Si las transacciones AH pertenecen al mismo bloque, entonces tendrá que calcular la raíz de merkle utilizando todas las transacciones de AH; de lo contrario, tendrá la raíz de merkle que contiene la transacción AD en el bloque N y la raíz de merkle que contiene las transacciones EH en el bloque N+1.

Los bloques se comprometen con el bloque anterior usando previousblockhash, que es el doble hash SHA-256 del encabezado del bloque anterior. El encabezado de un bloque incluye la raíz Merkle, el hash del bloque anterior, la marca de tiempo, entre otros campos. Entonces, al usar el hash del encabezado del bloque anterior en el encabezado del bloque actual, en esencia, se está comprometiendo indirectamente con las transacciones que se incluyeron en el bloque anterior, formando así una cadena.

Significa que si recopilamos algunas transacciones en algún momento, digamos T (1) que la raíz de Merkle en función de estas transacciones. Después de un tiempo, digamos T (2) si recopilamos alguna otra transacción, entonces la raíz de Merkle se basa en las transacciones que recopilamos en el momento T (2). Las transacciones anteriores no se incluyen en el árbol de Merkle actual para obtener el valor raíz de Merkle.
@SanjeevDwivedi Sí, eso es correcto, si se refería a transacciones en un bloque. Hay transacciones no confirmadas que no están incluidas en los bloques (la tarifa utilizada puede ser baja, etc.) que no formarán parte de la raíz merkle en ningún bloque. La raíz de merkle no contiene transacciones de bloques anteriores. Pero el uso del hash del encabezado del bloque anterior en el encabezado del bloque actual compromete indirectamente las transacciones en el bloque anterior.

Por cada nuevo bloque hay un nuevo árbol de transacciones de Merkle. Una vez que el bloque se incluye en la cadena de bloques, el árbol de Merkle (y, por lo tanto, la raíz de Merkle) para ese bloque no cambia. En su ejemplo, si es un minero que intenta extraer un bloque, puede optar por continuar con las transacciones A, B, C y D o formar un nuevo árbol de Merkle con A, B, C, D, E, F, G y H. Cuanto mayores sean las tarifas de transacción en E, F, G y H, más probable es que el minero cambie de intentar extraer un bloque con A, B, C y D a intentar extraer un bloque con A, B, C, D, E, F, G y H.

El punto clave aquí es que los árboles de transacciones de Merkle no se pueden cambiar una vez que se incluyen en la cadena de bloques global, pero antes de eso se pueden cambiar localmente con la frecuencia que desee.