Le meilleur guide étape par étape des scripts Bitcoin, partie 1

Le but de ce guide est de vous aider à comprendre la logique derrière Bitcoin Script. Puisqu’il y aura trop de choses à couvrir, le guide sera divisé en deux parties.

Bitcoin a été créé dans un seul but… les transactions. Bitcoin a pu montrer au monde entier qu’un système de paiement peut exister sur un système peer-to-peer décentralisé. Cependant, que se passe-t-il dans les coulisses de ces transactions? Derrière chaque petite transaction, il y a du code qui fonctionne en arrière-plan. Ce code est le langage de script Bitcoin ou simplement Bitcoin Script pour faire court.

Le meilleur guide de script Bitcoin

Introduction au script Bitcoin

Script est un langage Turing incomplet de type Forth, basé sur une pile, à polissage inverse. Oui, cela semble très compliqué, mais ce n’est vraiment pas le cas. Passons en revue chaque terme en sens inverse.

Turing incomplet

Un langage Turing incomplet aura des fonctionnalités limitées et ne sera pas capable de faire des sauts et / ou des boucles. Par conséquent, ils ne peuvent pas entrer dans une boucle sans fin. Être Turing Complete signifie que compte tenu des ressources et de la mémoire, un programme Turing Complete sera capable de résoudre n’importe quel problème. Solidity est un exemple de langage Turing Complete.

Alors, pourquoi Bitcoin Script Turing n’est-il pas complet??

Parce que ce n’est pas nécessaire. Bitcoin Script n’a pas besoin d’être aussi compliqué qu’un contrat intelligent Ethereum. En fait, si un script était Turing Complete, cela aurait donné aux parties malveillantes la liberté de créer des transactions compliquées et de grignoter le taux de hachage du réseau Bitcoin et de ralentir l’ensemble du système..

#Crypto ExchangeBenefits

1

Binance
Best exchange


VISIT SITE
  • ? The worlds biggest bitcoin exchange and altcoin crypto exchange in the world by volume.
  • Binance provides a crypto wallet for its traders, where they can store their electronic funds.

2

Coinbase
Ideal for newbies


Visit SITE
  • Coinbase is the largest U.S.-based cryptocurrency exchange, trading more than 30 cryptocurrencies.
  • Very high liquidity
  • Extremely simple user interface

3

eToro
Crypto + Trading

VISIT SITE
  • Multi-Asset Platform. Stocks, crypto, indices
  • eToro is the world’s leading social trading platform, with thousands of options for traders and investors.

Polonais inversé

La notation polonaise inversée est un système où les opérateurs suivent les opérandes.

Sens:

  • 3 + 4 apparaîtra comme 34+.
  • Donc, pour des sommes plus longues et plus compliquées:
  • 5 * 3 + 4 apparaîtra comme 534 + *.

Basé sur la pile

#CRYPTO BROKERSBenefits

1

eToro
Best Crypto Broker

VISIT SITE
  • Multi-Asset Platform. Stocks, crypto, indices
  • eToro is the world’s leading social trading platform, with thousands of options for traders and investors.

2

Binance
Cryptocurrency Trading


VISIT SITE
  • ? Your new Favorite App for Cryptocurrency Trading. Buy, sell and trade cryptocurrency on the go
  • Binance provides a crypto wallet for its traders, where they can store their electronic funds.

#BITCOIN CASINOBenefits

1

Bitstarz
Best Crypto Casino

VISIT SITE
  • 2 BTC + 180 free spins First deposit bonus is 152% up to 2 BTC
  • Accepts both fiat currencies and cryptocurrencies

2

Bitcoincasino.io
Fast money transfers


VISIT SITE
  • Six supported cryptocurrencies.
  • 100% up to 0.1 BTC for the first
  • 50% up to 0.1 BTC for the second

Les piles sont l’une des structures de données les plus populaires du marché. Selon Wikibooks, ils peuvent être logiquement considérés comme une structure linéaire représentée par une véritable pile ou pile physique, une structure où l’insertion et la suppression d’éléments ont lieu à une extrémité appelée sommet de la pile.

L’idée de base de la pile est LIFO ou Last In First Out. Considérez la pile de livres suivante:

Le meilleur guide de script Bitcoin

Quel a été le premier livre mis sur cette pile? Loup solitaire & Louveteau, non? Quel était le dernier livre? Jardins de la Lune.

Si l’on sortait un livre de cette pile, Lone Wolf & Louveteau ne sera pas le livre que vous sortez en premier, Gardens of the Moon sera le premier que vous sortez.

Par conséquent, dernier entré, premier sorti.

