Aller au contenu
buybitcoinsmart

Glossaire / Transactions et frais

UTXO

Aussi appelé sortie de transaction non dépensée.

Qu'est-ce qu'un UTXO ?
Un UTXO est un morceau de bitcoin non dépensé qui se trouve à une adresse, créé en entier par une transaction antérieure et dépensable uniquement en totalité, jamais en partie.

Bitcoin n'a ni comptes ni soldes. Chaque nœud suit à la place un ensemble de sorties non dépensées tenu à jour, et le solde de votre portefeuille n'est que la somme de celles dont il détient les clés. Dépenser détruit les pièces choisies et en crée de nouvelles, ce qui explique pourquoi déplacer 100 000 satoshis peut coûter plus cher que d'en déplacer 10 000 000.

Comment cela fonctionne

Le registre est une collection de pièces, pas un tableau de totaux de comptes. Chaque sortie enregistre deux choses : un montant en satoshis, stocké sous forme d'un nombre de huit octets, et un script de verrouillage indiquant ce qu'il faut présenter pour la déverrouiller. Tant que rien ne la dépense, cette sortie reste dans l'ensemble non dépensé, que chaque nœud complet détient et met à jour bloc par bloc.

Une dépense est une destruction suivie d'une création. Votre portefeuille choisit des sorties entières comme entrées, prouve qu'il peut les déverrouiller et écrit de nouvelles sorties. Rien n'est soustrait sur place, donc payer 0,3 BTC à partir d'une pièce de 1 BTC signifie créer une pièce de 0,3 pour le bénéficiaire et une pièce de monnaie rendue d'environ 0,7 pour vous. La pièce de départ disparaît définitivement de l'ensemble, et deux entrées remplacent celle qui existait.

Bitcoin Core conserve l'ensemble complet dans une base de données LevelDB appelée chainstate et en met une partie en cache en mémoire, avec -dbcache par défaut à 1 024 MiB, ou 450 sur les machines disposant de moins de 4 GiB de RAM. C'est cet ensemble, et non l'archive des blocs, qu'un nœud consulte pour répondre à la seule question qui compte à l'arrivée d'un paiement : cette entrée pointe-t-elle vers quelque chose qui existe encore ? Un nœud élagué peut se débarrasser de centaines de gigaoctets d'anciens blocs et valider parfaitement, car l'ensemble non dépensé constitue l'état.

Deux curiosités se trouvent aux marges. Les 50 BTC payés au coinbase du bloc de genèse le 3 janvier 2009 n'ont jamais été écrits dans la base de données, de sorte qu'ils ne pourront jamais être dépensés. Et en 2010, avant l'application du BIP30, deux transactions coinbase ont dupliqué des transactions antérieures et les ont écrasées, effaçant 100 BTC de l'ensemble ; la règle interdisant les identifiants de transaction en double existe à cause de ces blocs.

Les pièces fraîchement minées arrivent elles aussi verrouillées. Une sortie coinbase ne peut pas être dépensée pendant 100 blocs, soit environ 16 heures, ce qui est la protection du protocole contre les réorganisations de chaîne courtes.

Pourquoi cela compte quand vous achetez du bitcoin

Chaque retrait depuis une plateforme d'échange crée exactement une pièce dans votre portefeuille, de sorte que la forme de vos avoirs dépend de la fréquence à laquelle vous appuyez sur ce bouton. Un achat hebdomadaire retiré chaque semaine vous laisse 52 pièces après un an ; le même achat retiré chaque trimestre en laisse quatre. Swan et River structurent tous deux les achats récurrents autour de ce point, en déclenchant les retraits à partir d'un seuil plutôt qu'à chaque ordre, et la raison est arithmétique : chacune de ces pièces coûtera plus tard environ 68 octets virtuels d'espace de bloc à dépenser.

La deuxième conséquence est la provenance. Une pièce n'est pas des espèces anonymes. Elle porte l'historique de la transaction qui l'a créée, et un retrait depuis n'importe quelle plateforme vérifiant l'identité, ce qui couvre presque toutes les plateformes d'échange examinées ici, produit une pièce documentée comme vôtre dans une base de données de conformité. Les achats via Relai, qui livre directement dans votre propre portefeuille, arrivent avec la même traçabilité. Garder ces pièces séparées de celles acquises ailleurs n'est possible que parce qu'il s'agit au départ d'objets distincts.

