Analyse d’un smart contract
Infrastructure des smart contracts
Le terme smart contract date de 1994, défini par Nick Szabo comme «un protocole de transaction informatisé qui exécute les termes d’un contrat. Les objectifs généraux de la conception intelligente de contrats sont de satisfaire les conditions contractuelles courantes (telles que les conditions de paiement, les privilèges, la confidentialité et même l’application), de minimiser les exceptions malveillantes et accidentelles et de minimiser le besoin d’intermédiaires de confiance. » Les smart contracts étendent et exploitent la technologie blockchain. Un smart contract est une collection de codes et de données (parfois appelés fonctions et état) qui est déployée à l’aide de transactions signées cryptographiquement sur le réseau de la blockchain (par exemple, les contrats intelligents d’Ethereum, le code de chaîne d’Hyperledger Fabric). Le smart contract est exécuté par des nœuds au sein du réseau blockchain; tous les nœuds qui exécutent le smart contract doivent dériver les mêmes résultats de l’exécution, et les résultats de l’exécution sont enregistrés sur la blockchain Les utilisateurs du réseau Blockchain peuvent créer des transactions qui envoient des données à des fonctions publiques offertes par un smart contract. Le smart contract exécute la méthode appropriée avec les données fournies par l’utilisateur pour effectuer un service. Le code, étant sur la blockchain, est également inviolable et résistant aux altérations et peut donc être utilisé (entre autres) en tant que tiers de confiance. Un smart contract peut effectuer des calculs, stocker des informations, exposer des propriétés pour refléter un état exposé publiquement et, le cas échéant, envoyer automatiquement des fonds à d’autres comptes. Il n’a même pas nécessairement à remplir une fonction financière. Par exemple, les auteurs de ce document ont créé un contrat intelligent Ethereum qui génère publiquement des nombres aléatoires fiables. Il est important de noter que toutes les blockchain ne peuvent pas exécuter de contrats intelligents.
Les smart contracts doivent être déterministes, dans la mesure où, étant donné une entrée, ils produiront toujours la même sortie en fonction de cette entrée. De plus, tous les nœuds exécutant le smart contract doivent se mettre d’accord sur le nouvel état obtenu après l’exécution. Pour y parvenir, les smart contracts ne peuvent pas fonctionner sur des données en dehors de ce qui leur est directement transmis (par exemple, les smart contracts ne peuvent pas obtenir de données de services Web à partir du smart contract – elles devraient être transmises en tant que paramètre). Tout contrat intelligent qui utilise des données en dehors du contexte de son propre système est censé utiliser un «Oracle». (Le problème d’Oracle est décrit dans la section 6.4 de la partie 1).
Pour de nombreuses implémentations de blockchain, les nœuds de publication exécutent le code de smart contract simultanément lors de la publication de nouveaux blocs. Il existe certaines implémentations de blockchain dans lesquelles il existe des nœuds de publication qui n’exécutent pas de code de smart contract, mais valident à la place les résultats des nœuds qui le font. Pour les réseaux blockchain sans autorisation activés par smart contract (tels que Ethereum), l’utilisateur émettant une transaction vers un smart contract devra payer le coût de l’exécution du code. Il existe une limite au temps d’exécution pouvant être consommé par un appel à un smart contract, en fonction de la complexité du code. Si cette limite est dépassée, l’exécution s’arrête et la transaction est rejetée. Ce mécanisme récompense non seulement les éditeurs pour l’exécution du code de smart contract, mais empêche également les utilisateurs malveillants de déployer puis d’accéder à des contrats intelligents qui effectueront un déni de service sur les nœuds de publication en consommant toutes les ressources (par exemple, en utilisant des boucles infinies).
Cycle de vie d’un smart contract
La phase de création peut être divisée en une négociation de contrat itérative et une phase de mise en œuvre. Premièrement, les parties doivent convenir du contenu et des objectifs généraux du contrat. Cela peut être fait en ligne ou hors ligne et est similaire aux négociations contractuelles classiques. Toutes les parties participantes doivent avoir un portefeuille sur la plate-forme de comptabilité sous-jacente. Son identifiant est dans la plupart des cas pseudonyme, et il est utilisé pour l’identification des parties ainsi que pour le transfert de fonds. Après s’être mis d’accord sur les objectifs et le contenu du contrat, le l’accord doit être transformé en code. La codification du contrat est limitée par l’expressivité du langage de codage du smart contract sous-jacent. Pour valider l’exécution d’un smart contract comportement et contenu, la plupart des environnements de smart contract fournissent l’infrastructure pour créer, maintenir et tester le contrat. Comme on peut le voir dans les langages de programmation classiques, la transformation des exigences en code nécessite plusieurs itérations entre les parties prenantes et le (s) programmeur (s). Les smart contracts ne seront pas différents et nécessiteront probablement de nombreuses itérations entre la phase de négociation et de mise en œuvre.