Le dernier livre qui est allé sur cette pile sera le premier livre sorti.

Maintenant, il y a deux opérations de pile que vous devez connaître:

  • Pousser.
  • Pop.

Pousser: L’acte d’ajouter des choses dans la pile s’appelle pousser.

Pop: Le fait de retirer des éléments de la pile est appelé popping. Comme cela a été mentionné précédemment, le dernier élément qui a été poussé dans la pile est sorti en premier.

Le meilleur guide de script Bitcoin

Crédit d’image: Wikimedia

Forth-like

Celui-ci est assez simple. Bitcoin Script ressemble au langage de programmation «Forth» qui se trouve également être basé sur la pile.

Alors, maintenant que nous savons au moins ce qu’est un script, voyons comment fonctionnent les transactions.

Comment fonctionnent les transactions dans un Bitcoin?

Avant de continuer, un grand merci au professeur Donald J Patterson et à sa chaîne Youtube «djp3» pour l’explication.

Supposons qu’Alice veuille envoyer un certain nombre de bitcoins à Bob. Comment fonctionne le système de transaction en Bitcoin? Les transactions bitcoin sont très différentes des transactions de portefeuille Fiat. Si Alice donnait 2 $ à Bob, elle prendrait physiquement 2 dollars de son portefeuille et le donnerait à Bob. Cependant, les choses ne fonctionnent pas comme ça dans Bitcoin. Vous ne possédez pas physiquement de Bitcoin, ce que vous avez est la preuve que vous avez des Bitcoins.

Il y a deux autres choses que vous devez savoir:

  • Les mineurs valident vos transactions en mettant les données dans les mines qu’ils ont bloquées. En échange de ce service, ils facturent des frais de transaction.

  • En ce qui concerne la devise FIAT, vous ne savez pas vraiment comment et d’où vous avez obtenu cette note spécifique. Par exemple. Ouvrez votre portefeuille maintenant et retirez toutes les pièces et billets qu’il contient. Pouvez-vous dire d’où exactement avez-vous obtenu chaque billet et chaque pièce? Il y a de fortes chances que ce ne soit pas le cas. Cependant, dans Bitcoin, l’historique de chaque transaction Bitcoin est pris en compte.

Ok, alors passons maintenant à un examen approfondi de la façon dont une transaction Bitcoin entre Alice et Bob se déroule. Il y a deux côtés à une transaction, l’entrée et la sortie. Cette transaction entière aura un nom que nous découvrirons à la fin. Pour l’instant, examinons la dynamique.

Entrée de transaction

Afin de réaliser cette transaction, Alice doit obtenir des bitcoins qu’elle a reçus de diverses transactions précédentes. Rappelez-vous, comme nous l’avons déjà dit, dans les bitcoins, chaque pièce est comptabilisée via un historique des transactions.

Donc, supposons qu’Alice ait besoin d’extraire des bitcoins des transactions suivantes que nous nommerons TX (0), TX (1) et TX (2). Ces trois transactions seront additionnées et cela vous donnera la transaction d’entrée que nous appellerons TX (Input).

Schématiquement, cela ressemblera à ceci:

Le meilleur guide de script Bitcoin

Donc, c’est tout du côté de l’entrée, voyons à quoi ressemblera le côté de la sortie.

Sortie de transaction

La sortie aura essentiellement le nombre de bitcoins que Bob possédera, après la transaction et tout changement restant qui reste, qui est ensuite renvoyé à Alice. Ce changement devient alors sa valeur d’entrée pour toutes les transactions futures.

Une représentation graphique du côté sortie ressemble à ceci:

Le meilleur guide de script Bitcoin

Maintenant, c’est une transaction très simple qui n’a qu’une seule sortie (à part le CHANGE), il y a des transactions qui sont possibles avec plusieurs sorties.

Voici à quoi ressemble la présentation de base de la transaction. Pour que tout cela passe, cependant, certaines conditions doivent être remplies.

Conditions d’une transaction

  • TX (entrée) > TX (sortie). La transaction d’entrée doit toujours être supérieure à la transaction de sortie. Dans toute transaction, le déficit entre l’entrée et la sortie (sortie + changement) correspond aux frais de transaction que les mineurs perçoivent. Alors:

    Frais de transaction = TX (entrée) – (TX (sortie) + changement).

  • Du côté de l’entrée:

    TX (0) + TX (1) + TX (2) = TX (entrée).

    Si Alice n’a pas les fonds nécessaires pour effectuer les transactions, les mineurs rejetteront simplement les transactions.

  • Bob devra montrer qu’il peut fournir la preuve nécessaire pour obtenir les bitcoins. Alice verrouille les transactions avec l’adresse publique de Bob. Il devra produire sa clé privée pour débloquer les transactions et accéder à ses frais.

  • Alice doit également vérifier qu’elle dispose des droits requis pour envoyer les bitcoins en premier lieu. La façon dont elle le fait est de signer la transaction avec sa signature numérique (alias sa clé privée). N’importe qui peut le décoder en utilisant sa clé publique et vérifier que c’est bien Alice qui a envoyé les données. Cette preuve est appelée «Données de signature». Souvenez-vous de cela car ce sera très important plus tard.

