El compromiso de los testigos ubicado en una salida de la transacción Coinbase contiene:OP_RETURN commitment_prefix|witness_commitment
Dónde commitment_prefix=0xaa21a9ed
ywitness_commitment=sha256(sha256(witness_merkle_root|witness_reserved_value))
.
El witness_merkle_root
es la raíz de un árbol de Merkle que contiene todas las transacciones teniendo en cuenta sus datos de testigos. Para la transacción Coinbase no podemos usar el hash actual de la transacción, ya que tendríamos una dependencia recursiva. Para resolver que usamos todos los 0:
sha256(sha256(E | F))
│
┌──────────────────┴───────────────────┐
│ │
E = sha256(sha256(A | B)) F = sha256(sha256(C | D))
┌───────────────┴───────────────┐ ┌───────────────┴───────────────┐
│ │ │ │
A (CoinbaseTx) B C D
000... txid_2 txid_3 txid_4
¿Por qué usamos una ID de TX establecida en todos los 0s en lugar de ignorar la transacción Coinbase para crear la raíz de Merkle?
El compromiso de los testigos ubicado en una salida de la transacción Coinbase contiene:OP_RETURN commitment_prefix|witness_commitment
Dónde commitment_prefix=0xaa21a9ed
ywitness_commitment=sha256(sha256(witness_merkle_root|witness_reserved_value))
.
El witness_merkle_root
es la raíz de un árbol de Merkle que contiene todas las transacciones teniendo en cuenta sus datos de testigos. Para la transacción Coinbase no podemos usar el hash actual de la transacción, ya que tendríamos una dependencia recursiva. Para resolver que usamos todos los 0:
sha256(sha256(E | F))
│
┌──────────────────┴───────────────────┐
│ │
E = sha256(sha256(A | B)) F = sha256(sha256(C | D))
┌───────────────┴───────────────┐ ┌───────────────┴───────────────┐
│ │ │ │
A (CoinbaseTx) B C D
000... txid_2 txid_3 txid_4
¿Por qué usamos una ID de TX establecida en todos los 0s en lugar de ignorar la transacción Coinbase para crear la raíz de Merkle?