Les + populaires

BTC ETH SOL XRP BNB USDC USDT

Suivez-nous

Bitcoin a toujours eu des contrats intelligents : script, partie n°1 | par Ishaana Misra | Coinmoines | nov. 2021

IAavec
Ishaana Misra

Alors que j’apprenais le fonctionnement de Bitcoin sous le capot, j’ai été assez surpris de découvrir que Bitcoin a des contrats intelligents, du moins dans une mesure limitée. Bien qu’ils soient assez simples, ces contrats puissants sont ce qui permet la sécurité des transactions Bitcoin. Il est également important de comprendre comment ces scripts fonctionnent pour comprendre ce que fait Taproot.

En savoir plus sur les transactions Bitcoin peut être un peu déroutant au début, alors commençons par la blockchain, où toutes les transactions sont stockées. La blockchain est une structure de données qui garde une trace de nos transactions comme un grand livre numérique. Chaque bloc de cette blockchain contient un certain nombre de transactions. La question est, à quoi ressemblent ces transactions ? Souvent, lors de l’explication initiale du fonctionnement d’une blockchain, nous pouvons donner l’impression qu’il s’agit d’un tas de soldes et d’adresses pseudo-anonymes auxquelles appartiennent ces fonds. Afin de comprendre comment fonctionnent réellement les transactions en Bitcoin, nous devrons laisser cette impression derrière nous.

Parlons de ce à quoi ressemble une seule transaction Bitcoin. Chaque transaction peut avoir plusieurs entrées et plusieurs sorties. Une sortie de transaction ne comprend qu’un montant de bitcoin (en satoshis) et les conditions dans lesquelles ce bitcoin peut être dépensé (appelé un script de verrouillage).

Il existe deux types de sorties de transaction : les sorties de transaction non dépensées (UTXO) et les sorties de transaction dépensées (STXO). Un UTXO est une sortie de transaction dont les conditions n’ont pas encore été satisfaites. Ces conditions ne peuvent être remplies qu’une seule fois, car une fois qu’elles le sont, la sortie de la transaction n’est plus un UTXO, mais un STXO qui ne peut plus être dépensé.

Les entrées de transaction sont la façon dont les UTXO sont dépensés. Les entrées de transaction contiennent l’identifiant de transaction de l’UTXO qu’ils dépensent, un index qui indique quel UTXO de cette transaction ils dépensent (car, rappelez-vous, une transaction peut avoir plusieurs sorties avec différents scripts de verrouillage), et un script de déverrouillage. Le but du script de déverrouillage est simplement de satisfaire les conditions précédemment définies par le script de verrouillage qu’ils essaient de passer.

Votre solde est donc ne pas stocké sur la blockchain avec votre adresse Bitcoin, juste plusieurs UTXO pouvant être dépensés par la même clé privée. Un portefeuille Bitcoin peut calculer votre solde en scannant les UTXO et en voyant ceux qui peuvent être échangés par votre clé privée. La somme de ceux-ci est votre solde.

Examinons plus en détail le fonctionnement des scripts de verrouillage et de déverrouillage ainsi que les différents types de scripts de verrouillage.

Ce langage est différent de la plupart des langages de programmation avec lesquels nous travaillons de nos jours. Bien que cela puisse sembler un peu étrange et basique au début, comme beaucoup d’autres choses en ce qui concerne Bitcoin, il a de très bonnes raisons pour son design unique. Les deux distinctions essentielles entre Scénario et les autres langues sont les suivantes :

  1. Turing n’a-t-il pas terminé

Un langage complet de Turing est un langage qui peut exprimer n’importe quel programme possible. Ceci est également considéré comme étant capable de résoudre tout problème éventuel. Le hic ici est que vous ne pouvez jamais savoir à l’avance quand le programme se terminera. Un langage complet de Turing comprend des boucles qui peuvent s’exécuter pendant de longues périodes. Ainsi, bien qu’il puisse résoudre n’importe quel problème possible, il suppose une mémoire infinie et vous ne pouvez pas connaître le temps d’exécution à l’avance.

Avoir un langage de script complet Turing serait problématique pour Bitcoin car chaque nœud du réseau Bitcoin doit pouvoir valider chaque transaction et un temps d’exécution prévisible est nécessaire. Donc, Scénario Turing n’est pas terminé. Il contient principalement des instructions conditionnelles If…Then…Else et n’a aucune boucle ou récursivité qui pourrait introduire des temps d’exécution imprévisibles.

De plus, Bitcoin utilise un empiler, une sorte de structure de données où vous ne pouvez ajouter que sur le dessus, et uniquement supprimer à partir du dessus. C’est ce qu’on appelle une méthode First In, Last Out (FILO) pour accéder aux objets. Vous pouvez ajouter à une pile à l’aide de l’opérateur « pousser », qui ajoute un objet au sommet de la pile, et vous pouvez supprimer des objets à l’aide de l’opération « pop » qui supprime l’objet au sommet de la pile.

Bien que cela constitue un langage primitif en termes de fonctionnalités, il répond avec succès aux exigences spécialisées de Bitcoin. Par exemple, dans un langage de programmation plus largement utilisé, comme Python, l’addition de deux nombres ressemblera généralement à ceci :

1 + 1

Cela renverrait 2. Assez simple, non?

