Coin Selection désigne la façon dont un portefeuille choisit les fonds servant à construire une transaction Bitcoin. Le solde n’est pas une somme continue : il rassemble des sorties distinctes de transactions précédentes, encore non dépensées, appelées UTXO. Le portefeuille doit en sélectionner assez pour couvrir le paiement et ses frais. Il le fait généralement automatiquement ; la sélection manuelle s’appelle Coin Control. Le réseau vérifie la validité de la transaction obtenue, mais n’impose pas la même méthode de sélection à tous les portefeuilles.
Anna souhaite payer 60000 sat. Son portefeuille prépare le paiement : c’est une application ou un appareil qui permet de recevoir et d’envoyer des bitcoins. L’abréviation sat signifie satoshi, la plus petite unité dans laquelle sont inscrits les montants des transactions Bitcoin. Elle dispose d’un UTXO de 100000 sat. Comme avec un billet, elle ne peut pas simplement en soustraire une partie : une entrée de la nouvelle transaction dépense cette sortie en entier. La transaction crée une sortie de 60000 sat pour le commerçant et, avec des frais de 1000 sat, une autre de 39000 sat pour Anna. Cette seconde sortie est la monnaie rendue, ou change. Ce n’est pas un remboursement ultérieur du commerçant : elle est créée dans la transaction d’Anna elle-même. Les frais correspondent à la différence entre la somme des entrées et celle de toutes les sorties. [1] [7]
Le portefeuille peut financer le même paiement avec différents UTXO. Mais davantage d’entrées signifie généralement davantage de données, donc des frais supérieurs à taux égal. Les frais ne sont pas un pourcentage du montant envoyé. Ils dépendent de la taille virtuelle de la transaction, mesurée en vB, ou octets virtuels, qui tient compte du poids différent de ses composants. Prenons un UTXO de 10000 sat dont l’entrée ajoute environ 68 vB. À 10 sat/vB, cette entrée coûte 680 sat et contribue donc à hauteur de 9320 sat au reste du paiement : c’est sa valeur effective. Les autres parties de la transaction ont encore leur propre coût. La taille réelle de l’entrée dépend des conditions de dépense inscrites dans le script et des données de signature. Un script est un court programme qui décrit les conditions de dépense. Pour un paiement courant, le portefeuille utilise une clé privée, une valeur numérique secrète, afin de créer une signature numérique : une autorisation de dépense vérifiable. [2] [3] [7]
Anna a peut-être reçu de nombreuses petites sommes. Les réunir dans une sortie plus importante lui appartenant s’appelle la consolidation. Elle pourra avoir besoin de moins d’entrées ensuite, mais cette opération coûte des frais aujourd’hui et relie publiquement les sorties utilisées. Tout regrouper automatiquement n’est donc pas un bon réflexe. Bitcoin Core compare aussi les coûts avec la waste metric : un score tenant compte de l’écart entre le coût des entrées maintenant et à un taux de frais supposé à long terme, auquel s’ajoutent le coût de création et de dépense ultérieure de la monnaie, ou l’excédent consacré aux frais. Le taux à long terme est une hypothèse de travail, pas une prévision. Ce score mesure un coût, pas la confidentialité. [2] [6]
Anna a étiqueté un paiement reçu comme salaire et un autre comme cadeau. Les dépenser ensemble donne à un observateur de la blockchain un indice de leur lien. Cela ne prouve pas que toutes les entrées appartiennent à une même personne : des transactions peuvent être construites à plusieurs. Coin Control permet de choisir des UTXO précis ; les étiquettes aident à se souvenir de leur provenance. Une étiquette est une note dans le portefeuille, pas un message inscrit dans la blockchain. BIP 329 décrit le transfert de ces notes et de l’information indiquant si le portefeuille considère une sortie comme dépensable. Il s’agit d’un réglage local du portefeuille, qui ne modifie pas les règles du réseau Bitcoin. Le format ne sélectionne pas lui-même les fonds. Un export peut révéler des liens sensibles, et même un paiement sans monnaie rendue ne garantit pas l’anonymat. [4] [6]
Tout le solde affiché n’est pas nécessairement utilisable immédiatement. Le portefeuille peut exclure volontairement certaines sorties ; d’autres attendent une confirmation ou la satisfaction de leurs conditions de dépense. La sélection doit aussi respecter les limites de taille et de poids de la transaction. Dépenser une somme non confirmée fait dépendre le nouveau paiement de la transaction précédente qui l’a créée, appelée ancêtre dans ce contexte. Confirmer toute la chaîne peut demander des frais supplémentaires. RPC, l’interface par laquelle les programmes contrôlent Bitcoin Core 29.0, propose include_unsafe dans walletcreatefundedpsbt. Cette option autorise des entrées non confirmées présentant un risque. Si la transaction initiale est remplacée de manière à supprimer la sortie nécessaire, le paiement dépendant ne peut pas être confirmé. En revanche, le simple retrait temporaire de la transaction initiale de la mémoire d’un nœud ne change pas sa validité. [3] [5]
Comment le portefeuille explore-t-il les possibilités ? Branch-and-bound, ou BnB, essaie des combinaisons d’entrées et abandonne les branches de recherche qui ne peuvent pas donner de résultat adapté. Il cherche à financer le paiement sans sortie de monnaie séparée. Une correspondance exacte n’est pas indispensable : l’intervalle admis inclut un excédent pouvant aller jusqu’au coût de création puis de dépense de la monnaie. Cet excédent devient des frais ; il ne reste pas caché dans le portefeuille. Un paiement sans monnaie rendue n’est donc pas forcément le moins coûteux. La recherche comporte un nombre limité d’essais et peut manquer une solution existante ou la meilleure combinaison possible. [2]
Bitcoin Core 29.0 compare des propositions produites par BnB, Knapsack et Single Random Draw (SRD), différentes méthodes de recherche d’un ensemble d’entrées adapté. Il ajoute CoinGrinder lorsque le taux effectif dépasse le triple du taux à long terme ; cette méthode recherche une sélection de faible poids avec une sortie de monnaie rendue. Les propositions sont comparées grâce à la waste metric expliquée plus haut. Si l’utilisateur choisit de déduire les frais des montants destinés aux bénéficiaires, BnB n’est pas utilisé. Cette description concerne cette version précise, pas une obligation pour tous les portefeuilles ni une affirmation sur la dernière version disponible. [3]
Pour un paiement courant, vous n’avez pas besoin de connaître les paramètres de programmation. Avant de signer, vous devez toutefois vérifier le destinataire, le montant, les frais totaux et votre monnaie rendue. Pour les utilisateurs avancés, walletcreatefundedpsbt dans Bitcoin Core 29.0 permet de désigner les entrées par txid, l’identifiant de la transaction initiale, et vout, l’indice de sa sortie. add_inputs détermine si le portefeuille peut ajouter d’autres entrées. Attention aux unités : fee_rate utilise sat/vB, tandis que feeRate utilise BTC/kvB, soit des bitcoins pour 1000 octets virtuels. Le résultat est un PSBT, un format permettant de transmettre une transaction préparée pour signature. Créer un PSBT n’envoie rien à lui seul et ne confirme aucun paiement. Ni la sélection manuelle ni ce format ne garantissent le bon destinataire ou la validité des entrées non confirmées. [5]
Pour une vision complète, lisez aussi UTXO, Coin Control, Change Address, Fee Rate, PSBT, Confidentialité de Bitcoin. Cette entrée est également citée par Watch-only Wallet, Change Address, Inventing Bitcoin.