Aller au contenu
buybitcoinsmart

Glossaire / Transactions et frais

Identifiant de transaction

Aussi appelé Transaction ID, Txid, Hash de transaction.

Qu'est-ce qu'un identifiant de transaction ?
Un identifiant de transaction est l'empreinte hexadécimale de 64 caractères d'une transaction bitcoin, produite en la hachant deux fois avec SHA-256, et c'est ainsi que tout le monde désigne ce paiement.

Personne n'attribue l'identifiant : il découle du contenu même de la transaction, si bien que modifier un seul satoshi en produit un complètement différent. La valeur fait 32 octets, s'affiche sous forme de 64 caractères hexadécimaux et est présentée par tous les explorateurs dans l'ordre inverse des octets. C'est la seule chaîne qui vous permet, à vous et au service d'assistance d'une plateforme d'échange, de regarder le même paiement.

Comment cela fonctionne

Le calcul d'un identifiant de transaction se fait en deux étapes et sans aucun secret. La transaction est sérialisée sous sa forme brute en octets, puis passée deux fois dans SHA-256, et les 32 octets obtenus constituent l'identifiant. Quiconque dispose des octets bruts obtient le même résultat, et c'est pourquoi un identifiant ne peut être réservé, demandé ni falsifié.

L'ordre d'affichage est la première chose qui déroute. Le protocole Bitcoin calcule les hachages dans un sens et les affiche dans l'autre, si bien que les octets visibles sur un explorateur sont l'inverse des octets du fichier. Rien ne cloche lorsqu'un outil de développement vous montre une chaîne qui semble à l'envers.

SegWit a scindé l'identifiant en deux. Depuis l'activation du BIP141 au bloc 481 824, le 24 août 2017, l'identifiant de transaction est calculé sur la transaction sans ses données témoins, tandis qu'un second identifiant, le wtxid, couvre tout, signatures comprises. La raison est la malléabilité : les signatures pouvaient auparavant être réencodées par quiconque relayait la transaction, ce qui changeait l'identifiant tout en laissant l'argent aller exactement là où il allait. Mt. Gox a imputé à la malléabilité ses bitcoins manquants en février 2014, mais une étude de Decker et Wattenhofer a mesuré les attaques réelles et a conclu que seuls 386 BTC pouvaient être attribués à la malléabilité avant que la plateforme n'arrête les retraits, contre les centaines de milliers de bitcoins qu'elle avait perdus.

L'identifiant est aussi ce à quoi un bloc s'engage. Chaque identifiant de transaction d'un bloc est haché dans la racine de Merkle stockée dans l'en-tête du bloc, si bien qu'un mineur ne peut pas échanger discrètement un paiement contre un autre après coup.

Pourquoi cela compte quand vous achetez du bitcoin

L'identifiant de transaction est la seule preuve qui survit à l'écart entre deux entreprises. Lorsqu'un retrait depuis Coinbase ou Bitstamp n'est pas arrivé, le ticket d'assistance ne mène nulle part tant que vous ne le fournissez pas, et une fois que vous l'avez, vous n'avez plus besoin du ticket : collez la chaîne dans n'importe quel explorateur de blocs et vous pouvez voir vous-même les sorties, les frais et le nombre de confirmations. C'est aussi le moyen le plus rapide de savoir si le retard vient de la file d'attente de la plateforme d'échange ou du réseau.

Le cas inverse est le dangereux. Un identifiant de transaction prouve qu'un paiement existe, pas qu'il vous a été envoyé, pas qu'il sera confirmé, et pas que l'expéditeur est bien celui qu'il prétend être. Les vendeurs sur les places de marché pair-à-pair se voient couramment présenter une capture d'écran d'une page d'explorateur et remettent la marchandise avant de vérifier si une sortie de cette transaction paie une adresse qu'ils contrôlent. Vérifiez l'adresse, vérifiez le montant et vérifiez les confirmations, dans cet ordre.

