Rapport de terrain : consolidation de 4 millions d’UTXO chez Xapo
Comme indiqué dans le bulletin #3, les faibles frais de transaction de ces derniers mois offrent une excellente occasion de consolider les UTXO ! La consolidation fait partie des différentes mesures prises par Xapo pour se préparer à une nouvelle flambée des frais, comme celle des derniers mois de 2017.

Évolution du nombre total d’UTXO Bitcoin, de janvier à juillet 2018,
source : Statoshi
Le principe de la consolidation des UTXO est le suivant : lorsque le montant moyen de vos paiements sortants dépasse celui de vos paiements entrants (ou qu’ils sont égaux, mais que vous regroupez vos paiements sortants), vous devez souvent combiner de nombreux UTXO pour financer un paiement. Cela augmente la taille de vos transactions et donc les frais que vous payez. En consolidant vos UTXO à l’avance, vous pouvez regrouper les entrées en amont et mieux choisir le moment où vous engagez la majeure partie de ces frais. Si vous le faites lorsque les frais sont bas, vous pouvez les réduire considérablement.
Par exemple, dépenser une douzaine d’entrées multisig 2-sur-3 à 100 s/B (satoshis par octet) coûterait environ 360 000 satoshis. Si vous consolidez d’abord ces entrées à 2 s/B, puis dépensez l’unique entrée ainsi obtenue à 100 s/B, les frais cumulés des deux transactions ne sont que d’environ 41 000 satoshis, soit 87 % de moins. Et si les frais n’augmentent pas, le risque reste limité : s’ils restent à 2 s/B, vous dépenserez 7 900 satoshis pour les deux transactions avec consolidation, contre 7 200 satoshis pour une seule transaction sans consolidation.
La consolidation permet aussi de changer les adresses utilisées pour vos UTXO, par exemple pour renouveler les clés, passer au multisig ou adopter des adresses segwit ou bech32. Réduire le nombre d’UTXO facilite également l’exploitation d’un nœud complet, ce qui améliore légèrement la décentralisation et la sécurité globale de Bitcoin, un avantage toujours appréciable.
Bien entendu, il faut éviter que vos transactions de consolidation remplissent la chaîne de blocs et provoquent immédiatement une hausse des frais ! Deux indicateurs permettent de surveiller ce risque : le remplissage du mempool, qui fait augmenter le taux de frais minimum accepté, et l’espace inutilisé dans les blocs récents, qui indique si les mineurs accepteront davantage de transactions au taux de frais minimum. Ces deux indicateurs ont été très favorables la plupart du temps au cours des derniers mois : le mempool a régulièrement été presque vide, ce qui a permis aux transactions payant seulement 1 s/B de parvenir aux mineurs ; et de nombreux blocs n’étaient pas pleins, de sorte que les transactions de consolidation peu coûteuses étaient confirmées assez rapidement, sans créer un arriéré susceptible de faire monter les frais.
Pour réaliser la consolidation, nous avons utilisé un script qui sélectionnait des groupes de petits UTXO et créait une transaction les dépensant vers une adresse commune, à un taux de frais de 1,01 satoshi par octet. Le script injectait progressivement les transactions de consolidation dans le réseau afin de ne pas provoquer une hausse trop forte du mempool et, surtout, de limiter le risque que nos transactions soient évincées parce que leurs frais étaient bas et que le mempool s’était rempli. Nous le déclenchions manuellement lorsque nous estimions que cela ne perturberait pas nos activités et que le réseau Bitcoin semblait globalement peu chargé.
Dans l’ensemble, cette approche a plutôt bien fonctionné : nous avons réduit notre nombre d’UTXO d’environ 4 millions cette année. Hormis quelques utilisateurs de Reddit inquiets, le coût pour l’ensemble du réseau a été minime, tout comme le coût pour nous.