Le script Bitcoin est le langage que Bitcoin utilise pour faire tout ce qu'il peut, de l'envoi de fonds à partir d'un portefeuille à la création de comptes multi-utilisateurs. Toutes ces fonctionnalités contenues dans un simple outil extensible et puissant que nous connaîtrons ci-dessous.
Cpoule on parle de Script Bitcoin, Nous parlons d'un langage de programmation simple utilisé dans Bitcoin pour traiter les transactions qui se lit de gauche à droite. Ceci est basé sur une série de structures linéaires, appelées empiler, contenant les données existantes dans l'ordre LIFO (dernier entré - premier sorti). Chaque instruction dans cette langue est exécutée consécutivement l'une après l'autre.
Cette langue n'est pas Turing complet car sa fonctionnalité est limitée et il ne peut pas bouclers. Il ne peut donc résoudre aucun type de problème comme le machines de turing. Cependant, cette limitation est intentionnelle car elle empêche d'entrer dans une boucle infinie ou sans fin et d'exécuter des erreurs. Là où les parties malveillantes du programme peuvent être libres de créer des opérations compliquées pour consommer le taux de hachage et ralentissez le système Bitcoin à travers des boucles infinies.
Un langage de programmation est nécessaire car il nous permet d'écrire des programmes et aux ordinateurs d'exécuter nos souhaits. Dans Bitcoin, pour communiquer nos souhaits, les éléments suivants sont nécessaires codes d'opération (OP CODES), qui remplissent diverses fonctions. Comme la manipulation de la mémoire, les mathématiques, les boucles, les appels de fonction, entre autres.
Ainsi, Bitcoin Script est essentiellement un ensemble d'instructions programmées qui sont enregistrées avec chaque transaction effectuée. Ces instructions décrivent comment les utilisateurs peuvent accéder et utiliser les bitcoins disponibles sur le réseau.
Qu'est-ce qu'un OP_CODE ou un code d'opération?
En informatique, un OP_CODE (Code d'opération, en anglais) ou code d'opération, est une partie d'une instruction en langage machine qui spécifie l'opération à effectuer. Sa spécification et son format seront déterminés par l'architecture du jeu d'instructions (ISA) du composant qui traite l'instruction. Généralement, ce traitement est effectué par du matériel informatique (généralement un processeur).
Mais il peut aussi s'agir d'un logiciel spécialement préparé pour émuler le fonctionnement d'un CPU et traiter ces instructions. En général, une instruction complète en langage machine contient un OP_CODE et, éventuellement, la spécification d'un ou plusieurs opérandes, sur lesquels le code opération doit agir. Certaines opérations ont des opérandes implicites, voire aucun.
Dans Bitcoin et dans de nombreuses autres crypto-monnaies, OP_CODES est l'épine dorsale du système qui vous permet de programmer des instructions de transaction. N'oubliez pas que Bitcoin (et les autres crypto-monnaies qui en dérivent) sont de l'argent programmable. Et ici le mot-clé est "programmable", puisque Bitcoin Script est en fait un langage de programmation où les instructions sont données dans OP_CODES que le réseau Bitcoin a défini à l'avance pour son fonctionnement. En fait, en raison de la structure dans laquelle BItcoin a été créé, il est possible de définir 256 OP_CODES, différents qui commencent du numéro 0 à 255. Parmi ces 256 OP_CODES, un total de 116 sont actuellement actifs.
Ces OP_CODES sont ceux qui permettent d'effectuer les différentes opérations dans Bitcoin et sa programmation transactionnelle, telles que le contrôle de flux de données, la gestion constante, la gestion de la pile, la gestion logique, l'arithmétique, verrouillage du temps, pseudo-mots, opérations cryptographiques et mots réservés. Vous pouvez voir une liste complète et mise à jour des différents OP_CODES directement dans le code bitcoin.
scritpSig et scriptPubKey, les parties essentielles de tous les scripts Bitcoin
Dans le réseau Bitcoin, chaque script Bitcoin est divisé en deux types de scripts, le scriptSuivant y scriptPubKey. Le premier, le scriptSig est le script de déverrouillage, qui nécessite une clé publique et une signature numérique. En fait, après avoir détecté divers problèmes dans les premières versions du logiciel Bitcoin, des vérifications de signature ont été incluses. Par conséquent, le système n'accepte les transactions que si les signatures et leur vérification sont conformes à une série de règles établies qui garantissent un bon comportement sur le réseau.
Le deuxième, le scriptPubKey, est le script de verrouillage, qui contient un hachage de clé publique, également appelé adresse Bitcoin. Certains scripts Bitcoin nécessitent une multi-signature, c'est-à-dire l'autorisation de plusieurs utilisateurs pour effectuer la transaction. Dans ce cas, le script est plus compliqué car il s'agit d'une opération beaucoup plus volumineuse que l'opération peer-to-peer standard. En fait, la programmation réelle des transactions Bitcoin est stockée dans cette partie du script.
But de sa création
Le but de la création d'un langage de script en Bitcoin est de fournir une série de paramètres simples et flexibles pour permettre une transaction. Donc quand Satoshi Nakamoto développé Bitcoin, désactivé plusieurs fonctionnalités, y compris la multiplication. Le script reste donc simple en termes de programmation. Ensuite, ce langage de programmation est ce qui détermine si une opération peut être effectuée ou non. Autrement dit, si ladite opération est autorisée pour le transfert de fonds.
En termes simples, la création du script Bitcoin est ce qui confère la nature programmable de Bitcoin. C'est ce qui nous permet, par exemple, d'envoyer une transaction qui n'est validée que si certaines conditions sont remplies. Cette propriété est quelque chose d'unique au Bitcoin et aux crypto-monnaies, quelque chose que l'argent numérique actuel ne peut pas réaliser, et encore moins l'argent physique archaïque. C'est l'évolution de la monnaie qui a atteint un point où elle peut même agir de manière indépendante et décentralisée en s'occupant simplement de la programmation qui y est intégrée.
En outre, le script Bitcoin empêche également la création d'erreurs dans le système et l'utilisation inutile de transactions très complexes. En fait, le script rend les transactions relativement faciles à calculer. De plus, les boucles infinies nécessitent beaucoup plus de puissance de calcul et ralentissent les réseaux, comme mentionné au début.
Exemple de script Bitcoin
Avant de continuer à approfondir ce que c'est et les différents éléments qui composent un script Bitcoin, voyons un petit exemple de celui-ci. Ensuite, nous verrons un petit script Bitcoin largement utilisé aujourd'hui pour les transactions Bitcoin. Nous expliquerons son comportement et son fonctionnement ainsi que les différentes parties de celui-ci, puis approfondirons ses propriétés.
Exemple de script Bitcoin: transactions en Bitcoin utilisant le script P2PKH
Bitcoin Script est présent dans tous les stocks Bitcoin. La vérité est que chaque opération dans Bitcoin est effectuée par un script spécifique qui définit ce qui va être fait. En dehors de ce que dit le script, rien ne peut arriver.
Par exemple, si nous voulons effectuer une transaction, un script pour cela serait le suivant:
Tout le contenu ci-dessus est une simple transaction Bitcoin du type P2PKH (Payer au hachage de la clé publique). Ce type de script est un script standard et est en fait le moyen le plus utilisé pour envoyer des bitcoins. À première vue, cela apparaît comme quelque chose de très cryptique et difficile à comprendre. La vérité est que derrière une telle complexité, il y a un système simple que nous allons maintenant expliquer.
Expliquer en détail la transaction
Le script Bitcoin ci-dessus est délimité en deux parties: scriptPubKey y scriptSuivant. Le premier contient les actions à réaliser, tandis que le second contient la signature et la clé publique pour vérifier l'authenticité de telles actions. De cette manière, il est garanti que seuls ceux qui ont accès aux fonds peuvent effectuer une opération avec eux. D'autre part, il y a les OP_CODES qui dans l'opération sont les suivants:
- OP_DUP : Dupliquez l'élément dans la pile du haut.
- OP_HASH160 : L'entrée est encodée deux fois: d'abord avec SHA-256 et ensuite avec RIPEMD-160.
- OP_EQUALVERIFY : Vérifiez que les données saisies sont correctes et valides.
- OP_CHECKSIG : Les sorties, les entrées et le script de l'ensemble de la transaction sont résumés dans un hachage. La signature utilisée doit être une signature valide pour ce hachage et doit être à côté de la clé publique.
Maintenant, ce qui se passe lors de l'exécution du script est le suivant:
- Tout d'abord, la clé publique d'origine du propriétaire (qui se trouve dans le scriptSig) des fonds est dupliquée.
- La clé publique dupliquée passe ensuite par un processus de hachage. Dans ce processus, un hachage est appliqué en premier SHA-256 puis un hachage RIPEMD-160 est appliqué au résultat.
- Le résultat des hachages est comparé au hachage de la clé publique qui se trouve dans le scriptPubKey pour s'assurer qu'il s'agit bien d'EQUALVERIFY (c'est-à-dire qu'il s'agit de la même clé et qu'il est vérifié comme valide).
- S'il correspond, le script continue de s'exécuter et le CHECKSIG est effectué pour vérifier la signature par rapport à la clé publique.
De cette manière, tout ce qui est indiqué dans le script est exécuté en toute sécurité et de manière planifiée. Si vous voulez en savoir plus sur le fonctionnement de Bitcoin Script, vous pouvez visitez notre service Bit2Me TV, où vous pouvez voir des vidéos expliquant beaucoup plus sur cette langue intéressante.
Bitcoin Script, le langage de contrat intelligent de Bitcoin
Beaucoup de gens pensent et soutiennent que Bitcoin est incapable d'exécuter contrats intelligents. La vérité est que ce n'est pas vrai, car avec Bitcoin Script en tant que tel, vous créez des contrats intelligents. Certes, ses capacités sont limitées par rapport à ce qu'il peut faire par exemple Ethereum, mais cela ne signifie pas que Bitcoin Script a la capacité de créer des contrats intelligents. Mais expliquons cela de manière plus simple et plus détaillée.
Tout d'abord, comme nous l'avons dit, Bitcoin Script n'est pas un langage Full Turing. En effet, il ne nécessite pas une plus grande complexité pour exécuter ses fonctions prévues. Mais, l'une des principales raisons est qu'en n'ayant pas de boucles, vous pouvez savoir avec certitude quand et comment un certain programme se terminera. Il n'y a aucune possibilité pour l'exécution d'erreurs, ce qui vous donne une plus grande sécurité. De même, il n'y a aucune possibilité que les programmes soient bloqués ou bloquent leur exécuteur, qui dans ce cas est Bitcoin.
Un bon exemple de l'importance de ces protections serait qu'avec Bitcoin Script, il est impossible de créer des scripts qui s'exécutent indéfiniment. En fait, le risque d'un script qui tourne indéfiniment est qu'il ouvrirait les portes pour attaquer le réseau au moyen d'un attaque par déni de service (DoS).
Mais ce Bitcoin Script limite ce type d'opérations protège le réseau de telles attaques. Il n'y a donc aucune possibilité qu'un programme de script avec une boucle continue puisse empêcher Bitcoin de fonctionner correctement. En termes simples, Bitcoin Script est beaucoup plus sécurisé que ses homologues plus complexes tels que ceux présentés par Ethereum o NEO.
Évolution du script Bitcoin
Le langage Script est présent dans Bitcoin depuis sa première version. Satoshi Nakamoto, le développeur de Bitcoin, analysant la structure des paiements numériques, a déterminé qu'un modèle était nécessaire pour permettre à la machine de déterminer si les transactions avaient été effectuées et si les sorties avaient été effectuées avec succès ou non. Autrement dit, il sera vérifié si les signatures étaient correctes et si elles correspondaient à la clé publique.
C'est l'un des problèmes les plus étudiés en informatique, déterminant si les dépenses réussissent ou échouent dans le but d'éviter les doubles dépenses. Et la solution à cela était d'utiliser une machine qui répondait à certains critères établis. En Bitcoin, il doit toujours s'arrêter, donc l'implémentation d'un langage de Turing incomplet basé sur un système de pile est idéale. Ainsi, le mécanisme qui gère les scripts en Bitcoin est très simple et sécurisé.
Au début, le scénario comportait plusieurs erreurs graves et certaines existent toujours. Un exemple est le Bogue OP_LSHIFT, qui était connu comme le bug qui pourrait tuer Bitcoin. Ou le aussi connu Erreur de vérification de script que Gavin Andressen et Satoshi Nakamoto ont corrigée en 2010.
L'existence de ces types d'erreurs amènera beaucoup à croire que Nakamoto n'a pas effectué suffisamment de tests sur le script avant le lancement de Bitcoin. En fait, beaucoup pensent que le script était une réflexion après coup. L'idée originale de Nakamoto était peut-être d'envoyer des bitcoins directement aux clés publiques, mais en ajoutant la prise en charge des adresses Bitcoin, il s'est rendu compte qu'un langage de script serait vraiment utile pour assurer la compatibilité ascendante.
Caractéristiques
Le langage Bitcoin Script possède plusieurs caractéristiques et qualités, parmi lesquelles on peut citer:
- C'est simple et nécessite un traitement minimal.
- Sa fonctionnalité est limitée, ce qui offre une plus grande sécurité au système.
- Étant un langage de Turing incomplet, il n'a pas de boucles, il est donc garanti que le programme cesse de se répéter et se termine. Ainsi, la possibilité d'erreurs et de codes malveillants sur le réseau Bitcoin est évitée.
- Sa simplicité lui permet d'être implémenté dans une large gamme d'appareils.
- Il n'y a pas d'état avant ou après exécution du script. Toutes les informations nécessaires à l'exécution du script doivent y figurer.
- Il est basé sur une pile et peut utiliser deux types. Une principale et une alternative. Où ce dernier est utilisé pour stocker des données pour les calculs d'étape intermédiaire. Tout comme la touche mémoire sur les calculatrices.
- Le langage de script Bitcoin est assez petit. Il ne peut contenir que 256 instructions, car chaque instruction est exprimée en un octet.