Les identifiants non confirmés peuvent aussi disparaître. Le remplacement intégral par les frais (full replace-by-fee) est la politique de relais par défaut dans les versions modernes de Bitcoin Core, si bien qu'un expéditeur peut diffuser une version concurrente du même paiement, et cette version a un identifiant différent. Bitcoin Core écarte aussi les transactions qu'il garde depuis plus de 336 heures, ou 14 jours. Un explorateur qui affiche "transaction not found" signifie généralement que l'un de ces deux cas s'est produit, pas que vos bitcoins ont disparu.

Lire l'identifiant de transaction du bloc de genèse

L'identifiant de transaction le plus ancien du bitcoin est 4a5e1e4baab89f3a32518a88c31bc87f618f76673e2cc77ab2127b7afdeda33b, l'unique transaction du bloc miné le 3 janvier 2009. Comme ce bloc ne contient qu'une seule transaction et rien d'autre, la racine de Merkle du bloc est la chaîne identique, ce qui illustre le plus clairement le fonctionnement de cet engagement.

Cette transaction paie 50 BTC à une clé publique, et Bitcoin Core n'a jamais ajouté la sortie à son ensemble de sorties non dépensées, si bien que l'identifiant désigne de l'argent qui ne pourra jamais bouger. Elle porte aussi, dans son champ coinbase, le titre de journal "The Times 03/Jan/2009 Chancellor on brink of second bailout for banks".

La dépendance va dans un seul sens. Changez une seule lettre de ce titre et l'identifiant de transaction comme la racine de Merkle deviennent méconnaissables, et c'est pourquoi un identifiant est une empreinte plutôt qu'une étiquette. Vous ne pouvez pas en choisir un, et vous ne pouvez pas modifier une transaction sans en produire un nouveau.

Identifiant de transaction vs adresse bitcoin

Une adresse est une destination et un identifiant de transaction est l'enregistrement d'un événement. Les adresses peuvent être distribuées à l'avance et réutilisées ; les identifiants n'existent qu'après la construction d'une transaction. Envoyer des bitcoins à un identifiant de transaction est impossible, et les portefeuilles rejettent la tentative parce que la chaîne échoue à la validation de la somme de contrôle d'une adresse. Les usurpateurs de services d'assistance exploitent la confusion en demandant « votre identifiant de transaction », puis en fournissant une adresse qui leur appartient.

Identifiant de transaction vs outpoint

Un identifiant de transaction désigne une transaction entière, qui peut payer 300 personnes différentes dans un seul lot d'une plateforme d'échange. Un outpoint désigne une sortie à l'intérieur de cette transaction, écrit sous la forme de l'identifiant, deux-points, puis index de la sortie. Les écrans de contrôle des pièces, les confirmations sur portefeuille matériel et les fichiers PSBT fonctionnent tous en outpoints, si bien qu'un identifiant seul ne suffit pas à dire de quelle pièce vous parlez.

À ne pas confondre avec

Questions fréquentes

Que signifie le fait qu'un identifiant de transaction soit introuvable ?

En général, que la transaction n'a jamais été confirmée et qu'elle ne se trouve plus dans aucun mempool. Bitcoin Core supprime les transactions non confirmées au bout de 14 jours, et une augmentation des frais par remplacement publie un autre identifiant, si bien que l'identifiant d'origine n'existe plus nulle part.

Un identifiant de transaction prouve-t-il que quelqu'un m'a payé ?

Non. Il prouve qu'une transaction existe. Ouvrez-la dans un explorateur de blocs et vérifiez qu'une sortie paie une adresse de votre propre portefeuille, que le montant correspond et qu'elle compte des confirmations. Une capture d'écran ne prouve absolument rien.

Un identifiant de transaction peut-il changer après sa diffusion ?

Pas pour une transaction confirmée. Avant SegWit, des tiers pouvaient réencoder les signatures et décaler l'identifiant d'un paiement non confirmé, ce qui constitue le problème de malléabilité que le BIP141 a corrigé pour les entrées segwit en août 2017.

À lire ensuite

Termes associés

Plus de termes : Transactions et frais

Lire cette page en anglais