wTXID
Como un TXID, pero incluyendo los datos de testigo
Un wTXID es como un TXID, pero incluye los datos de testigo de una transacción.
- Un wTXID es el HASH256 de todos los datos de la transacción, incluyendo el marker, flag y witness.
- Un TXID es el HASH256 de todos los datos de la transacción excepto el marker, flag y witness.
Ejemplos
¿Cómo creas un wTXID?
Transacción SegWit
Para una transacción segwit, el TXID es el HASH256 de los datos excepto marker/flag/witness, y el wTXID es el HASH256 de todos los datos incluyendo esos campos. Los dos son diferentes.
Orden de Bytes. No olvides que los TXID y wTXID se muestran en orden invertido, así que el resultado inicial del HASH256 estará en orden natural (parece "al revés" al principio).
Transacción Legada
Una transacción no-segwit tiene el mismo TXID y wTXID, ya que no contiene marker, flag ni witness.
Puedes encontrar el wTXID de una transacción ejecutando bitcoin-cli getrawtransaction <txid> 1. El wTXID será igual al campo "hash".
Compromiso de wTXID
Comprometiendo los datos de testigo al bloque
Los wTXID se usan para comprometer los nuevos datos de las transacciones segwit al bloque, mediante una raíz de testigo (witness root hash).
Todos los datos de las transacciones legadas se comprometen a la cabecera del bloque por medio de una raíz de Merkle de todos los TXID del bloque. Sin embargo, los TXID no incluyen los datos de marker, flag y witness. Así que, para todos los bloques desde la actualización SegWit, también creamos una raíz de Merkle de todos los wTXID y la comprometemos al bloque.
Esta raíz de testigo pasa por HASH256 junto con el valor reservado de la testigo para crear un compromiso de wTXID, que se coloca dentro del ScriptPubKey de una de las salidas de la transacción coinbase. Así, si alguien intenta alterar el contenido de la testigo de cualquier transacción del bloque, ya no coincidirá con el compromiso, y el bloque será inválido.
Los wTXID sirven, en última instancia, para impedir que alguien edite los nuevos datos de testigo (segwit) incluidos en el bloque.
La raíz de testigo usa el wTXID de la coinbase como todo ceros, para evitar una referencia circular.
Uso
¿Cómo se usan los wTXID en Bitcoin?
Los wTXID se usan solo internamente en Bitcoin, para crear un compromiso con los nuevos campos segwit de las transacciones. Así que no usarías un wTXID para buscar una transacción en la blockchain.
Para eso, sigues usando el TXID. El TXID sigue siendo un identificador único de una transacción, pues aún hace el hash del efecto de la transacción (mover monedas de salidas existentes a nuevas salidas), que siempre es único. Los datos de testigo solo importan para la validación de la transacción (desbloquear las entradas), y eso no hace que los datos de la transacción sean más únicos de lo que ya son.