WTXID
Le WTXID est l'identifiant complet d'une transaction SegWit, incluant les données witness. Différent du TXID pour les transactions SegWit. Permet d'éviter la malléabilité historique. Utilisé pour l'arbre de Merkle de la coinbase.
Définition
Le WTXID (Witness Transaction ID) est un identifiant de 32 bytes calculé sur l'intégralité d'une transaction Bitcoin, y compris les données witness (signatures, scripts révélés). Il s'oppose au TXID classique, qui exclut volontairement la zone witness depuis l'introduction de SegWit en 2017. Pour une transaction pre-SegWit (legacy), WTXID == TXID. Pour une transaction SegWit, ils diffèrent.
Pourquoi cette distinction
Avant SegWit, les transactions souffraient du problème de malléabilité : un attaquant pouvait modifier la signature (sans en changer la validité cryptographique) et donc faire muter le TXID avant confirmation. Cela cassait les protocoles construits sur Bitcoin, notamment Lightning. SegWit a déplacé les signatures hors du domaine de hashing du TXID. Conséquence : le TXID est désormais figé dès la création, ce qui rend Lightning possible. Mais il fallait quand même un identifiant qui couvre TOUT, pour la cohérence des blocs et le gossip réseau : c'est le WTXID.
Calcul
| Identifiant | Inclut | |---|---| | TXID | Version, inputs (sans witness), outputs, locktime | | WTXID | Version, marker, flag, inputs, witness, outputs, locktime |
Les deux sont des doubles SHA-256 sérialisés.
Usage dans la blockchain
Chaque bloc contient deux arbres de Merkle :
- Arbre TXID classique, dont la racine est dans le block header (compatible legacy).
- Arbre WTXID, dont la racine est inscrite dans une sortie de la coinbase sous forme de commitment (
OP_RETURNavec un préfixe spécifique). Ce commitment permet aux clients SegWit de vérifier toutes les witness sans avoir besoin de hard fork.
La coinbase a un WTXID spécial fixé à 0x00...00 par convention, car au moment de calculer le commitment, on ne peut pas se référencer soi-même.
Cas d'usage
- wtxid relay (BIP-339, déployé en 2021 dans Bitcoin Core 0.21) : les nœuds annoncent et déduplicent les transactions par WTXID plutôt que TXID, réduisant le bandwidth et évitant certaines attaques de pinning.
- Détection de pénalité Lightning plus fiable.
À retenir
Le WTXID est le hash "vrai et complet" d'une transaction. Le TXID, lui, est volontairement amputé pour la stabilité. Les deux coexistent depuis SegWit, et chacun a son usage : TXID pour les références externes stables, WTXID pour la cohérence réseau et la vérification cryptographique exhaustive.
Termes lies
- TXIDLe TXID (Transaction Identifier) est le hash double SHA-256 d'une transaction Bitcoin sans ses witness data. Il identifie de manière unique la transaction. Avec SegWit, il est complété par le wtxid qui inclut les witness. Utilisé partout pour référencer une transaction.
- SegWit (Segregated Witness)SegWit, activé en août 2017, sépare la donnée witness du reste de la transaction. Cela résout la malléabilité, augmente la capacité effective des blocs et active Lightning. Soft fork emblématique issu de la Blocksize War. Existe en V0 (P2WPKH/P2WSH) et V1 (Taproot).
- Malléabilité de transactionLa malléabilité est la capacité de modifier le TXID d'une transaction sans la rendre invalide. Source de bugs historiques (Mt. Gox). Résolue par SegWit qui sort les witness du calcul du TXID. Permet en retour Lightning et autres protocoles dépendants du TXID.
Glossaire inspire du dictionnaire de Loic Morel sur Pandul.fr.