Alors, quel sera le nom de toute cette transaction?

L’entrée (y compris les données de signature) et les données de sortie sont additionnées et hachées à l’aide de l’algorithme de hachage SHA 256. Le hachage de sortie est le nom donné à cette transaction.

Alors, jetons maintenant un coup d’œil dans les coulisses et voyons à quoi ressemble réellement la transaction.

La transaction de script Bitcoin: dans les coulisses

Voici à quoi ressemble la transaction sous forme de code.

Supposons qu’Alice veuille envoyer 0,0015 BTC à Bob et que pour ce faire, elle envoie des entrées qui valent 0,0015770 BTC. Voici à quoi ressemble le détail de la transaction:

Le meilleur guide de script Bitcoin

Image courtoisie: chaîne YouTube DJP3.

La première ligne que vous voyez:

Le meilleur guide de script Bitcoin

Est le nom de la transaction aka le hachage de la valeur d’entrée et de sortie.

Vin_sz est le nombre de données d’entrée puisque Alice envoie les données en utilisant une seule de ses transactions précédentes, c’est 1.

Vout_sz vaut 2 car les seules sorties sont Bob et le changement.

Voici les données d’entrée:

Le meilleur guide de script Bitcoin

Voir les données d’entrée? Alice n’utilise qu’une seule transaction d’entrée (dans l’exemple que nous avons donné ci-dessus, ce sera TX (0)), c’est la raison pour laquelle vin_sz était 1.

Sous les données d’entrée se trouvent ses données de signature.

Sous tout cela se trouvent les données de sortie:

Le meilleur guide de script Bitcoin

La première partie des données signifie que Bob obtient 0,0015 BTC.

La deuxième partie signifie que 0.00005120 BTC est ce qu’Alice récupère en tant que changement.

Maintenant, rappelez-vous que les données d’entrée étaient de 0,0015770 BTC? Ceci est supérieur à (0,0015 + 0,00005120). Le déficit de ces deux valeurs correspond aux frais de transaction que les mineurs perçoivent.

Un examen plus approfondi des résultats des transactions

Comme nous l’avons vu ci-dessus, chaque entrée d’une transaction se transforme en sorties, certaines de ces sorties sont dépensées, tandis que d’autres ne sont pas dépensées et deviennent des changements. Cette modification est également appelée UTXO ou sortie de transaction non dépensée. UTXO devient ensuite des entrées dans les transactions futures.

Chaque sortie de transaction se compose de deux parties:

  • La valeur de cette sortie.

  • Le puzzle cryptographique qui a appelé un script de verrouillage, ou un script témoin ou un scriptPubKey. Le puzzle doit être déverrouillé pour pouvoir dépenser l’argent. Ce puzzle est codé en utilisant le langage de script bitcoin.

Examinons donc les résultats d’une transaction pour identifier les parties mentionnées ci-dessus. Code tiré d’Andreas M. Antonopoulos. «Maîtriser le bitcoin.»

“Vout": [

{

"évaluer": 0,01500000,

"scriptPubKey": "OP_DUP OP_HASH160 ab68025513c3dbd2f7b92a94e0581f5d50f654e7 OP_EQUALVERIFY OP_CHECKSIG"

},

{

"évaluer": 0,08450000,

"scriptPubKey": "OP_DUP OP_HASH160 7f9b1a7fb68d60c536c2fd8aeaa53a8f3cc025a8 OP_EQUALVERIFY OP_CHECKSIG",

}

]

D’accord, nous avons donc deux sorties dans le code ci-dessus.

Une sortie a une valeur de 0,015 BTC tandis que l’autre a une valeur de 0,0845 BTC. Afin de déverrouiller la valeur de 0,015, le script de verrouillage dont on a besoin pour déverrouiller va comme ceci:

“ScriptPubKey”: “OP_DUP OP_HASH160 ab68025513c3dbd2f7b92a94e0581f5d50f654e7 OP_EQUALVERIFY OP_CHECKSIG”

Un examen encore plus attentif des entrées de transaction

