Cardano, UTXO et Smart Contracts

L’entrée de Cardano dans l’univers des smart contracts a fait grand bruit. Alors que cette période devait être un moment de fête pour la communauté, le projet a essuyé un vent de critiques.

Tout est parti d’un projet en cours de création (Minswap) qui a déployé sur le testnet un produit permettant de ne traiter qu’une transaction à la fois.

Les difficultés à exécuter des smarts contracts ont soulevé un détail oublié par beaucoup.

La blockchain Cardano est basée sur le modèle UTXO contrairement à toutes les autres plateformes dédiées aux smart contracts.

L’UTXO était présenté jusqu’ici comme une force par rapport à la concurrence. Pourtant, il est devenu en quelques heures l’origine de tous les maux ; remettant en cause, aux yeux de certains, le projet Cardano dans son ensemble.

Essayons de comprendre ce qu’il se passe réellement.

Cardano et l’UTXO

L’UTXO n’est pas une spécificité liée à Cardano. C’est un moyen très utilisé dans le milieu des cryptomonnaies pour appréhender les transactions au sein d’une blockchain. Bitcoin lui-même, est conçu sur ce modèle. Mais on retrouve aussi Monero, Dash, Bitcoin Cash, Litecoin…

Toutes ces cryptomonnaies utilisent le modèle UTXO car celui-ci est réputé très performant dans le domaine de la sécurité et permet de nombreuses transactions parallèles.

Par contre, de toutes les cryptomonnaies évoquées, aucune ne propose de construire des smart contracts complexes parce que les possibilités sont restreintes.

Cardano, après de nombreuses recherches et des papiers revus et validés par ses pairs, a réussi à créer un modèle qui permet justement de casser les barrières du modèle UTXO.

Ainsi, IOHK a développé le modèle d’eUTXO ou Extended UTXO qui présente toutes les caractéristiques du modèle UTXO de Bitcoin, mais avec la possibilité de réaliser des smart contracts plus complexes.

Pour des raisons de simplicité et pour que tout le monde comprenne, nous détaillerons uniquement le modèle UTXO.

Différence entre le modèle UTXO et le modèle Account

Avant de comprendre l’impact de l’UTXO sur les smart contracts, il est impératif de comprendre :

  • le modèle UTXO (Bitcoin, Cardano)
  • le modèle Account (Ethereum et autres plateformes de smart contractS)

Le modèle Account

Ce modèle est utilisé par la plupart des blockchains qui souhaitent développer tout un écosystème de smart contracts car il est simple à manier et à comprendre.

Ce modèle correspond exactement au fonctionnement de transactions entre 2 comptes bancaires.

Vitalik veut faire un virement à Charles. La banque de Vitalik vérifie qu’il possède bien le montant à transférer. Si Vitalik a suffisamment de fonds sur son compte, la transaction est réalisée. La banque met alors à jour le compte en banque de Vitalik et la banque de Charles fait de même de son côté.

Exemple pour une transaction de 10 ETH :

Exemple de transaction suivant le modèle Account

Le modèle UTXO

Ce modèle se rapproche de nos transactions en cash.

Charles possède dans son portefeuille 50€ : 2 billets de 20€ et 1 billet de 10€.

Ces billets sont issus des transactions qu’il a réalisées précédemment (1 au distributeur et 2 en faisant ses courses).

Charles souhaite donner 25€ à Vitalik.

Le modèle UTXO ne regarde pas la totalité du solde de Charles. La transaction se décompose en fait comme suit :

  • Charles donne 1 billet de 20€ et 1 billet de 10€ (car Charles ne possède pas de billet de 5€). Charles réalise donc 2 transactions pour un total de 30€.
  • Vitalik recevant 30€ ; il doit rendre 5€ à Charles. Une nouvelle transaction de 5€ est donc créée du portefeuille de Vitalik vers Charles.

Le portefeuille de Charles est donc maintenant composé d’1 billet de 20€ (issu d’une transaction précédente) et d’1 billet de 5€ issu de la transaction depuis le portefeuille de Vitalik. Comme on le voit, tous ces billets sont le résultat (les sorties) de transactions.

Le portefeuille de Charles est donc la somme de toutes les sorties de transactions qu’il n’a pas dépensées. En anglais, on parle d’Unspent Transactions Output (UTXO).

