TXID

La referencia única de una transacción

Un TXID (Transaction ID) es una referencia única para una transacción de bitcoin.

Se usan para buscar transacciones específicas en un explorador. Por ejemplo:

Las letras y números de un TXID no tienen un significado especial. Son solo 32 bytes de apariencia aleatoria (representados como 64 caracteres hexadecimales). Pero son únicos para cada transacción.

Creación

¿Cómo se crea un TXID?

Un TXID se crea haciendo hash de los datos de la transacción. Más precisamente, pasando partes específicas de los datos por la función SHA256 y pasando el resultado por SHA256 otra vez (este hash doble es el HASH256).

Así que, en las transacciones segwit, las firmas ya no forman parte del TXID.

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

Los TXID que ves en los exploradores están, en realidad, en orden de bytes invertido. Es solo una peculiaridad de bitcoin.

Ejemplos

¿Cómo es un TXID?

1. Transacción Legada

Para crear un TXID de una transacción legada, haces HASH256 de todos los datos de la transacción. Por ejemplo, al hashear los datos de cierta transacción obtienes 169e1e83e930853391bc6f35f605c6754cfead57cf8387639d3b4096c54f18f4 (el TXID en orden natural, que aparece en los datos brutos). Al invertir el orden de los bytes, obtienes el TXID mostrado en los exploradores: f4184fc596403b9d638783cf57adfe4c75c605f6356fbc91338530e9831e9e16.

2. Transacción SegWit

Para una transacción segwit, haces HASH256 de todos los datos excepto los campos marker, flag y witness. Al no hashear estos nuevos campos, evitas que los datos de firma formen parte del TXID (ahora quedan en la witness), ya que las firmas pueden manipularse para cambiar el TXID después de enviar una transacción a la red (lo cual es raro, pero hacía que los TXIDs fueran menos fiables). Ese fue el motivo principal de la actualización Segregated Witness.

Hazlo tú mismo

Puedes comprobar que los datos producen los TXID correctos hasheando los mismos datos con HASH256 directamente:

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

Después, no olvides invertir el orden de los bytes:

Invertir Bytes

Invierte el orden de los bytes de un valor hexadecimal (útil para convertir entre big-endian y little-endian).

0 bytes 0 bytes
Bytes
Invertidos

Uso

¿Cómo se usan los TXID en Bitcoin?

  1. Buscar transacciones. Usas TXID para buscar transacciones específicas en un explorador o en tu nodo local.
  2. Gastar salidas. Al gastar la salida de una transacción anterior, la referencias por su TXID (junto con el VOUT) en la entrada.
  3. Raíz de Merkle. Los TXID de todas las transacciones de un bloque se hashean juntos para crear la raíz de Merkle en la cabecera del bloque.

TXID Duplicados

¿Dos TXID pueden ser iguales?

Los TXID son únicos para cada transacción. Sin embargo, en la práctica hay dos ejemplos de TXID duplicados que aparecen en la blockchain:

Técnicamente, es la misma transacción en cada caso, porque ambas tienen los mismos datos subyacentes. No es que dos transacciones completamente distintas acabaran con el mismo TXID (una colisión de hash) — es la misma transacción apareciendo en más de un bloque.

Esto solo ocurrió porque son transacciones coinbase. Los campos TXID y VOUT de la entrada de una coinbase son fijos, en lugar de dinámicos como en todas las demás transacciones. Así que la entrada no está obligada a ser única, y, si mantienes la salida exactamente igual también (usando el mismo script de bloqueo), acabas con una transacción idéntica — y, por tanto, un TXID idéntico.

Las Correcciones

Estas correcciones hacen imposible crear transacciones coinbase duplicadas hoy. Pero fue demasiado tarde para las dos duplicadas anteriores: como consecuencia, solo la copia más reciente de cada transacción puede tener su salida gastada — las salidas (50 BTC) de las duplicadas más antiguas quedaron inaccesibles y, por tanto, "perdidas" para siempre.

Es importante estar al tanto de estos TXID duplicados si almacenas transacciones en una base de datos: al insertar una fila esperando que todo TXID sea inédito, estos dos casos pueden pillarte por sorpresa.