Examinons maintenant l’autre côté de la médaille, les entrées de transaction.

Afin de faire une entrée, le portefeuille de l’utilisateur passe par ses UTXO et sélectionne ceux qui ont une valeur suffisante pour que la transaction puisse passer.

Par exemple. si Alice veut envoyer 0,15 BTC à Bob et ici l’ensemble UTXO ressemble à ceci:

  • UTXO A = 0,09 BTC
  • UTXO B = 0,2 BTC
  • UTXO C = 0,005 BTC

Quels UTXO seront choisis pour cette transaction? C’est correct, A et B seront choisis et tout ce qui reste deviendra l’UTXO pour la prochaine transaction d’Alice.

Voyons maintenant un code d’entrée.

«Vin": [

{

"txid": "7957a35fe64f80d234d76d83a2a8f1a0d8149a41d81de548f0a65a8a999f6f18",

"vout": 0,

"scriptSig" : "3045022100884d142d86652a3f47ba4746ec719bbfbd040a570b1deccbb6498c75c4ae24cb02204b9f039ff08df09cbe9f6addac960298cad530a863ea8f53982c09db8f6e3813 [ALL] 0484ecc0d46f1918b30928fa0e4ed99f16a0fb4fde0735e7ade8416ab9fe423cc5412336376789d172787ec3457eee41c04f4938de5cc17b4a10fa336a8d752adf",

"séquence": 4294967295

}

]

Voyons ce que contient chaque partie du script d’entrée:

  • txid: L’ID de transaction fait référence à la transaction à partir de laquelle cet UTXO a été généré. Cela permet de suivre la transaction

  • vout: Cela fait référence à la sortie de cette transaction utilisée. Par exemple. si cette transaction avait deux UTXO, la première sera étiquetée 0 (car comme nous l’avons vu précédemment, le comptage commence à partir de 0 et non de 1) et la seconde sera étiquetée 1. Dans ce cas, nous utilisons le premier UTXO ieUTXO 0.

  • scriptSig: Comme nous l’avons mentionné précédemment, chaque UTXO contient un script de verrouillage. Le scriptSig comprend les données nécessaires pour déverrouiller les données.

  • séquence: A été inclus pour aider les gens à mettre à jour leurs transactions avant qu’elles ne soient confirmées et finalisées dans un bloc, pas vraiment pertinent pour aider à comprendre les bases.

Sérialisation des transactions

Maintenant, rassemblons cela et voyons ce que nous avons. Lorsqu’une transaction est relayée sur un réseau, elles sont sérialisées. Comme le dit Andreas Antonopoulos,

«La sérialisation est le processus de conversion de la représentation interne d’une structure de données dans un format qui peut être transmis un octet à la fois, également appelé flux d’octets.»

Dans les deux sections précédentes, nous avons vu une simple transaction d’entrée et de sortie. si nous devions le sérialiser et le stocker au format hexadécimal, à quoi ressemblerait-il?

0100000001186f9f998a5aa6f048e51dd8419a14d8a0f1a8a2836dd73 4d2804fe65fa35779000000008b483045022100884d142d86652a3f47 ba4746ec719bbfbd040a570b1deccbb6498c75c4ae24cb02204b9f039 ff08df09cbe9f6addac960298cad530a863ea8f53982c09db8f6e3813 01410484ecc0d46f1918b30928fa0e4ed99f16a0fb4fde0735e7ade84 16ab9fe423cc5412336376789d172787ec3457eee41c04f4938de5cc1 7b4a10fa336a8d752adfffffffff0260e31600000000001976a914ab6 8025513c3dbd2f7b92a94e0581f5d50f654e788acd0ef800000000000 1976a9147f9b1a7fb68d60c536c2fd8aeaa53a8f3cc025a888ac 00000000

Oui, cet auteur ne s’est pas cogné la tête accidentellement sur le clavier ici… c’est à quoi cela ressemble en réalité.

Cependant, n’ayez pas peur. Nous y donnerons un sens assez tôt. Quelque part dans ce flux hexadécimal, nous avons des données d’entrée et nos données de sortie. Trouvons les deux!

La sérialisation de sortie

La sérialisation de la partie sortie de la transaction comprend les parties suivantes:

Le meilleur guide de script Bitcoin

Crédit d’image: Andreas Antonopoulos «Mastering Bitcoin»

Maintenant, quelles données sur la sortie savons-nous réellement?

  • Il y a deux valeurs de sortie.

  • Une valeur de sortie vaut 0,015 BTC ou 1,500,000 satoshis

  • En hexadécimal 1,500,000 est 16 e3 60, ce qui, lorsqu’il est codé en petit-boutiste, c’est-à-dire l’octet le moins significatif, donne 60 e3 16.

  • La longueur de scriptPubKey est de 25 octets, soit 19 en hexadécimal.