Ce nom barbare sert juste à traduire les transactions que nous réalisons tous les jours avec du cash.

Exemple pour une transaction de 10 ada :

Exemple de transaction suivant le modèle UTXO

L’impact de ces modèles sur les smart contracts

Le modèle Account et les smart contracts

Plusieurs wallets peuvent interagir entre eux via des smart contracts sans grandes difficultés. Il suffit par contre de s’assurer à chaque fois que les wallets ont suffisamment de fonds pour valider les termes du contrat.

Cette nécessité de vérification intègre donc des étapes intermédiaires et rend impossible une multitude de transactions en parallèle.

Gestion des smart contracts dans le modèle Account

On voit bien dans ce schéma qu’une application qui souhaite interagir avec une multitude de wallets doit créer une file d’attente interminable. Pour rendre l’utilisation de leur service moins lourde pour l’utilisateur, les développeurs essayent d’optimiser le code de leur solution.

L’application devient alors plus pratique en façade, mais plus complexe dans sa programmation. Et la complexité d’un programme le rend souvent plus vulnérable aux tentatives de hacks.

Le modèle Account choisi par la plupart des blockchains de smart contracts type Ethereum est en partie la cause même des hacks et des siphonnages de wallets récurrents sur les plateformes Defi.

L’UTXO et les smart contracts

Comme nous l’avons vu précédemment, dans le modèle UTXO, le solde d’un portefeuille importe peu pour réaliser une transaction. Il suffit qu’il y ait assez de sorties de transactions précédentes pour réaliser l’opération ; ou, dit autrement, il faut qu’il y ait assez d’UTXOs.

Dans ce cas, il n’est donc pas nécessaire de vérifier la solvabilité d’un compte avant de déclencher un smart contract. On peut donc exécuter une multitude de transactions simultanées. C’est l’une des grandes forces de ce modèle : la parallélisation des transactions.

Mais cet énorme avantage présente aussi un inconvénient : 1 UTXO ne peut être sollicité qu’une seule fois. Un smart contract ne peut pas interagir 2 fois avec le même UTXO d’un portefeuille.

Gestion des smart contracts dans le modèle UTXO

Dans ce schéma, l’échec du smart contract entre le wallet 1 et le wallet 3 s’appelle : problème de concurrence (concurrency issue).

Il faut donc construire ses smart contracts pour ne pas « piocher » plusieurs fois en même temps le même UTXO d’un portefeuille.

Comme dans le modèle Account, il faut complexifier un peu son programme sauf qu’avec les UTXO, une mauvaise programmation entraînera un échec de l’éxécution du smart contract.

Pour résumer

Chacun des modèles Account – UTXO entraîne une problématique différente que les développeurs de smart contracts se doivent d’adresser. Pourtant, la résolution de ces problèmes engendre un risque supplémentaire propre à chacun de ces modèles :

  • Dans le modèle Account, on diminue la sécurité des transactions.
  • Dans le Modèle UTXO, on diminue l’exécutabilité des transactions.

Bien sûr, dans les 2 modèles, un smart contract open source, audité et réalisé par des développeurs compétents peut allier rapidité d’exécution et sécurité. Mais à travers les hacks récurrents, l’histoire nous montre que beaucoup de projets n’en sont malheureusement pas capables.

Cardano a donc fait un choix : celui de la sécurité.

Conclusion

Cardano, grâce à la création de l’eUTXO, est la première blockchain construite sur ce modèle à permettre de programmer des smart contracts complexes. C’est une véritable révolution.

Les conséquences de cette approche vont permettre un bond en avant gigantesque dans la parallélisation et la sécurité des smart contracts. Mais cela passera forcément par une approche algorithmique différente de ce qui existait jusque là.

Face à toutes les critiques liées à l’échec (sur le testnet) de Minswap qui s’est heurté au problème de concurrence, finissons par une anecdote de Charles Hoskinson :

« Lorsqu’Intel a sorti les processeurs multicoeurs, il a fallu revoir la manière de concevoir les logiciels pour en tirer le meilleur parti. Malheureusement, certains développeurs ont continué à programmer de la même façon et ont sorti des logiciels qui ne fonctionnaient pas ou mal sur les processeurs multicoeurs.

Pourtant, à cette époque, personne n’a crié sur tous les toits qu’Intel était un scam… »

écrit par koukarin, auteur du site 0knowledge.fr