Contrats autonomes et applications décentralisées

contrat autonomeActuellement encore futuristes, les contrats autonomes (« smart contracts ») et les applications décentralisées deviennent une réalité avec le développement de systèmes tels qu’Ethereum. Ces systèmes partent des innovations du Bitcoin (qui a permis de se passer de tiers de confiance pour gérer la possession de biens numériques) et vont beaucoup plus loin, par exemple en y intégrant l’automatisation de tâches (via un langage de programmation).

Un contrat autonome s’exécute seul, c’est-à-dire sans aucune intervention humaine. Alors qu’un contrat papier (ou PDF) contient du texte qui servira, en cas de litige, de base à un juge pour ordonner une des parties à faire un transfert financier (ou de propriété) vers l’autre partie sous certaines conditions, le contrat autonome est un programme qui exécute automatiquement ces conditions. Les avantages d’un tel système sont immenses : rapidité, économie, sécurité, impartialité et transparence. Evidemment, pour s’exécuter, un contrat autonome doit être « connecté » au monde réel pour prendre en compte les conditions de son exécution et aussi pour imposer le résultat voulu.

Les contrats autonomes sont mis dans un registre décentralisé, public et sécurisé (similaire au « block chain » du Bitcoin), ils seront chiffrés pour leur confidentialité. Ce nouveau type de contrat ne s’applique évidemment pas à tous les domaines.

Les possibilités d’utilisation se concrétiseront avec la prolifération des objets connectés, des objets intelligents ou de la technologie portable (« wearable computing »). Nos voitures sont déjà équipées de clés (utilisant la cryptographie) qui pourraient être activées (et désactivées) en fonction de paiements faits à une adresse Bitcoin définie (par un contrat de location ou un contrat de financement du véhicule).

Plus généralement, pour fonctionner, les contrats autonomes ont besoin d’une monnaie telle que le Bitcoin, d’abord pour automatiser les transferts financiers et ensuite pour réguler l’exécution de ces contrats. Un contrat est composé d’un ensemble d’instructions, chaque instruction exécutée consommera des (maigres) ressources et demandera des frais en proportions. Le système sera autorégulé (comme le Bitcoin) : les frais récoltés pour l’exécution des contrats seront versés aux nœuds du réseau (aussi appelés « mineurs » qui valident les transactions et sécurisent le système).

Les contrats autonomes ont leur propres limites, ils seront plus difficilement applicables s’ils doivent se baser sur des objets non connectables ou sur des conditions nécessitant un jugement humain.

Pour ce dernier cas, des solutions intelligentes existent néanmoins. A titre d’exemple, imaginons un contrat d’emploi :

« Si Pierre a fait le travail A, il sera payé X par son Employeur »

La difficulté réside dans l’appréciation de la réalisation du travail A et éventuellement de sa qualité. Dans la majorité des cas, l’entente entre Pierre et son Employeur ne pose pas de problème mais par prudence Pierre et son Employeur peuvent désigner Jean, un tiers de confiance qui interviendra en cas de litige. Le contrat devient :

« Si Pierre a fait le travail A, il sera payé X par son Employeur. Si les parties sont en désaccord sur la réalisation de A alors ils s’en remettent à Jean. »

Jean est un arbitre, il n’est pas le juge du tribunal, en cas de désaccord il ne sera pas nécessaire de faire appel à la justice avec tous les délais et coûts associés. Le pseudocode du contrat autonome d’emploi serait :

SI [ (Employeur DIT « le travail A est fait ») OU (Jean DIT « le travail A est fait »)
ALORS ENVOYER(X à Pierre) ]

SINON SI [ (Pierre DIT « le travail A n’est pas fait ») OU (Jean DIT « le travail A n’est pas fait)
ALORS ENVOYER(X à l’Employeur) ]

En terme de contrat autonome : (Personne DIT « blabla ») est simplement la vérification d’une signature électronique, c’est-à-dire que le message « blabla » a été soumis et signé avec la clé publique de Personne. Le contrat autonome est activé dès que l’Employeur envoie la somme X au contrat, ensuite si l’Employeur signe et envoie le message « le travail A est fait » alors le contrat est exécuté et Pierre est automatiquement payé. Si en définitive, Pierre déclare ne pas avoir fait le travail alors la somme X retourne à l’Employeur. Et s’il y a un désaccord alors c’est Jean qui tranche et débloque la somme X (toujours en signant et en envoyant le message adéquat au registre décentralisé).

Le rôle du tiers de confiance est limité, parfaitement défini et demande beaucoup moins de moyens qu’un appel aux Juges et Tribunaux. Le tiers de confiance a simplement besoin d’une signature électronique et d’une connexion internet.

Les contrats autonomes peuvent traiter des situations complexes, et par exemple, prévoir qu’une majorité des tiers de confiance votent en cas de litige. Par exemple, l’approbation de 2 tiers de confiance parmi 3 personnes de confiance désignées peut faire partie intégrante du contrat. Les tiers de confiance jouent le rôle de juges désignés, si besoin ils peuvent être spécialisés dans le domaine du contrat concerné.

On peut imaginer la constitution de sociétés de tiers de confiance spécialisées ou généralistes. Ce sera aux rédacteurs des contrats autonomes de choisir les tiers de confiance adéquats.

En allant encore plus loin, on peut imaginer la création de véritables organisations automatisées (aussi appelées organisations autonomes décentralisées). Il s’agit d’utiliser les technologies des contrats autonomes pour construire des organisations qui existeront uniquement sur Internet et qui contrôleront néanmoins des moyens financiers. Ce type d’organisation pourra, par exemple, rémunérer des travailleurs réalisant des tâches bien réelles. Cela commence à ressembler à de la science-fiction : qui, aujourd’hui, peut imaginer travailler pour une machine et être payé par elle ?

 Ce texte est, entre autre, issu d’un article publié par Vitalik Buterin sur blog.ethereum.org
Partager :

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *