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:
f4184fc596403b9d638783cf57adfe4c75c605f6356fbc91338530e9831e9e16— La primera transacción de Bitcoin (para Hal Finney), en 2009.a1075db55d416d3ca199f55b6084e2115b9345e16c5cf302fc80e9d5fbf5d48d— La transacción de la pizza por 10.000 BTC, en 2010.
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).
- Para transacciones legadas, haces HASH256 de todos los datos de la transacción.
- Para transacciones segwit, haces HASH256 de todos los datos excepto los campos marker, flag y witness.
Así que, en las transacciones segwit, las firmas ya no forman parte del TXID.
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:
Después, no olvides invertir el orden de los bytes:
Uso
¿Cómo se usan los TXID en Bitcoin?
- Buscar transacciones. Usas TXID para buscar transacciones específicas en un explorador o en tu nodo local.
- Gastar salidas. Al gastar la salida de una transacción anterior, la referencias por su TXID (junto con el VOUT) en la entrada.
- 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:
e3bf3d07d4b0375638d5f1db5255fe07ba2c4cb067cd81b84ee974b6585fb468— Bloques 91.722 y 91.880.d5d27987d2a3dfc724e359870c6644b40e497bdc0589a033220fe15429d88599— Bloques 91.812 y 91.842.
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
- BIP 30 (22 de febrero de 2012): introdujo una regla que impide que los bloques contengan un TXID que ya exista (aunque esto solo verifica los TXID dentro del conjunto UTXO).
- BIP 34 (06 de julio de 2012): pasó a exigir que las transacciones coinbase incluyan la altura del bloque actual en sus datos, lo que hace que los datos de toda coinbase sean siempre únicos.
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.