Le modèle basé sur les comptes d’Ethereum et le contrat intelligent basé sur Solidity est un mariage infernal.
L’événement Vasil-HFC est à l’horizon et il est temps de libérer les synergies du modèle eUTxO de Cardano et des Smartcontracts Plutus.
Voici un fil expliquant pourquoi le modèle EUTxO et la programmation fonctionnelle sont ce dont DeFi a besoin :
Le but ultime de Blockchain est de remplacer le système financier traditionnel corrompu et centralisé. Créer un système financier mondial inclusif pour financer les personnes non bancarisées.
Mais allons-nous le faire avec un système qui est plus problématique que celui que nous avons actuellement ?
La crypto en général et DeFi ont connu une croissance massive au cours de la dernière décennie. Les exploits DeFi ont également connu une croissance proportionnelle, voire plus importante. Cela nous fait réaliser l’exigence fondamentale du système que nous voulons faire partie d’une architecture blockchain qui offre la sûreté et la sécurité.

Une architecture blockchain conçue pour héberger des dApps critiques et lorsqu’il s’agit d’un design simple et élégant qui offre sécurité et sûreté.
Il y a deux exemples ici :
- Modèle UTxO de Bitcoin ;
- Programmation fonctionnelle avec Haskell.

Cardano combine ces deux mondes :
- En étendant le modèle EUTxO de Bitcoin ;
- Cardano a créé l’architecture EUTxO-ledger ;
- Propulsé par des contrats intelligents basés sur Plutus ;
- Ce qui fournit à son tour un environnement de programmation sécurisé et complet basé sur Haskell.

Alors, pourquoi la combinaison du modèle UTxO-ledger de Bitcoin et de la programmation fonctionnelle avec Haskell ?
Un mariage fait au paradis! Comparé à quelque chose de terrible comme le modèle basé sur les comptes d’Ethreum et la programmation impérative basée sur Solidity.
Donc, pour comprendre pourquoi Cardano a choisi une architecture fondamentalement différente d’Ethereum, nous devons comprendre les synergies entre le modèle UTxO et la programmation fonctionnelle.
Alors, qu’est-ce que la programmation fonctionnelle ?
La programmation fonctionnelle est le processus de construction d’un logiciel en composant des fonctions pures, ce qui évite :
- État partagé ;
- Données modifiables ;
- Effets secondaires.

Que sont donc les fonctions pures ?
Dans le contexte du calcul, une fonction pure est analogue à une fonction mathématique qui est à la base de tout raisonnement scientifique formel. C’est une fonction (un bloc de code) qui retourne toujours le même résultat si les mêmes arguments sont passés.
Une fonction doit suivre quatre règles pour se comporter comme une fonction en mathématiques :
- Il doit toujours prendre un argument;
- Il doit toujours renvoyer une valeur ;
- Cela ne doit pas dépendre de quoi que ce soit qui change ;
- Il ne doit rien changer par lui-même.
Une fonction avec de telles propriétés est appelée « Pure ». Les fonctions pures sont « sans état » et « intemporelles ».
Signification : Les fonctions pures sont facilement parallélisables car elles encouragent les structures de données immuables. Ce qui réduit les effets secondaires qui rendent le code difficile à exécuter sur plusieurs processeurs.

Tout comme les UTxO de Bitcoin, les fonctions ne sont que des mappages des entrées aux sorties. Il ne dépend d’aucun changement d’état ou de données pendant l’exécution d’un programme, il n’y a donc pas d’états externes ni d’effets secondaires.
Cela donne de la certitude et de la prévisibilité au comportement du code.

Haskell a des fonctions de 1ère classe. Un langage de programmation est dit avoir des fonctions de 1ère classe lorsque les fonctions ne sont pas différentes de toute autre variable où :
- Les fonctions peuvent être utilisées comme arguments ;
- Peut être renvoyé sous forme de valeurs d’autres fonctions ;
- Peut être affecté à une variable.
Les fonctions de 1ère classe permettent d’abstraire tout calcul répétitif du code et permettent finalement d’écrire des fonctions qui produisent d’autres fonctions.
Ces fonctions sont appelées fonctions d’ordre supérieur.

