Turing terminé

Turing terminé

Le concept de complétude de Turing est souvent discuté en génie logiciel, peut-être plus fréquemment qu'on pourrait le penser. Il semble y avoir une certaine confusion quant à ce qu'implique exactement la complétude de Turing, en particulier dans le contexte du génie logiciel.

L'exhaustivité de Turing est une caractéristique attribuée à un système informatique, signifiant qu'il possède la même puissance de calcul qu'une machine de Turing. Mais qu’est-ce que cela signifie réellement ? Approfondissons ce concept.

Un système Turing Complete est un système qui, avec suffisamment de temps et de mémoire, ainsi que les instructions nécessaires, a la capacité de résoudre n'importe quel problème informatique, quelle que soit sa complexité. Ce terme est couramment appliqué aux langages de programmation modernes, car la plupart d’entre eux – notamment C++, Python, JavaScript et autres – sont Turing Complete. Cela signifie que ces langages peuvent théoriquement exécuter n’importe quel algorithme, à condition de disposer des ressources et des instructions nécessaires.

blog top

Qu’est-ce que la complétude de Turing ?

Turing Completeness est un concept fondamental dans le domaine de l'informatique, initialement défini par Alan Turing. Il décrit la capacité de certaines machines informatiques à effectuer n'importe quelle tâche que n'importe quel ordinateur peut exécuter. Ce principe est au cœur du développement de logiciels et d’applications, permettant d’écrire du code sans vérification préalable de sa fonctionnalité. Cela signifie qu'un programmeur peut écrire un programme sans se soucier de ses limites d'exécution.

Le terme provient de la machine de Turing, un modèle théorique créé par le mathématicien et cryptographe anglais Alan Turing. Bien qu’il ne s’agisse pas d’un appareil physique, la machine de Turing est un concept mathématique vital. Il peut théoriquement résoudre n’importe quel problème calculable, à condition de disposer de suffisamment de temps et de mémoire. Si un système peut simuler les fonctions d’une machine de Turing, il est considéré comme Turing complet.

La plupart des langages de programmation modernes comme Solidity, Python, C++ et Java sont Turing complets, ce qui signifie qu'ils peuvent simuler les opérations d'une machine de Turing. Cela contraste avec les systèmes incomplets de Turing, comme les simples calculatrices, qui sont limités à des tâches spécifiques.

Le concept de complétude de Turing a des implications significatives dans la technologie blockchain. Par exemple, l'exhaustivité Turing d'Ethereum, permise par son langage de programmation Solidity et Ethereum Virtual Machine (EVM) , permet aux développeurs d'écrire et d'exécuter des programmes complexes et multiformes. Cela contraste fortement avec Bitcoin, dont le langage de programmation Script est intentionnellement incomplet de Turing, le limitant à des opérations plus simples et spécifiques.

Essentiellement, l’exhaustivité de Turing définit l’étendue des capacités informatiques d’un système. Plus un système peut exécuter de tâches informatiques, plus Turing est complet. Cette distinction est cruciale pour comprendre l’étendue et la complexité des tâches exécutables sur les différentes plateformes blockchain.

Que signifie Turing Complete dans la blockchain ?

En règle générale, les caractéristiques suivantes définissent l'exhaustivité de Turing :

  1. Boucles logiques : cela implique la capacité du système à exécuter une fonction ou une série d'instructions de manière répétée.
  2. Opérations d'entrée/sortie : capacité du système à lire et à écrire des données, ce qui signifie qu'il peut traiter les entrées et générer des sorties basées sur ces données.
  3. Puissance de calcul : le système doit être capable de calculer tout problème résoluble qu'une machine de Turing peut résoudre.
  4. Branchement conditionnel : les actions du système peuvent varier en fonction des valeurs de données qu'il traite.

Dans le contexte des blockchains, celles qui satisfont à ces critères sont considérées comme Turing complètes. Cela implique que les langages de programmation utilisés pour développer des contrats intelligents sur ces blockchains peuvent relever n’importe quel défi informatique. Prenons l'exemple d'Ethereum : il utilise Solidity pour son codage natif et ses contrats intelligents. Cette capacité est cruciale pour que la blockchain comprenne et mette en œuvre les termes des contrats intelligents , même ceux qui pourraient survenir à l'avenir. Essentiellement, l'exhaustivité de Turing d'Ethereum lui permet d'exécuter presque toutes les tâches, avec les instructions correctes et des ressources suffisantes comme le temps et la puissance de calcul.

En revanche, le langage de script de Bitcoin, connu sous le nom de Script, ne répond pas aux critères d'exhaustivité de Turing. Le script a été délibérément conçu pour gérer des fonctions de base telles que le transfert de valeurs et l'exécution de simples contrats intelligents. Il évite l'exhaustivité de Turing pour empêcher les boucles de surcharger les nœuds du réseau et pour sauvegarder l'intégrité du réseau. L'exhaustivité de Turing dans Bitcoin pourrait introduire des risques de sécurité supplémentaires en permettant l'exécution de code arbitraire, exposant potentiellement le réseau à de nouveaux types d'attaques.

Ethereum – la première blockchain complète de Turing

