Bitcoin : Miniscript, le futur des smart contracts ?
Avec la création de Bitcoin, le monde a également découvert Script, le premier langage de programmation permettant de réaliser des smart contracts. Script permet aux utilisateurs de créer une variété de conditions sous lesquels les bitcoins d’une adresse peuvent être dépensés. Cependant, l’écriture ainsi que la vérification de ces contrats se montre fastidieuses. Les contrats ainsi créés sont sujets aux erreurs humaines et de telles erreurs peuvent être très fâcheuses lorsqu’il s’agit de manipuler des fonds.
Le 19 août dernier, Pieter Wuille – développeur travaillant sur Bitcoin pour le compte de l’entreprise Blockstream – avait dévoilé à la mailing-list des développeurs Bitcoin son projet de nouveau langage de Script pour Bitcoin, appelé Miniscript.
Ce nouveau langage a été pensé en collaboration avec Andrew Poelstra et Sanket Kanjalkar, respectivement directeur de recherche et stagiaire chez Blockstream. Il semble cependant important de clarifier que les recherches menées sur Miniscript sont partagées de manière open source afin que l’ensemble de l’écosystème Bitcoin puisse en profiter, et ne constituent ainsi pas un simple produit labellisé Blockstream.
Script
Avant d’entrer dans les détails concernant Miniscript, il est important de rappeler ce qu’est Script, ainsi que ses limites.
Comme nous l’avons vu précédemment, Script est un langage de programmation permettant de réaliser des smart contracts sur Bitcoin. Celui-ci permet de créer des transactions en y ajoutant un certain nombre de conditions. C’est par exemple grâce à Script qu’il est possible de faire des transactions dites multisignatures (ou multisig) : il est alors nécessaire de recueillir la signature de plusieurs parties prenantes pour que les bitcoins ainsi séquestrés puissent être libérés et dépensés.
Script offre de nombreuses autres possibilités, comme le fait de renseigner une période de lockup, période temporelle pendant laquelle les fonds ne pourront pas être dépensés.
Notons cependant que les possibilités offertes par Script sont par certains aspects plus restreintes que celles proposées par Solidity, le langage de smart contract d’Ethereum.
Cependant, Script reste relativement imparfait. La principale de ses problématiques est qu’il est difficile à prédire. En effet, les résultats des calculs réalisés par l’exécution d’instructions Script peuvent parfois être interprétés de plusieurs manières. Cet aspect de Script rend l’écriture ainsi que la vérification de ses scripts possiblement fastidieuses et chronophages, d’autant plus lorsque ces derniers intègrent des mécaniques complexes.
En plus de cela, Script présente très peu de flexibilité, un point soulevé comme l’une des motivations du passage à Miniscript par Pieter Wuille lui-même.
Qu’est-ce que Miniscript ?
C’est précisément pour résoudre les différents problèmes cités précédemment que Pieter Wuille et ses acolytes en sont arrivés à élaborer Miniscript, au cours de la dernière année.
Ce nouveau langage permet de représenter des scripts Bitcoin de manière structurée et qui peuvent ensuite être analysés de manière plus efficiente. Cependant, permettre de réaliser des scripts lisibles par l’homme n’est qu’une de ses fonctionnalités. Son but premier est de permettre à terme un raisonnement automatisé et optimisé sur Script.
Pour faire simple, Miniscript est une version épurée de Script, contenant une sélection d’outils et de fonctionnalités de Script. Ces fonctionnalités ont été sélectionnées pour permettre de réaliser pratiquement tout ce qu’il est possible de faire avec Script, à l’exception de certaines fonctionnalités très rarement utilisées en pratique.
Dans la version classique de Script utilisée par Bitcoin, il existe de nombreuses manières différentes d’effectuer une même action comme exiger une signature, décrire une conjonction (condition 1 ET condition 2), une disjonction (condition 1 OU condition 2) ou encore l’implémentation d’un seuil. Miniscript va quant à lui aider à déterminer quelle est la manière de faire la plus optimale en termes de taille et de frais pour la transaction en question.
Enfin, Miniscript cherche aussi à régler les problèmes de compatibilité que peuvent connaître les différents logiciels de wallet ou services Bitcoin. Ainsi, l’utilisation d’un wallet spécifique ne restreindra pas les conditions qui peuvent être appliquées à une transaction donnée.
Avec Miniscript, trois co-contractants d’une adresse multisignature pourraient avoir recours à des wallets différents pour une même adresse multi-sig. Par exemple, l’un pourrait utiliser un hardware wallet, l’autre un wallet Blockstream Green et le troisième un paper wallet, sans jamais se soucier des compatibilités respectives de ces derniers.
Le « policy language »
En plus de Miniscript, qui est le langage qui peut être interprété par Bitcoin, l’équipe de recherche a mis au point un policy language. Ce langage est celui utilisé par les développeurs pour décrire le comportement que doit avoir une transaction, en y renseignant les différentes conditions selon lesquels des fonds peuvent être dépensés.
Après la rédaction de programmes respectant ce policy language, les développeurs vont utiliser le compilateur créé par Pieter Wuille pour convertir leur programme en Miniscript compréhensible par le protocole Bitcoin. Ce compilateur va avoir deux principales missions :
- Optimiser le code, en choisissant parmi les nombreuses manières de faire les mécanismes optimaux à utiliser. Il permet également d’optimiser les coûts engendrés par la transaction pour les réduire au maximum.
- Traduire les comportements décrits en Miniscript en un langage compréhensible par Bitcoin.
J’ai pu échanger directement avec M. Wuille, et il m’a précisé qu’il était important de ne pas confondre Miniscript et ce policy language.
» Je sais qu’ils se ressemblent, et c’est déroutant, mais la distinction est importante. Miniscript peut être converti en Script et vice-versa sans problème. C’est juste une façon différente d’écrire exactement la même chose. Les policies sont plus abstraites et ne peuvent être converties qu’à sens unique en Miniscript/Script. La raison en est que dans Miniscript il existe de nombreuses façons différentes d’écrire un même mécanisme, et elle dépend du contexte et de différentes probabilités. « , Pieter Wuille pour le JournalduCoin.
État du projet et futur
Pour l’instant le projet est toujours en développement : dans son annonce, Pieter Wuille expliquait en août que le projet était arrivé « à un stade où [il] aimerai[t] qu’il ait plus d’attention« . Ainsi, et depuis cette annonce, le processus habituel de retours de la communauté de développeurs Bitcoin a pris le relais.
Une fois qu’une version sur laquelle la communauté se sera accordée sera disponible, il faudra encore attendre un temps certain : celui nécessaire pour que ces diverses modifications entrent dans les habitus desdits développeurs.
Comme toujours dans les recherches concernant Bitcoin, les changements ne s’opèrent pas du jour au lendemain mais suite à un travail de longue haleine de la part de nombreuses équipes différentes.