Les fonctions d’ordre supérieur désignent simplement les fonctions qui opèrent sur d’autres fonctions.
Pourquoi est-ce utile ?
1. Les fonctions d’ordre supérieur élèvent le niveau d’abstraction.
Signification : Cela permet de résumer les actions et pas seulement les valeurs. Ainsi, nous n’avons pas à raisonner sur les détails de niveau inférieur
2. Les fonctions d’ordre supérieur sont essentielles pour paramétrer le code par comportement.
Signification : Cela nous permet de définir des modèles de programmation communs et d’écrire des fonctions sur des fonctions.
Avoir des fonctions d’ordre supérieur est à l’origine d’une grande partie des avantages de la programmation fonctionnelle.
En un mot:
- La programmation fonctionnelle utilise des valeurs et des fonctions de type mathématique ;
- Pour produire des résultats qui n’ont aucune influence extérieure et sont bien évalués ; à travers
- Conduisant à un code transparent et plus propre plus parallélisable ;
- Cela aide l’utilisateur dans le débogage et la maintenance.
D’autre part, la programmation dans un environnement dynamique avec une programmation orientée objet entraîne la création d’un énorme « enfer des dépendances », ce qui entraîne l’ajout d’abstraction en plus de l’abstraction pour modulariser des systèmes complexes.
Il en résulte un « état mutable partagé/état global ».
Lorsque les sous-modules tentent d’accéder simultanément à l’état global, la complexité surgit et il en résulte un environnement de programmation chaotique. Tout comme le modèle de compte d’Ethereum où il y a un état global et les transactions échouent dans l’exécution du script en cours après avoir prélevé des frais auprès de l’utilisateur.

Si nous pouvions utiliser notre bon sens et considérer les raisons mentionnées ci-dessus, un langage de programmation purement fonctionnel comme Haskell devrait idéalement être le langage de programmation incontournable pour les dApps qui permettent des transactions financières au nord de milliards de dollars.
Haskell est similaire aux UTxO de Bitcoin où la fonction pure est un mappage de l’entrée à la sortie et le modèle de compte d’Ethreum est similaire à la programmation orientée objet – les comptes sont similaires aux objets où ils s’envoient des messages dans une configuration dynamique et distribuée.

Bien qu’il connaisse le modèle basé sur les comptes lorsque Satoshi a inventé Bitcoin, il a choisi le modèle UTxO car le modèle sémantique du grand livre reste simple dans un environnement informatique distribué et dynamique complexe.

Le modèle UTxO a une expressivité très limitée de la programmabilité. Cette limitation de Bitcoin est ce qui a motivé Vitalik à choisir le modèle de grand livre basé sur le compte pour Ethereum. Mais cela a entraîné la création d’un « état global » et cela complique la programmation des dApps.

Cardano a adopté une approche méthodique, étendant le modèle UTxO de Bitcoin avec des scripts et des données arbitraires et en utilisant le langage de programmation Plutus basé sur Haskell, où la nature sans effet secondaire des transactions E-UTXO correspond parfaitement à la nature purement fonctionnelle des fonctions Haskell.

La logique/les scripts arbitraires permettent au modèle E-UTxO d’avoir plus d’expressivité. Les données arbitraires portent avec elles des informations sur l’état des sorties qui permettent de localiser l’état du contrat au fur et à mesure que l’état est localisé. Il n’y a pas de notion d »’état global ».

Dans Ethereum, pour écrire un contrat intelligent, vous écrivez le code on-chain en solidité puis un code Javascript pour la partie off-chain qui s’exécute dans le portefeuille.
Ceci n’est pas pratique car vous devez développer une intégration ad hoc entre les deux morceaux de code, qui est Complexe et Fragile.

La plate-forme Plutus de Cardano utilise Haskell pour la chaîne hors chaîne et PlutusTX pour le code en chaîne qui se compile jusqu’à Plutus Core permettant l’utilisation de la même syntaxe, du même compilateur et des mêmes types de données dans les deux parties du code, ce qui se traduit par un système intégré, compact et robuste. modèle de programmation.

Signification : Il est beaucoup plus facile de raisonner sur le comportement d’un contrat intelligent lors de la programmation d’un contrat intelligent dans Plutus. Il ne sera pas trop difficile de prouver que le code se comportera exactement comme il est censé le faire, permettant un code facilement vérifiable pour des dApps sécurisées et sûres.
Nous ne pouvons pas construire l’avenir de la finance mondiale ouverte sur des plateformes où des piratages de plusieurs millions de dollars se produisent chaque semaine. Il doit être construit sur une plate-forme qui a mis suffisamment de travail et de réflexion pour créer des dApps non seulement évolutives mais sécurisées et sûres.
Cardano fusionne le meilleur des deux mondes avec le modèle E-UTxO combinant l’architecture élégante et simple du modèle UTxO de Bitcoin qui correspond parfaitement à la nature purement fonctionnelle des fonctions Haskell apportant :
- Sécurité;
- Sécurité;
- Évolutivité.

Fil original de @Soorajksaju2 :
https://twitter.com/Soorajksaju2/status/1532020250522296322?s=20&t=WBDjtJ-iKnoEku6fWKlLCQ