Maintenant que nous avons abordé les outputs et les inputs, découvrons un peu plus en détail ce que sont et comment fonctionnent les scripts qui permettent de les programmer.
Qu’est-ce qu’un script dans la transaction Bitcoin ?
Nous avons vu dans le précédent épisode ce qu’était un output et un input. Je vous invite à le lire avant de lire cet article. De plus, nous avions dit que les outputs et les inputs étaient programmables. Et ces “programmes” sont appelés des scripts.
En d’autres termes, un script est une sorte de programme informatique permettant de “locker” et “d’unlock” (de vérouiller et dévérouiller) des informations dans un output de transaction. En effet, cela permet donc de programmer la transaction et sert à deux tâches essentielles :
- À faire un script de verrouillage (ScriptPubKey) sur chaque output de transaction.
- à exécuter un script de déverrouillage (ScriptSig ou Witness) qui permet d’utiliser un input lors d’une transaction pour que les Bitcoins soient dépensés.
En conséquence, pour qu’une transaction soit valide et que vos Bitcoins puissent être dépensés, le script complet doit être valide. À la fois, le verrouillage de l’ouput et le déverrouillage de l’input doivent être réussis.
“La partie script pubkey du programme stipule exactement ce que la transaction de dépense doit fournir pour dépenser l’output. La seule façon de dépenser un output est de fournir un script de signature qui fait que le programme se termine par un “OK” en haut de la pile.”
Comment fonctionnent-ils ?
Avant toute chose, un script consiste en deux éléments de base :
- Les Opcodes qui sont des fonctions permettant de donner des “ordres” et de faire bouger les données.
- Les données comme les clés publiques et les signatures.
Voici un exemple de script P2PKH obtenu sur le site LearnMeaBitcoin :
Les données :
En effet, ce script intervient dans un processus de vérification de toutes les informations de la transaction. A chaque vérification d’un élément, le programme déplace une information validée dans “une pile” (stack en anglais).
Imaginez-vous en train de vérifier si des habits n’étaient pas abîmés dans un sac et que, à chaque fois que vous trouvez un beau vêtement neuf, vous le déposiez en pile hors du sac.
Le script fonctionne donc de la même manière. Il va d’abord vérifier la signature contenue dans l’input. Puis, il va déposer la signature dans la pile. Ensuite, il vérifiera la clé publique et si elle est juste, il dira “OK” et la déposera en haut de la pile et ainsi de suite.
Les OP :
L’information qui suit la clé publique est la fonction OP_DUD. Comme son nom peut l’indiquer, sa fonction est simple : faire ajouter l’élément supérieur sur la pile. Mais en plus, il dit également de garder l’élément sur la pile tout en le copiant par-dessus.
Par conséquent, la pile devient une sorte de copie de vos éléments afin d’avoir un résumé de tous les calculs nécessaires à la validation de la transaction. Vous avez donc désormais deux signatures et deux clés publiques (une dans le sac, une autre sur la pile).
Intervient ensuite l’opérateur OP_HASH160. Ce dernier signifie : « retirez l’élément du haut de la pile et hachez-le en utilisant SHA256+RIPEMD160, et mettez ensuite le résultat sur la pile.” Je vous invite à lire notre épisode expliquant les fonctions SHA256+RIPEMD160 qui permettent notamment de réduire les informations pour les rendre plus lisibles.
En prenant donc la clé publique, OP_HASH160 va permettre de déposer un PKH sur le haut de la pile pour pouvoir être vérifié et comparé.
C’est donc là qu’est utile la prochaine fonction : OP_EQUALVERIFY. Cette dernière signifie simplement « prenez les deux premiers éléments de la pile et comparez-les. S’ils sont égaux, passez à l’instruction de programme suivante ; sinon, quittez le programme avec une erreur.”
En somme, elle permet de comparer les deux signatures et PKH afin de déterminer si la transaction est valable et qu’elle détient bien les BTCs.
“S’ils sont égaux, cela signifie que la clé publique que John a fournie dans le script de signature de sa transaction correspond à la PKH qui a été définie comme destinataire dans l’output.”
Pour finir, le dernier opérateur, OP_CHECKSIG signifie « vérifier que la clé publique supérieure sur la pile et la signature à côté de la pile peuvent signer correctement la transaction. Mettez vrai ou faux en haut de la pile en fonction du résultat de la vérification.”
OP_CHECKSIG permet donc de vérifier les deux éléments supérieurs de la pile, à savoir la clé publique et la signature de l’émetteur. Mais le receveur doit d’abord nettoyer le script de l’émetteur afin de ne sélectionner que ces deux éléments supérieurs.
Si la clé et la signature passent le test de l‘OP_CHECKSIG avec un “OK”, les Bitcoins peuvent enfin être transmis !
“Le seul script de signature acceptable est une signature valide suivie de la clé publique correspondant au PKH dans le script de la clé publique.”
Sources : Grokking Bitcoin, LearnMeaBitcoin.
Sur le même sujet :