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.

TXID

Cree un TXID a partir de los datos de una transacción bruta.

0 bytes

Bytes de la transacción efectivamente usados en el hash (sin marker, flag ni testigo):

Usado internamente dentro de los datos de la transacción bruta

0 bytes

Usado externamente al buscar transacciones en exploradores de bloques

0 bytes

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.

Raíz de Merkle

Calcule la raíz de Merkle a partir de una lista de TXIDs.

Bloque

Una lista de TXIDs separados por espacios, comas o nuevas líneas. Las comillas y los corchetes se ignoran.

Los TXIDs deben insertarse en la orden de bytes invertida (como aparecen en los exploradores), pero se convierten a la orden de bytes natural antes de calcular la raíz de Merkle.

TXIDs (0)

El orden de los bytes como sale de la función hash

El orden de los bytes como se muestra en los exploradores

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.

HASH256

SHA-256 doble. Se usa para hashear cabeceras de bloque, datos de transacción y prácticamente cualquier cosa que necesite hash en Bitcoin.

0 bytes
SHA-256
SHA-256

SHA-256(SHA-256(dados))

0 bytes

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.

Recursos