Ethereum est devenu la plate-forme blockchain pionnière pour introduire l'exhaustivité de Turing, révolutionnant le domaine des contrats intelligents et des applications décentralisées (dApps). Cette avancée a été réalisée grâce à deux éléments clés :

  • Contrats intelligents dans Solidity : les contrats intelligents d'Ethereum sont conçus à l'aide de Solidity, un langage de programmation polyvalent et complet de Turing, spécialement conçu pour l'écosystème d'Ethereum.
  • La machine virtuelle Ethereum (EVM) : ce moteur de calcul exécute des contrats intelligents, fonctionnant comme une entité complète de Turing.

La conception robuste de l'EVM lui permet de gérer n'importe quelle configuration de contrat intelligent, même celles dont les objectifs n'ont pas encore été envisagés. Ce lancement d'Ethereum en tant que première blockchain complète de Turing a représenté une avancée cruciale, élargissant la portée de la technologie blockchain au-delà des applications prédéterminées à un éventail de possibilités illimitées.

Malgré son exhaustivité théorique de Turing, Ethereum rencontre des limites pratiques dans les applications du monde réel. Les mécanismes opérationnels de la blockchain imposent que chaque transaction entraîne des frais de « gaz » . Par conséquent, si un contrat intelligent entrait dans une boucle infinie – un scénario possible dans les machines de Turing – il finirait par épuiser son approvisionnement en gaz.

Cette contrainte sur l'exhaustivité de Turing d'Ethereum est intentionnelle. Permettre à de nombreux contrats intelligents de fonctionner dans des boucles infinies serait peu pratique pour un réseau public de blockchain doté de ressources de traitement limitées. Pour résoudre ce problème, Ethereum impose une limite de gaz pour chaque transaction, plafonnant la puissance de calcul maximale disponible. Les transactions qui ne seraient pas conclues dans ce délai seraient automatiquement résiliées.

Il convient toutefois de noter que la majorité des contrats intelligents d'Ethereum exploitent rarement des boucles récursives ou d'autres fonctionnalités complexes associées à l'exhaustivité de Turing. Bien que cette capacité souligne la puissance théorique et la polyvalence d'Ethereum, dans la pratique, des structures contractuelles plus simples et plus efficaces sont préférées pour la plupart des applications, équilibrant le besoin de fonctionnalités sophistiquées avec les réalités de la gestion des ressources blockchain.

Limites de l'exhaustivité de Turing dans les applications Blockchain

La programmabilité illimitée des systèmes complets de Turing est leur plus grand atout, mais elle présente simultanément une vulnérabilité notable, en particulier dans les blockchains publiques où le code est ouvertement accessible. Cette ouverture peut exposer le code à diverses perturbations, comme des bugs dans les contrats intelligents ou une exploitation à des fins involontaires, perturbant les opérations prévues du protocole. La capacité de programmer n’importe quel calcul crée un large éventail de résultats potentiels, dont beaucoup peuvent être imprévisibles.

Dans les systèmes centralisés, les problèmes inattendus peuvent être rapidement résolus par l’entreprise propriétaire grâce à des correctifs immédiats. En revanche, dans les systèmes basés sur la blockchain, des manipulations imprévues peuvent provoquer des perturbations importantes. Par exemple, si un individu exploite une faille pour obtenir un résultat inattendu, cela peut entraîner des problèmes importants. La nature décentralisée de la blockchain complique encore davantage la situation, car toute mise à jour logicielle nécessite un consensus communautaire, prolongeant souvent le processus.

Un exemple marquant illustrant ce défi est l’incident DAO sur la blockchain Ethereum en 2016. Ce contrat intelligent décentralisé, semblable à un fonds de capital-risque, a été confronté à un événement souvent qualifié à tort de piratage. Un utilisateur a exploité une vulnérabilité dans le code du contrat intelligent, menant ce que l'on appelle désormais une attaque de réentrance, siphonnant plus de 150 millions de dollars du fonds. Cela a conduit à une décision controversée de revenir sur la blockchain Ethereum, provoquant le fork d’Ethereum Classic .

Cependant, il est important de noter que cet événement n’était pas un hack traditionnel mais plutôt l’exploitation d’une vulnérabilité de code alors inconnue. L'attaquant a utilisé un contrat non fiable lors d'une attaque de réentrée pour retirer des fonds.

Après DAO, les développeurs ont affiné leurs pratiques de programmation pour remédier à ces vulnérabilités. Néanmoins, la nature des systèmes complets de Turing, dans lesquels du nouveau code est constamment développé, signifie que de nouvelles vulnérabilités peuvent encore apparaître. Cela souligne la nécessité d’une vigilance continue et de mesures de sécurité adaptatives dans la technologie blockchain pour garantir la robustesse contre de tels exploits.

banner 3

Sachez que Plisio vous propose également :

Créez des factures cryptographiques en 2 clics and Accepter les dons cryptographiques

12 intégrations

6 bibliothèques pour les langages de programmation les plus populaires

19 crypto-monnaies et 12 blockchains

Ready to Get Started?

Create an account and start accepting payments – no contracts or KYC required. Or, contact us to design a custom package for your business.

Make first step

Always know what you pay

Integrated per-transaction pricing with no hidden fees

Start your integration

Set up Plisio swiftly in just 10 minutes.