Bitcoin repose en partie sur une base de données qui enregistre toutes les transactions, connue sous le nom de « Blockchain ». Ce terme est désormais célèbre, mais savez-vous qu'il existe une autre base de données tout aussi importante pour le fonctionnement des nœuds Bitcoin ? Cet élément beaucoup moins connu, c’est l'UTXO set.
Dans cet article, je vous propose de découvrir ce qu'est l'UTXO set et son rôle dans le fonctionnement de Bitcoin. Nous étudierons également pourquoi son évolution pourrait représenter une menace pour la stabilité de Bitcoin à moyen terme, ainsi que les solutions envisagées pour résoudre ce problème.
Qu’est-ce qu'un UTXO sur Bitcoin ?
Un UTXO (Unspent Transaction Output) est une sortie de transaction Bitcoin qui n'a pas encore été dépensée. Concrètement, il s'agit de morceaux de bitcoins plus ou moins grands qu'un utilisateur détient et qui sont disponibles pour être utilisés dans une future transaction.
Chaque UTXO représente un certain montant de bitcoins et est sécurisé par un script définissant les conditions sous lesquelles il peut être dépensé. Ces conditions requièrent généralement une signature obtenue grâce à une clé privée que possède le détenteur légitime.
Pour simplifier, l'UTXO pour Bitcoin est ce que le billet est à l'euro. Le bitcoin est l'unité de compte utilisée sur Bitcoin, et l'UTXO est le support qui permet de représenter ces unités de compte.
Comment fonctionne une transaction Bitcoin ?
Une transaction consiste à transférer des bitcoins d’un ensemble d’entrées (inputs) vers un ensemble de sorties (outputs).
Les entrées d'une transaction correspondent à des UTXOs issus de transactions précédentes, qui sont consommés lors de cette nouvelle transaction. Un script de signature (scriptSig) est utilisé pour débloquer chaque UTXO en entrées en satisfaisant les conditions de dépense définies lors de la création de l’UTXO.
En contrepartie, la transaction crée de nouveaux UTXOs en sorties. Chaque sortie associe un montant de bitcoins à une nouvelle condition de dépense (scriptPubKey), souvent à l’aide d’une adresse de réception. Ces UTXOs nouvellement créés seront alors disponibles pour être utilisés comme entrées dans de futures transactions.
C’est quoi l’UTXO set ?
L'UTXO set représente l'ensemble des UTXOs existants à un moment donné sur Bitcoin. Autrement dit, il s'agit d'une liste exhaustive de tous les morceaux de bitcoins disponibles pour être dépensés. Ainsi, si l’on additionne les montants de tous les UTXOs présents dans l'UTXO set, on obtient la masse monétaire totale en circulation sur Bitcoin.
Chaque nœud du réseau maintient en local son propre UTXO set complet, en parallèle de la Blockchain. Cet UTXO set est constamment actualisé au fur et à mesure que de nouvelles transactions sont intégrées dans des blocs.
Lorsqu'une nouvelle transaction est envoyée par un utilisateur sur le réseau, chaque nœud vérifie que les UTXOs utilisés en entrées sont bien présents dans son UTXO set. Cela garantit que les bitcoins dépensés existent réellement et n'ont pas déjà été consommés dans une autre transaction. Si l'UTXO est légitime, la transaction est acceptée, sinon elle est rejetée pour éviter la double dépense.
Une fois la transaction validée, le nœud actualise son UTXO set : il supprime les UTXOs utilisés comme entrées et ajoute les nouveaux UTXOs créés en sorties. Ainsi, l’UTXO set est constamment réactualisé pour refléter les morceaux de bitcoins disponibles.
Sur le client majoritaire Bitcoin Core, l’UTXO set est conservé dans le dossier “chainstate”.
➤ En savoir plus sur le fonctionnement d’un nœud Bitcoin.
Pourquoi l’évolution de l’UTXO set pourrait devenir un problème ?
L’UTXO set croît de façon continue et rapide sur Bitcoin. À cause de nombreux facteurs externes et internes au système, le ratio moyen d’UTXOs créés par UTXO consommé est très déséquilibré. Cette expansion est due, en partie, à la hausse du prix du bitcoin, qui encourage l'utilisation de plus petits UTXOs, augmentant ainsi leur nombre total. L'adoption croissante entraîne également un besoin accru en UTXOs.
Il y a aussi la structure classique des transactions de paiement sur Bitcoin, typiquement une entrée pour deux sorties, qui crée deux UTXOs pour un seul consommé. Enfin, la CIOH (Common Input Ownership Heuristic), pose un problème en termes de confidentialité lors de la consolidation de plusieurs UTXOs, et constitue encore un obstacle supplémentaire à la réduction de leur nombre. Ainsi, l'UTXO set des nœuds est voué à une croissance naturelle et inévitable.
Ce problème est connu depuis plusieurs années par les développeurs de Bitcoin Core. La mise à jour SegWit de 2017 a d’ailleurs introduit une incitation économique à la consolidation en réduisant les frais pour les transactions qui consomment davantage d'inputs et qui créent moins d'outputs. Cependant, cette mesure n'a pas été suffisante pour endiguer le phénomène.
Le problème de cette croissance est que le maintien de l'UTXO set nécessite de plus en plus de mémoire vive (RAM). Pour que les nœuds puissent valider efficacement les transactions, une partie de l'UTXO set doit être stockée en RAM, car cela permet une vérification rapide. Ce problème affecte également le temps de synchronisation initiale (IBD), c'est-à-dire le temps nécessaire pour télécharger et valider l'intégralité de la blockchain lors du lancement d'un nouveau nœud.
Au fur et à mesure que la taille de l'UTXO set augmente, les besoins en RAM augmentent aussi. Or, l'augmentation de la capacité de la RAM des ordinateurs (loi de Moore) ne suit pas la même courbe que la croissance de l'UTXO set. Si cette tendance se poursuit, opérer un nœud Bitcoin deviendra de plus en plus coûteux en matériel.
Cette augmentation des besoins en matériel pour faire tourner un nœud pourrait affecter la décentralisation et la sécurité du réseau Bitcoin. Si le coût pour maintenir un nœud augmente, moins de personnes seront en mesure de le faire, ce qui réduira le nombre de nœuds et diminuera la distribution et la robustesse du réseau. La taille de l'UTXO set constitue donc un défi majeur pour la viabilité de Bitcoin à moyen terme.
Quelles sont les solutions face à l’augmentation de la taille de l’UTXO set ?
La solution qui semble émerger pour résoudre ce problème de l’augmentation de la taille de l’UTXO set sur Bitcoin est Utreexo.
Utreexo c’est une solution inventée par Tadge Dryja (qui est également le cocréateur du Lightning Network) pour compresser l'UTXO set en utilisant un accumulateur établi sur des arbres de Merkle. L'UTXO set classique, qui contient tous les UTXOs, requiert beaucoup d'espace de stockage. Avec Utreexo, cette contrainte est allégée, car les nœuds Bitcoin ne conservent plus l'ensemble des UTXOs, mais seulement quelques empreintes cryptographiques. Cela réduit drastiquement les besoins en RAM et en stockage.
Lorsqu'un utilisateur effectue une transaction compatible avec Utreexo, il fournit à la fois les preuves de possession des UTXOs utilisés et les chemins de Merkle associés. Le nœud vérifie ensuite ces preuves pour s'assurer que les UTXOs existent dans l'ensemble en fonction de leur empreinte cryptographique, sans avoir à stocker toutes les données.
Utreexo peut être implémenté de deux façons. La première consiste à généraliser son utilisation pour que toutes les transactions contiennent ces preuves. Cependant, cela augmenterait la taille des blocs, ce qui affecterait la bande passante et les besoins de stockage. La seconde méthode repose sur des “Bridge Nodes” : des nœuds complets qui stockent en plus l'UTXO set complet et fournissent les preuves nécessaires aux nœuds Utreexo. Utreexo serait alors une option pour les utilisateurs qui ne peuvent pas se payer un nœud complet. Dans les deux cas, il existe un compromis, que ce soit en termes de ressources requises ou de dépendance vis-à-vis des Bridge Nodes.
➤ Découvrir ce qu’est la Mempool sur un nœud Bitcoin.
Conclusion
L’UTXO set est une grande liste de tous les morceaux de bitcoins existants à un moment donné, qui est maintenue par chaque nœud. Il joue un rôle important dans le fonctionnement de Bitcoin, mais sa croissance rapide et presque naturelle va poser des défis pour l’avenir. Si la taille de l'UTXO set continue d'augmenter, le coût d’opération d'un nœud pourrait devenir prohibitif pour certains utilisateurs.
Utreexo propose une solution en réduisant les besoins en RAM grâce à l'utilisation d'accumulateurs cryptographiques. Cependant, ce protocole implique forcément des compromis, soit sur la taille des blocs ou bien en termes de dépendance vis-à-vis des Bridge Nodes. D'autres solutions émergeront peut-être à l'avenir, mais il est certain que ce sera un débat technique qui devra être abordé dans les prochaines années.