Cardano est une blockchain en preuve d'enjeu dont les smart contracts suivent le modèle UTXO étendu (eUTXO) plutôt que le modèle à comptes de l'EVM. Un contrat ne détient pas de solde et n'exécute pas d'actions : il valide si une transaction peut dépenser les sorties qu'il protège. Pour un projet, cela change à la fois la conception de l'application et ce que les auditeurs doivent vérifier.
Développer sur Cardano
Le code on-chain se compose de scripts validateurs, qui acceptent ou refusent les transactions, et de politiques d'émission (minting policies), qui encadrent la création de tokens. Chaque sortie verrouillée par un script porte un datum (son état), et celui qui la dépense fournit un redeemer (l'action). Les validateurs ne faisant que vérifier une transaction, une grande part de la logique, la construction des transactions, se trouve dans le code hors chaîne, qui doit rester cohérent avec les règles on-chain.
- Langages : Aiken, Plutus écrit en Haskell, et d'autres langages compilés vers Plutus Core
- Les tokens natifs existent au niveau du registre, sans contrat de token
- Non compatible EVM
Ce que regardent les auditeurs
- La gestion du datum : datum absent, mal formé ou inattendu, sorties créées avec un datum contrôlé par un attaquant
- La double satisfaction : un même paiement utilisé pour satisfaire plusieurs validateurs dans une transaction
- Les contrôles de valeur : montants exacts, tokens superflus envoyés vers une sortie de script pour la bloquer ou l'alourdir, minimum d'ada requis
- Les politiques d'émission : qui peut émettre ou détruire, et une politique peut-elle être réutilisée de façon imprévue
- La concurrence sur les sorties partagées et la justesse du code hors chaîne qui construit les transactions
Avant de demander des devis
- Précisez le langage et la version du compilateur, et incluez le code hors chaîne s'il construit les transactions
- Décrivez chaque validateur et chaque politique d'émission, avec les types de datum et de redeemer
- Fournissez des tests, y compris des tests par propriétés sur des transactions malveillantes
- Expliquez comment l'application gère plusieurs utilisateurs agissant sur les mêmes sorties