Alors, prenez note de ces informations, recherchons nos données de sortie.

0100000001186f9f998a5aa6f048e51dd8419a14d8a0f1a8a2836dd73 4d2804fe65fa35779000000008b483045022100884d142d86652a3f47 ba4746ec719bbfbd040a570b1deccbb6498c75c4ae24cb02204b9f039 ff08df09cbe9f6addac960298cad530a863ea8f53982c09db8f6e3813 01410484ecc0d46f1918b30928fa0e4ed99f16a0fb4fde0735e7ade84 16ab9fe423cc5412336376789d172787ec3457eee41c04f4938de5cc1 7b4a10fa336a8d752adfffffffff0260e31600000000001976a914ab6 8025513c3dbd2f7b92a94e0581f5d50f654e788acd0ef800000000000 1976a9147f9b1a7fb68d60c536c2fd8aeaa53a8f3cc025a888ac 00000000

La sérialisation d’entrée

La sérialisation d’entrée contient les composants suivants:

Le meilleur guide de script Bitcoin

Vous pouvez maintenant localiser l’entrée de sa transaction?

0100000001186f9f998a5aa6f048e51dd8419a14d8a0f1a8a2836dd73 4d2804fe65fa35779000000008b483045022100884d142d86652a3f47 ba4746ec719bbfbd040a570b1deccbb6498c75c4ae24cb02204b9f039 ff08df09cbe9f6addac960298cad530a863ea8f53982c09db8f6e3813 01410484ecc0d46f1918b30928fa0e4ed99f16a0fb4fde0735e7ade84 16ab9fe423cc5412336376789d172787ec3457eee41c04f4938de5cc1 7b4a10fa336a8d752adfffffffff0260e31600000000001976a914ab6 8025513c3dbd2f7b92a94e0581f5d50f654e788acd0ef800000000000 1976a9147f9b1a7fb68d60c536c2fd8aeaa53a8f3cc025a888ac 00000000

D’accord, alors qu’avons-nous vu jusqu’à présent?

  • Les sorties d’une transaction et les UTXO.
  • Les entrées d’une transaction.
  • Comment l’ensemble de la transaction est sérialisé.

Maintenant, nous savons que les UTXO ne peuvent être utilisés que s’ils sont déverrouillés. Nous savons que les valeurs d’entrée ont scriptSig qui permet de les déverrouiller. Comment interagissent-ils les uns avec les autres?

Avant d’en arriver là, nous devrions avoir une idée de la façon dont les calculs et les opérations se déroulent dans un script bitcoin..

Comment fonctionne le script?

Avant de continuer avec Script, il sera utile de comprendre comment fonctionne un système de polissage inversé basé sur la pile..

Ajout simple dans un système de polissage inversé basé sur une pile

Comme nous l’avons déjà dit, 3 + 4 en polissage inversé ressembleront à 34+, exécutons l’opération d’addition en utilisant une pile.

Le meilleur guide de script Bitcoin

C’est ainsi qu’une simple opération d’addition est effectuée sur la pile. Maintenant que cela est fait, à quoi cela ressemblerait-il s’il s’agissait d’un script?

OP_3 OP_4 OP_ADD

Juste l’apparence change, le reste de l’opération reste le même que celui indiqué ci-dessus. Le préfixe «OP_» est une signature du langage de script.

Si vous voulez une introduction sur les différents Opcodes utilisés dans un script puis cliquez ici.

Ajout simple à l’aide d’un script Bitcoin avec un chèque

Supposons maintenant que nous voulions faire 2 + 3 = 5.

En polonais inversé, cela ressemblera à 23 + 5 =.

Dans la notation de script, cela ressemblera à ceci:

OP_2 OP_3 OP_ADD OP_5 OP_EQUAL

Le meilleur guide de script Bitcoin Le meilleur guide de script Bitcoin

Maintenant, que serait-il arrivé si nous avions utilisé le suffixe VERIFY dans EQUAL? Cela signifie qu’au lieu de OP_EQUAL, nous avons utilisé OP_EQUALVERIFY?

Au moment où vous ajoutez le suffixe VERIFY, TRUE ou FALSE ne sont pas poussés sur la pile, à la place, le script continue exécution si TRUE ou il s’arrête exécution si elle est FAUX.

C’est ce qui se passe lorsque vous ajoutez «VERIFY» à un opcode. Gardez cela à l’esprit pour de futurs exemples.