Troisièmement, restaurer un portefeuille ne restaure pas les pièces. Une phrase de récupération régénère les clés ; le logiciel doit ensuite chercher dans la chaîne les sorties que ces clés peuvent déverrouiller. Utilisez un chemin de dérivation inhabituel, ou restaurez dans un logiciel qui ne vérifie pas votre type d'adresse, et les pièces restent en sécurité dans l'ensemble non dépensé tandis que votre solde affiche zéro. Conserver un descripteur de sortie à côté de vos mots de récupération est ce qui évite cet après-midi de panique.

Suivre un achat de 0,02 BTC à travers l'ensemble

Achetez 0,02 BTC sur Kraken et retirez ce montant. La plateforme d'échange regroupe votre paiement avec ceux d'autres clients, et une sortie de ce lot, d'une valeur de 2 000 000 satoshis, est verrouillée sur votre adresse. Votre portefeuille détient désormais une seule pièce.

Deux mois plus tard, vous payez quelqu'un 500 000 satoshis alors que le tarif pour le prochain bloc est de 5 sat/vB. Dépenser une entrée SegWit native et créer deux sorties prend environ 141 octets virtuels, donc les frais s'élèvent à 705 satoshis. Trois choses se produisent en même temps : la pièce de 2 000 000 satoshis quitte l'ensemble non dépensé, une pièce de 500 000 satoshis apparaît pour le destinataire, et une pièce de monnaie rendue de 1 499 295 satoshis apparaît à une nouvelle adresse que votre portefeuille contrôle.

Votre solde est passé de 2 000 000 à 1 499 295 satoshis. L'ensemble global a augmenté d'une entrée, ce qui est le coût silencieux de chaque paiement et la raison pour laquelle les nœuds ont besoin d'une base de données plutôt que d'un tableur.

UTXO contre sortie de transaction

Chaque UTXO est une sortie de transaction ; la plupart des sorties de transaction ont cessé d'être des UTXO depuis longtemps. Une sortie est une ligne d'historique permanente, encore lisible dans le bloc qui l'a portée une décennie plus tard. Un UTXO est un droit sur le présent. Dès que quelqu'un dépense une sortie, elle quitte l'ensemble non dépensé tout en restant dans la chaîne pour toujours, et c'est cet écart qui permet à un nœud de jeter les anciens blocs mais jamais l'état courant.

UTXO contre poussière

La poussière est un UTXO avec un problème économique, pas un type d'objet différent. L'appartenance à l'ensemble non dépensé ne dit rien sur l'intérêt de déplacer une pièce. Une sortie de 600 satoshis est exactement aussi valide qu'une sortie de 6 BTC, mais à 30 sat/vB l'entrée qui la dépense coûte environ 2 040 satoshis, plus de trois fois ce qu'elle contient. C'est pourquoi un portefeuille peut afficher un solde que vous ne pouvez pas dépenser entièrement.

À ne pas confondre avec

Questions fréquentes

Pourquoi mon portefeuille peut-il afficher un solde qu'il refuse de me laisser envoyer en totalité ?

Parce que le solde est un ensemble de pièces distinctes, et envoyer la totalité de ces pièces signifie payer pour chaque entrée. Si certaines pièces sont assez petites pour que les frais nécessaires pour les dépenser dépassent leur valeur, le portefeuille les laisse de côté plutôt que de perdre de l'argent dans l'opération.

Un UTXO est-il la même chose qu'une adresse ?

Non. Une adresse est un verrou, et une même adresse peut contenir de nombreuses pièces ou aucune. Un UTXO est une pièce précise qui se trouve derrière un verrou, identifiée par la transaction qui l'a créée et par sa position dans cette transaction.

De nombreuses petites pièces me coûtent-elles réellement de l'argent ?

Oui, au moment de la dépense. Chaque entrée native SegWit ajoute environ 68 octets virtuels, donc un portefeuille qui détient trente miettes paie pour trente entrées lorsqu'il les dépense enfin, et cette facture tombe au taux de frais en vigueur à ce moment-là.

À lire ensuite

Termes associés

Plus de termes : Transactions et frais

Lire cette page en anglais