Leçons 1/4 · 20 min
UTXO ou comptes : un même transfert
Une question d'espèces
Pensez à votre porte-monnaie. Soit vous avez des billets et des pièces : pour payer 60, vous donnez un billet de 50 et un de 20, et on vous rend 10 de monnaie. Soit vous avez un solde sur un compte de monnaie mobile : pour payer 60, le solde baisse de 60. Les blockchains ont fait les deux choix.
- Modèle UTXO (unspent transaction output, « sortie de transaction non dépensée »). L'état est un ensemble de « sorties » indivisibles, chacune verrouillée pour un propriétaire. Bitcoin fonctionne ainsi.
- Modèle à comptes. L'état est une table : pour chaque compte, un solde et un compteur (le nonce, leçon 2). Ethereum, les chaînes bâties avec le Cosmos SDK et les chaînes Substrate/Polkadot fonctionnent ainsi.
Le même transfert dans les deux modèles (chiffres fictifs)
Awa possède 80 unités et veut en payer 60 à Bineta, avec 2 unités de frais.
En UTXO. Awa possède deux sorties : une de 50 et une de 30. Aucune ne suffit seule, donc la transaction les consomme toutes les deux comme entrées (50 + 30 = 80) et crée de nouvelles sorties :
| Montant | |
|---|---|
| Entrées (sorties consommées) | 50 + 30 = 80 |
| Sortie 1 : à Bineta | 60 |
| Sortie 2 : monnaie rendue à Awa | 18 |
| Frais (entrées − sorties : 80 − 78) | 2 |
Une sortie ne se dépense jamais en partie : elle est consommée en entier, et la monnaie est une nouvelle sortie que l'on se renvoie. Les frais ne sont écrits nulle part : c'est la différence entre entrées et sorties. Une fois consommées, les sorties de 50 et 30 disparaissent de l'ensemble.
En comptes. Le solde d'Awa passe de 80 à 80 − 60 − 2 = 18. Celui de Bineta augmente de 60. Dans cet exemple simplifié, les 2 de frais vont au proposant. Le nonce d'Awa augmente de 1.
Comment chacun empêche la double dépense
- UTXO : une sortie ne peut être consommée qu'une fois. Une seconde transaction qui la consomme est invalide, car la sortie n'existe plus dans l'ensemble.
- Comptes : on vérifie que le solde suffit au moment de l'exécution, et le nonce impose un ordre strict aux transactions d'un compte (leçon 2).
Comparaison honnête
| UTXO | Comptes | |
|---|---|---|
| Ce que l'état contient | Un ensemble de sorties non dépensées | Soldes et nonces, plus du code/stockage sur les chaînes à contrats |
| Frais | Implicites (entrées − sorties) | Champs explicites de la transaction |
| Tentation d'erreur | Oublier la sortie de monnaie : la différence devient des frais | Envoyer des transactions dans le mauvais ordre de nonce |
| Contrats complexes | Possible, mais l'état partagé est moins naturel | Naturel : un contrat est un compte avec du code |
Ce que cela ne garantit PAS
- Le modèle UTXO n'est pas automatiquement « anonyme » : réutiliser une adresse ou fusionner des entrées relie des sorties entre elles.
- Le modèle à comptes n'est pas « moins sûr » : le nonce et la vérification du solde y jouent le rôle que l'unicité de consommation joue en UTXO.
- Aucun des deux modèles ne protège contre l'envoi à la mauvaise adresse.
À retenir
UTXO : consommer des sorties entières et en créer de nouvelles ; frais = entrées − sorties. Comptes : modifier des soldes ; frais explicites ; le nonce ordonne.