Très bien, prenons un dernier exemple.

Duplication simple dans le script

Nous prenons cet exemple juste pour vous présenter un opcode extrêmement important, DUP aka duplicate.

Nous voulons pousser un nombre dans une pile, le dupliquer et voir si les deux nombres sont identiques ou non (ce qu’il sera évidemment).

Nous allons utiliser ce script:

OP_5 OP_DUP OP_EQUALVERIFY

Le meilleur guide de script Bitcoin

Très bien, maintenant vous avez une idée de la façon dont les calculs sont traités dans Bitcoin Script, continuons nos transactions et voyons comment elles sont exécutées.

Le jeu du verrouillage et du déverrouillage

Les transactions en bitcoin sont un jeu constant de verrouillage et de déverrouillage. Les UTXO sont verrouillés par le scriptPubKey tandis que les entrées de la transaction contiennent le scriptSig. L’idée de scriptPubKey est de proposer un puzzle cryptographique qui ne peut être débloqué que via le scriptSig correspondant.

Alors, que se passe-t-il exactement et comment se joue ce jeu?

Supposons qu’Alice veuille envoyer à Bob du bitcoin. L’adresse publique de Bob est de notoriété publique et elle enverra ses Bitcoins à l’adresse publique de Bob avec une condition, Bob doit prouver que c’est bien lui qui obtient le bitcoin.

Maintenant, revenons un peu en arrière et revisitons quelques concepts de base.

Tout le monde dans Bitcoin a deux clés:

La clé publique est dérivée cryptographiquement de la clé privée.

Maintenant, pour que l’argent leur soit envoyé, tout le monde doit avoir une adresse publique. Le public est exécuté via deux algorithmes de hachage, SHA-256 et RIPEMD-160. La raison pour laquelle nous faisons cela est de nous assurer que vous disposez d’une couche de protection supplémentaire, SI dans le cas où quelqu’un comprend d’une manière ou d’une autre comment générer votre clé privée à l’aide de votre clé publique (ce qui est irréalisable).

Noter: La clé publique passe d’abord par SHA-256 pour donner un hachage de sortie de 256 bits, puis ce hachage est exécuté via RIPEMD-160 qui donne un hachage de sortie de 160 bits. Ainsi, la sortie finale est un hachage de 160 bits.

D’accord, alors Alice enverra l’argent à l’adresse publique de Bob avec une condition selon laquelle Bob doit montrer une preuve, que c’est bien lui qui a obtenu l’argent.

La preuve que Bob utilise pour débloquer les fonds est sa signature numérique, qui est dérivée cryptographiquement de sa clé privée..

Pensez aux transactions qu’Alice envoie à Bob comme un coffre verrouillé et à la signature de Bob comme mot de passe.

Maintenant, revenons à notre script.

Alice envoie à Bob une sortie contenant le scriptPubKey, qui inclut l’adresse de Bob.

Bob déverrouille l’entrée en utilisant sa signature de scriptSig qui comprend sa signature et sa clé publique.

Alors, comment représentons-nous cela dans le code?

scriptPubKey = OP_DUP OP_HASH160 OP_EQUALVERIFY OP_CHECKSIG.

Noter: Le fonctionnement de OP_HASH160 et OP_CHECKSIG sera bientôt clair pour vous.

scriptSig =

Afin de déverrouiller la sortie et d’utiliser ses fonds, Bob concatène ou rejoint en quelque sorte le scriptSig et le scriptPubKey comme ceci:

Le meilleur guide de script Bitcoin

Crédit d’image: CryptoCompare

Très bien, voyons maintenant comment le script fonctionne pour permettre au pauvre Bob d’accéder à ses fonds. Le script ressemble maintenant à ceci:

OP_DUP OP_HASH160 OP_EQUALVERIFY OP_CHECKSIG.

Implémentation script du processus de déverrouillage / vérification

OK, voyons maintenant comment la mise en œuvre du script de l’ensemble du processus de vérification / déverrouillage fonctionne.

En ce moment, le code ressemble à ceci

Le meilleur guide de script BitcoinLe meilleur guide de script Bitcoin

Le meilleur guide de script Bitcoin

Le OP_CHECKSIG apparaît et vérifie leur validité pour savoir qu’il s’agit de signatures et d’adresses publiques valides.

Lorsque tout ce processus est terminé, Bob peut déverrouiller la transaction et accéder à ses fonds.

Toutes nos félicitations! Vous venez de passer par une transaction Bitcoin entière!

Ce que vous voyez ici est le type de transaction Bitcoin le plus courant: P2PKH aka Le paiement du hachage de clé publique.

