Change avoidance
Le change avoidance consiste à éviter de produire un output de change quand c'est possible. Permet une meilleure confidentialité (heuristique de change cassée). Implémenté par Branch-and-Bound dans Bitcoin Core. Fonctionne uniquement quand un input correspond exactement.
L'idée
Le change avoidance est une technique de sélection d'UTXO qui consiste à choisir un sous-ensemble dont la somme correspond exactement (ou presque) au montant à payer plus les frais. Résultat : la transaction n'a qu'un seul output, celui du destinataire, sans change. Aucun observateur ne peut alors attribuer un output de change au wallet émetteur — l'heuristique principale des chaînalystes est neutralisée.
Mise en œuvre concrète
L'algorithme Branch-and-Bound intégré à Bitcoin Core 0.17 (2018) cherche un sous-ensemble d'UTXO tel que :
montant_cible ≤ somme(UTXO) ≤ montant_cible + cost_of_change
Le paramètre cost_of_change représente le coût marginal d'ajouter un output de change. À un fee rate de 50 sat/vB, ce coût atteint plusieurs milliers de sats : il devient économique de payer un peu plus en frais d'input pour éviter un output supplémentaire.
| Fee rate | cost_of_change (P2WPKH) | Largeur de la fenêtre | |----------|--------------------------|----------------------| | 10 sat/vB | ~310 sats | Étroite | | 50 sat/vB | ~1 550 sats | Modérée | | 200 sat/vB | ~6 200 sats | Large |
Plus les frais sont élevés, plus le change avoidance devient probable.
Bénéfices
- Confidentialité : l'heuristique du change est cassée
- Frais : pas d'output supplémentaire à payer
- UTXO set hygiene : pas de petit output « poussière » qui traîne
- Simplicité : transactions plus petites, parfois 70 octets de moins
C'est l'un des rares cas où optimisation des frais et confidentialité s'alignent.
Limites
Le change avoidance ne fonctionne que si l'algorithme trouve une combinaison qui tombe pile dans la fenêtre. Cela dépend du nombre et de la granularité des UTXO :
- Peu d'UTXO → peu de combinaisons, succès rare
- UTXO toutes de taille similaire → idem
- Beaucoup d'UTXO de tailles variées → succès fréquent
D'où l'intérêt, pour qui veut maximiser le change avoidance, d'accumuler des UTXO de tailles bien réparties (et non d'écraser systématiquement par consolidation).
Risques contre-intuitifs
Un change avoidance trop systématique peut également servir de signal : « cette transaction n'a pas de change » est en soi une caractéristique. Sur des wallets exotiques, cela peut pointer vers un usage privacy-conscious et créer un fingerprint. La meilleure stratégie reste donc de mélanger styles de transactions, et de combiner avec d'autres techniques (Payjoin, CoinJoin, lightning).
À retenir
Le change avoidance est une optimisation puissante, gratuite voire bénéfique en frais, et largement intégrée dans Bitcoin Core et Sparrow. C'est l'un des premiers gestes de privacy on-chain que tout utilisateur sérieux devrait connaître.
Termes lies
- ChangeLe change est l'output qui retourne à l'expéditeur le surplus d'une transaction. Bitcoin n'a pas de division des inputs : si on dépense une UTXO de 1 BTC pour 0,3 BTC, on récupère 0,7 BTC en change (- frais). C'est un point clé de la confidentialité car il révèle souvent le wallet payeur.
- Branch-and-BoundBranch-and-Bound est l'algorithme de sélection de pièces par défaut de Bitcoin Core depuis 0.17. Il cherche un sous-ensemble d'UTXO sans change. Améliore confidentialité et coût. Fallback Knapsack si pas de solution exacte.
- Sélection des piècesLa sélection des pièces (coin selection) est l'algorithme qui choisit les UTXO à dépenser. Branch-and-Bound, Knapsack ou Single-random-draw sont les principaux. Influence frais et confidentialité. À paramétrer selon les priorités utilisateur.
Glossaire inspire du dictionnaire de Loic Morel sur Pandul.fr.