Glossaire / Transactions et frais
Outpoint
- Qu'est-ce qu'un outpoint ?
- Un outpoint est le pointeur de 36 octets qui identifie exactement une sortie de transaction, en combinant l'identifiant de 32 octets de la transaction qui l'a créée et l'index de 4 octets de sa position.
Le bitcoin n'a pas de numéros de compte, donc chaque dépense doit indiquer précisément quel bitcoin elle dépense. Écrit pour un humain, le pointeur ressemble à un identifiant de transaction, un deux-points et un nombre, et il sert de clé primaire à toute la base de données des sorties non dépensées que maintient chaque nœud complet. Si deux transactions nomment le même outpoint, une seule peut être valide, et c'est cette règle unique qui empêche un bitcoin d'être dépensé deux fois.
Comment cela fonctionne
L'outpoint se trouve au début de chaque entrée de transaction, et c'est la première chose qu'un nœud recherche lorsqu'il vérifie si une dépense est autorisée.
Sur le réseau, il s'agit de deux champs sans séparateur : 32 octets de hachage de transaction, puis un index de 4 octets stocké en little-endian. Le hachage est écrit dans l'ordre d'octets interne, qui est l'inverse de l'ordre affiché dans un explorateur de blocs, si bien qu'une transaction brute en hexadécimal semble référencer un identifiant de transaction écrit à l'envers. Cela déroute quiconque lit de l'hexadécimal brut pour la première fois, et il s'agit uniquement d'une convention d'affichage, non d'une différence dans les données.
Les index comptent à partir de zéro. La première sortie d'une transaction est l'index 0, la deuxième est l'index 1, et un bitcoin décrit comme se terminant par :2 est la troisième sortie. Le champ fait 4 octets, donc le plafond théorique est 4 294 967 295, qu'aucune transaction réelle n'approche.
Une valeur est réservée. Une transaction coinbase, celle qui paie le mineur, a une seule entrée dont l'outpoint est 32 octets nuls avec l'index fixé à tous les uns, 0xffffffff. Cette combinaison ne pointe vers rien et signale que cette entrée crée de la valeur au lieu d'en déplacer.
L'unicité a dû être imposée par une règle plutôt que supposée. Deux transactions coinbase au contenu identique produiraient des identifiants identiques et donc des outpoints en double, ce qui s'est produit deux fois au début de l'histoire du bitcoin. Le BIP30 a interdit directement ce schéma, puis le BIP34 a exigé que chaque coinbase inclue la hauteur du bloc dans le script de son entrée, garantissant ainsi des contenus différents. Le BIP34 est devenu obligatoire au bloc 227 931 en mars 2013.
Où le voir
L'outpoint est l'identifiant que vous manipulez dès que vous parlez précisément d'un bitcoin donné plutôt que d'un solde.
Les écrans de contrôle des bitcoins d'un portefeuille listent les avoirs sous forme d'identifiant de transaction et d'index. L'interface RPC de Bitcoin Core prend les deux champs comme une paire : listunspent les renvoie, gettxout en recherche un, et createrawtransaction les attend. Lightning utilise l'outpoint de la transaction de financement comme nom permanent d'un canal, ce qui explique pourquoi les identifiants de canal dans les logiciels de nœud ressemblent à un hachage suivi d'un petit nombre.
C'est aussi l'élément à citer en cas de litige. Une adresse peut avoir été payée des dizaines de fois et une transaction peut avoir des dizaines de sorties, mais un outpoint nomme un paiement d'un montant à un moment, sans ambiguïté à discuter. Si une plateforme d'échange vous demande de prouver un dépôt précis, c'est ce niveau de précision qui met fin à la discussion.
Outpoint vs index de sortie
L'index de sortie est un champ à l'intérieur d'un outpoint, et non un nom plus court pour celui-ci. À lui seul, un index ne porte aucune information, car des dizaines de millions de transactions ont une sortie à l'index 0 et ce nombre ne dit rien sur celle qui est visée. La confusion vient des interfaces des explorateurs de blocs, qui étiquettent l'index « vout » et l'affichent bien en évidence, si bien que les gens finissent par appeler tout le pointeur le vout. Gardez-les séparés lorsque vous notez les choses : l'identifiant de transaction dit de quelle transaction il s'agit, et l'index dit quelle sortie à l'intérieur de celle-ci, et c'est seulement les deux ensemble qui identifient un bitcoin.