Alors, quel est ce mystérieux opérateur CHECKSIG et comment ça marche? Eh bien, pour cela, nous devons examiner la cryptographie derrière Bitcoin.

Comment fonctionne CHECKSIG?

Afin de savoir comment fonctionne CHECKSIG, nous aurons besoin de savoir ce qu’est une signature numérique. Une signature numérique est un code numérique (généré et authentifié par cryptage à clé publique) qui est attaché à un document transmis électroniquement pour vérifier son contenu et l’identité de l’expéditeur.

L’algorithme de signature numérique utilisé par bitcoin est ECDSA ou l’algorithme de signature numérique à courbe elliptique.

Cryptographie à courbe elliptique est ce qui est utilisé par Bitcoin, Ethereum, etc. à des fins de cryptage. Alors, qu’est-ce qu’une courbe elliptique? Une courbe elliptique est une courbe qui satisfait l’équation suivante:

Y ^ 2 = x ^ 3 + ax + b

Où (x, y) est un point sur la courbe et a et b sont des constantes.

Il existe des courbes infinies que vous pouvez créer. Voici à quoi ressemble l’une de ces courbes, en général:

Le meilleur guide Bitcoin

Crédit d’image: chaîne youtube CSBreakdown

Quelles sont les propriétés d’une courbe elliptique?

  • La courbe est symétrique sur l’axe x.
  • Toute ligne passant par 2 points sur la courbe coupera la courbe en un troisième point.
  • Toute tangente sur la courbe coupera la courbe sur un autre point.

Faire des maths sur la courbe.

Propriété d’addition de la courbe

Supposons qu’il y ait deux points sur la courbe V et A. Trouvons-les sur la courbe et passons une ligne à travers eux. Cela coupera la courbe sur un troisième point.

Le meilleur guide de script Bitcoin

Crédit d’image: chaîne youtube CSBreakdown

Nous appellerons ce troisième point X, et nous le refléterons sur la courbe comme ceci:

Le meilleur guide de script Bitcoin

Crédit d’image: chaîne youtube CSBreakdown

La réflexion de X est un point qui sera accessoirement (V + A). C’est la propriété additive de la courbe elliptique.

Note intéressante. Si nous ajoutons deux réflexions l’une avec l’autre, c’est-à-dire si nous ajoutions X et V + A dans le graphique ci-dessus, nous obtiendrons l’infini. La raison en est que la ligne passant par X et (V + A) coupera la courbe à l’infini.

Propriété de multiplication de la courbe

Maintenant, que faire si nous voulons ajouter un nombre à lui-même? Comme supposons que nous ayons un point V, que faisons-nous pour trouver 2V? Nous allons exécuter une tangente à travers V et l’intersecter en un point du graphique, puis trouver la réflexion du point sur la courbe. Cette réflexion sera 2V.

Le meilleur guide de script Bitcoin

Crédit d’image: chaîne youtube CSBreakdown

C’est aussi la propriété multiplicative du graphe car nous trouvons des points qui sont essentiellement la multiplication d’un entier avec le point lui-même. Supposons maintenant que nous voulions trouver 3V. Nous allons joindre V et 2V puis refléter le point d’intersection, comme ceci:

Le meilleur guide de script Bitcoin

Crédit d’image: chaîne youtube CSBreakdown

Vous voyez comment les points parcourent le graphique? C’est ce qui lui donne sa sécurité.

Propriétés mathématiques d’une courbe elliptique

Propriété n ° 1: Les points sur la courbe forment un groupe abélien

Les propriétés du groupe abélien sont les suivantes:

  • Ils ont une identité.
  • Ils ont des inverses aka reflets.
  • Les points sont associatifs signifiant pour trois points A, B et C sur la courbe: (A + B) + C = A + (B + C).
  • Les points sont fermés sur la courbe.
  • Les points sont la signification commutative pour deux points A et B.A + B = B + A.

Propriété n ° 2: la multiplication sur la courbe est rapide

Toutes les multiplications effectuées sur la courbe peuvent être effectuées très rapidement. Supposons maintenant que nous ayons un point P et que nous voulions trouver 100P. Au lieu d’ajouter le nombre à lui-même 100 fois, nous pouvons faire ce qui suit:

  • Ajoutez le point P à lui-même pour obtenir 2P.
  • Ajouter 2P et P pour obtenir 3P.
  • Ajoutez 3P à lui-même pour obtenir 6P.
  • Ajouter 6P à lui-même pour obtenir 12P.
  • Ajouter 12P à lui-même pour obtenir 24P.
  • Ajouter 24P et P pour obtenir 25P.
  • Ajouter 25P à lui-même pour obtenir 50P.
  • Ajouter 50P à lui-même pour obtenir 100P.

