Article original : How does bitcoin work? I built an app to show you.

Par Sean Han

Alors que le Bitcoin atteignait des niveaux sans précédent, il a attiré mon attention et ma curiosité. Je me suis demandé : comment fonctionne réellement le bitcoin ?

En m'enfonçant dans le terrier du lapin de la blockchain, j'ai constaté que de nombreuses ressources dépassent rarement le discours sur le côté « révolutionnaire », « distribué » et « immuable ». Beaucoup parlent du quoi, mais pas tellement du pourquoi et du comment.

J'ai eu recours à la lecture de documents techniques et du code source pour découvrir cette boîte noire. J'ai commencé à partager ce que j'ai appris en créant des apps qui démontraient le fonctionnement interne de la blockchain.

Ce que j'ai réalisé, c'est que le bitcoin n'était que la blockchain + des transactions. Cet article couvrira la partie transactions de l'équation. Si vous souhaitez un rappel sur la blockchain, consultez Blockchain Demo ou cet article.

Un bloc sur la blockchain se compose des parties suivantes :

Image _Un bloc sur la blockchain — [https://blockchaindemo.io](https://blockchaindemo.io" rel="noopener" target="blank" title=")

  • Index (Bloc #1): De quel bloc s'agit-il ?
  • Hash (#00001834d29f33…): Le bloc est-il valide ?
  • Previous Hash (#000dc75…): Le bloc précédent est-il valide ?
  • Timestamp (Mar, 19 Déc 2017 …): Quand le bloc a-t-il été ajouté ?
  • Data (I ❤️ freeCodeCamp): Quelles informations sont stockées sur le bloc ?
  • Nonce (1263): Combien d'itérations avons-nous effectuées avant de trouver un bloc valide ?

Au lieu d'avoir du texte (I ❤️ freeCodeCamp) comme données, les cryptomonnaies ont des transactions comme données.

Qu'est-ce qu'une transaction ?

Les transactions sont un enregistrement de paiement entre deux parties. Lorsqu'il y a un échange de valeur, une transaction est créée pour l'enregistrer.

Par exemple, disons que Satoshi possède 100 pièces.

Il veut payer 5 pièces à Dean, avec des frais de minage de 1 pièce. Il utilise les 100 pièces qu'il possède pour effectuer la transaction. Il s'attend à récupérer 94 pièces en monnaie de retour.

Lorsque Satoshi mine un nouveau bloc avec la transaction ci-dessus, il est récompensé par 100 nouvelles pièces.

L'exemple ci-dessus créera les outputs (sorties) de transaction suivants (qui seront expliquées) :

Image _Outputs de transaction — [http://coindemo.io](http://coindemo.io" rel="noopener" target="blank" title=")

Puisque les 100 pièces initiales que Satoshi possédait ont été utilisées comme input (entrée) pour créer la transaction ci-dessus, les 100 pièces initiales sont maintenant dépensées. (à expliquer)

Image _Output de transaction dépensé — [http://coindemo.io](http://coindemo.io" rel="noopener" target="blank" title=")

Les concepts ci-dessus seront expliqués ensuite.

Trois types de transactions :

  1. Reward — Satoshi est récompensé par 100 pièces pour avoir miné un nouveau bloc
  2. Regular — Satoshi a payé 5 pièces à Dean avec un rendu de monnaie de 94 pièces
  3. Fee — Frais de minage de 1 pour celui qui mine la transaction (Satoshi dans l'exemple ci-dessus)

Transaction

Une transaction se compose de quatre parties :

  1. Inputs — D'où vient la valeur
  2. Outputs — Où va la valeur
  3. Hash — Identifie de manière unique la transaction (en utilisant les inputs et les outputs)
  4. Type — Reward, Regular ou Fee

Outputs — Où va la valeur

Un output a deux parties :

  1. Address — Quelle est l'adresse publique du portefeuille vers laquelle envoyer les pièces ?
  2. Amount — Combien de pièces ?

Inputs — D'où vient la valeur

Un input doit provenir d'un output précédent. Cependant, un output ne peut être utilisé comme input qu'une seule fois. Lorsqu'un output est utilisé, il est considéré comme dépensé. Les outputs qui n'ont pas été utilisés comme inputs sont non dépensés.

Un input a cinq parties :

  1. Transaction Hash — Hash de la transaction de l'output (non dépensé)
  2. Output Index — L'index de l'output (non dépensé) dans la transaction
  3. Amount — Montant de l'output (non dépensé)
  4. Address — Adresse de l'output (non dépensé)
  5. Signature — Signée par la clé privée de l'Address

Reward Transaction

Les transactions de type Reward sont créées suite à la découverte d'un bloc valide sur la blockchain. Par conséquent, les transactions Reward n'ont aucun input car elles créent de nouvelles pièces.

Par exemple : Satoshi a miné un nouveau bloc avec une récompense de minage de 100. La transaction sur le bloc ressemblera à ceci :

Type : Reward

Inputs : Aucun

Outputs :

  • Address : Adresse publique du portefeuille de Satoshi
  • Amount : 100 (récompense spécifiée par la cryptomonnaie)

Hash : ?(inputs + outputs) = 000abcdefg…

Regular Transaction

Les transactions de type Regular sont des transactions créées lorsqu'une partie en paie une autre.

Suite de l'exemple : Satoshi utilise l'output (non dépensé) de la transaction Reward comme input pour payer 5 pièces à Dean. Il spécifie des frais de minage de 1 pièce.

Type : Regular

Inputs :

  • Transaction Hash : 000abcdefg… (hash de la transaction Reward ci-dessus)
  • Output Index : 0 (le premier index d'un output est 0)
  • Amount : 100 (montant de l'output)
  • Address : Adresse publique du portefeuille de Satoshi (adresse de l'output)
  • Signature : Satoshi signe cet input avec sa clé privée

Outputs :

Output 1 : (index 0)

  • Address : Adresse de Dean
  • Amount : 5 pièces

Output 2 : (index 1)

  • Address : Adresse de Satoshi
  • Amount : 94 pièces = 100 - 5 (paiement) - 1 (frais)

  • Le premier output est le paiement destiné à Dean.

  • Le deuxième output est la monnaie retournant à Satoshi.

Parce que l'output de la transaction Reward de Satoshi (de l'exemple précédent) a été utilisé comme input pour ce paiement, il est maintenant dépensé et ne peut plus être utilisé. Si il est réutilisé, il y a alors une double dépense.

Pourquoi le compte n'y est-il pas ???

Le montant total des inputs est de 100.
Le montant total des outputs est de 5 + 94 = 99.

Dans l'exemple, Satoshi a spécifié des frais de minage de 1 pièce. La différence entre les inputs et les outputs d'une transaction Regular constitue les frais de minage.

Les inputs doivent être supérieurs ou égaux aux outputs. Si les inputs et les outputs sont égaux, alors il n'y a pas de frais de minage.

Fee Transaction

Quiconque mine la transaction Regular ci-dessus ajoutera la transaction de frais de minage (Fee). Parce qu'il y avait un déficit de 1 dans la transaction Regular, le montant des frais est de 1.

Suite de l'exemple : Bob mine la transaction de Satoshi et Dean.

Type : Fee

Inputs : Aucun

Outputs :

  • Address : Adresse publique du portefeuille de Bob
  • Amount : 1 (frais, différence entre l'input et l'output de la transaction Regular)

Parce que Bob a miné cette transaction dans le nouveau bloc, il y aura une transaction Reward de 100 pour Bob.

Sur la blockchain :

Image

Image _1. Satoshi dépense son output Reward 2. Satoshi paie Dean 3. Bob mine la transaction — [http://coindemo.io](http://coindemo.io" rel="noopener" target="blank" title=")

Soldes finaux :

Satoshi : 94 = 100 (récompense) - 5 (paiement) - 1 (frais)
Dean : 5 (paiement de Satoshi)
Bob : 101 = 100 (récompense pour avoir miné un nouveau bloc avec la transaction) + 1 (frais)

Total des devises en circulation : 200 = 94 (Satoshi) + 5 (Dean) + 101 (Bob)

Deux blocs ont été minés, et chaque bloc a une récompense de 100, il devrait donc y avoir 200 pièces en circulation.

Conclusion

Sur un nouveau bloc, les totaux des inputs et des outputs des transactions Regular et Fee doivent être égaux. Cela garantit que seules les transactions Reward génèrent de nouvelles pièces.

Les déficits des outputs Regular sont compensés par les outputs des transactions Fee. Ne laissant que les transactions Reward comme seul excédent d'output.

Essayez par vous-même sur http://coindemo.io

Image