Avec Script, cela ressemblerait à :

OP_1 OP_1 OP_ADD

1 est poussé sur la pile, puis un autre 1 est poussé sur la pile. Ensuite, l’opérateur « ADD », qui extrait deux valeurs de la pile, les ajoute, puis pousse leur résultat sur la pile, est exécuté. La seule valeur restante sur la pile est 2 et le programme se termine.

P2PKH

En ce qui concerne les transactions Bitcoin, il existe différents types de scripts de transaction. Le plus courant est Pay-To-Public-Key-Hash (P2PKH), qui ressemble à ceci :

OP_DUP OP_HASH160 <public key hash> OP_EQUALVERIFY OP_CHECKSIG

Et peut être dépensé avec ce script de déverrouillage :

<signature> <public key>

Alors, comment ces scripts sont-ils exécutés et validés ? Si une nouvelle transaction est créée qui prend le script de verrouillage indiqué ci-dessus et utilise le script de déverrouillage suivant pour la dépenser (en tant qu’entrée pour sa transaction), un nœud peut la vérifier en exécutant les scripts de déverrouillage et de verrouillage ensemble. Le nœud copie le script de déverrouillage à partir de l’entrée de transaction, copie le script de verrouillage à partir de l’UTXO référencé par l’entrée, puis les scripts de déverrouillage et de verrouillage sont exécutés dans la séquence, de sorte qu’il ressemble à ceci :

<signature> <public key> OP_DUP OP_HASH160 <public key hash> OP_EQUALVERIFY OP_CHECKSIG

Pour le décomposer, il y a deux parties clés de ce script combiné. La première consiste à s’assurer que la clé publique fournie par le script de déverrouillage a un hachage de clé publique égal au hachage de clé publique spécifié par le script de verrouillage (un hachage de clé publique est égal au hachage RIPEMD160 du hachage SHA-256[when both of these hashes are used in this order it is also referred to as HASH160] de la clé publique).

La deuxième partie de la clé vérifie la signature à l’aide de « OP_CHECKSIG » qui prend la signature et la clé publique correspondante comme entrées et envoie une valeur vraie ou fausse à la pile.

P2SH

Un autre type de script de transaction courant dans Bitcoin est Pay-to-Script-Hash (P2SH), qui permet divers formats de transaction. Avec P2SH, il existe un script de verrouillage, un script de déverrouillage et un script de rachat. Le script de rachat est le script qui spécifie les conditions à remplir pour dépenser le montant alloué de Bitcoin. Pour ces exemples, disons qu’il s’agit de notre script de rachat :

<3> <Public Key 1> <Public Key 2> <Public Key 3> <Public Key 4> <4> OP_CHECKMULTISIG

OP_CHECKMULTISIG nous permet d’avoir des transactions multisig. Ce sont des transactions avec de nombreuses clés publiques valides qui peuvent passer la transaction, ainsi qu’un nombre spécifié de signatures distinctes nécessaires pour la dépenser avec succès. Dans le script de rachat ci-dessus, il y a 4 signataires valides de la transaction, et seulement 3 transactions sont nécessaires pour que les fonds soient dépensés. Cela en fait ce qu’on appelle un multisig 3 sur 4.

Le script de verrouillage, en revanche, ne contient pas ces conditions. Au lieu de cela, il s’agit d’un script avec le HASH160 du script de rachat. Cela ressemble à quelque chose comme ça :

OP_HASH160 <hash of redeem script> OP_EQUAL

Ce script de verrouillage indique que le script de déverrouillage doit fournir le script de rachat, qui est ensuite haché pour confirmer que les mêmes conditions qui ont été définies sont remplies, tout en remplissant réellement les conditions définies par le script de rachat. L’UTXO ne contient pas le script de rachat, c’est juste du hachage, d’où le nom « Pay-to-Script-Hash ».

Le script de déverrouillage ressemble à ceci :

<Signature 1> <Signature 2> <Signature 3> <<3> <Public Key 1> <Public Key 2> <Public Key 3> <Public Key 4> <4> OP_CHECKMULTISIG>

Cela semble long, mais il s’agit essentiellement de fournir le script de rachat ainsi que les signatures requises pour qu’il aboutisse à VRAI, vous permettant ainsi de passer la transaction.

Cela signifierait que l’exécution du script de déverrouillage avec le script de verrouillage ressemblerait à :

<Signature 1> <Signature 2> <Signature 3> <<3> <Public Key 1> <Public Key 2> <Public Key 3> <Public Key 4> <4> OP_CHECKMULTISIG> OP_HASH160 <hash of redeem script> OP_EQUAL

Voici le détail de son fonctionnement :

P2SH est plus flexible que P2PKH car il existe de nombreuses possibilités pour ce à quoi le script de rachat peut ressembler.

Bien qu’ils ne soient pas aussi flexibles que les contrats intelligents Ethereum écrits en Solidity, qui sont complets et à usage beaucoup plus général, les contrats intelligents limités de Bitcoin permettent des transactions simples et quelque peu complexes en mettant l’accent sur la sécurité !

Source medium.com

Investissez en bourse
Trade Republic
10€ offerts en actions

Donnez votre avis

Soyez le 1er à noter cet article


Partagez cet article maintenant !

Envoyez simplement nos contenus crypto et finance à vos proches.