Donc, au lieu de passer par 99 étapes, vous réduisez le tout à seulement 8 étapes.

Propriété n ° 3: La division sur la courbe est lente

Alors que la multiplication est rapide, la division est très lente. Supposons que nous ayons Q = nP et que nous voulions trouver la valeur de n en divisant Q par P. Nous ne pouvons pas vraiment faire cela. Nous devrons parcourir manuellement les nombres un par un pour trouver une valeur qui satisfait l’équation. Cela le rend très lent. C’est ce qu’on appelle le problème logarithmique discret et c’est ce qui donne aux courbes sa fonction de trappe, c’est-à-dire qu’il est facile de multiplier n et P pour obtenir Q mais étant donné Q et P, il est impossible d’obtenir n.

Alors, comment fonctionne la vérification de signature sur les courbes elliptiques?

(Remarque: c’est ce qui se passe spécifiquement dans Bitcoin)

Avant de voir comment le processus fonctionne, examinons certaines variables et leur signification que nous utiliserons dans les équations suivantes.

Clé privée = d.

Message = z.

Clé publique = Q.

G sera un point constant sur le graphique qui sera fourni par bitcoin.

«K» est un nombre aléatoire qui sera généré automatiquement pour chaque signature unique.

«N» est une autre constante qui sera fournie par bitcoin.

Ok, voyons maintenant comment fonctionnent les calculs derrière la vérification.

Signer un message

Clé publique Q = dG. (il est impossible d’obtenir la clé privée de Q et G en raison de la division en irréalisable).

Maintenant, nous allons multiplier le G par le nombre aléatoire «k» et tracer ce point sur le graphique. Les coordonnées de ce point sont (x, y). c’est-à-dire (x, y) = kG

Ensuite, nous déterminons deux valeurs r et s telles que:

r = x mod n.

s = (z + rd) k ^ -1 mod n

La raison pour laquelle nous générons r et s est que ce sont les coordonnées de notre signature.

Donc, nous envoyons le point (r, s) pour vérification.

Vérifier un message

Les vérificateurs conduiront une équation simple:

z * s ^ -1 * G + r * s ^ -1 * Q

La valeur de cette équation nous donnera le point (x, y).

Maintenant, les vérificateurs peuvent simplement comparer les coordonnées x. Ils n’ont pas la coordonnée x qui leur a été donnée directement par l’expéditeur MAIS ils ont les valeurs de r et n.

Et comme nous savons déjà que r = x mod n, et alors ils peuvent simplement résoudre pour x.

Si les valeurs de x correspondent, cela signifie que la signature est vérifiée!

Bonus: un examen plus approfondi des mathématiques

Voyons à nouveau l’équation que les vérificateurs devront refaire:

Étape 1: z * s ^ -1 * G + r * s ^ -1 * Q

Nous savons que Q = d * G, substituons simplement la valeur.

Étape 2: z * s ^ -1 * g + r * s ^ -1 * d * G

On peut prendre (z + r * d) commun

Étape 3: (z + r * d) * s ^ -1 * G

Maintenant, rappelez-vous, nous avons déjà établi que s = (z + r * d) * k ^ -1 mod n, substituons les valeurs ici:

Étape 4: (z + r * d) * (z + r * d) ^ – 1 * k * G

Les (z + r * d) * (z + r * d) ^ – 1 s’annulent et nous nous retrouvons avec:

Étape 5: k * G qui est la coordonnée (x, y) que l’expéditeur a initialement envoyée.

Qu’est-ce qui pourrait mal tourner dans les courbes elliptiques?

S’il va sans dire que les courbes elliptiques sont le meilleur mode de cryptographie, il n’en reste pas moins qu’il présente encore peu de vulnérabilités:

  • Et si une mauvaise courbe était choisie? Si la courbe contient une boucle, il est possible que 1001P = P pour tout point P sur la courbe.

  • Une courbe faible peut être choisie qui peut être divisée en.

Il a ses faiblesses mais ce sont des faiblesses assez gérables.

FIN DE LA PARTIE 1

C’est là que nous allons terminer la partie 1 de notre Guide des scripts Bitcoin. Dans la partie 2, nous allons couvrir:

  • Transactions multisignatures.
  • Payer à Script Hash.
  • Contrôle de flux.
  • Timelocks.

Restez à l’écoute pour la prochaine partie!

Mike Owergreen Administrator
Sorry! The Author has not filled his profile.
follow me