This page has been robot translated, sorry for typos if any. Original content here.

BitCoin c'est quoi?

Bitcoin. Как это работает

J'ai appris relativement à Bitcoin relativement récemment, mais il m'a immédiatement soudoyé avec son idée de p2p. Plus je creuse dans leur Wiki, plus j'ai cette idée. Sa mise en œuvre est belle et élégante d'un point de vue technique.

La recherche de Bitcoin donne un tas de sujets. Par les commentaires, il est à noter que beaucoup de gens, en particulier ceux qui ne connaissent pas directement Bitcoin, soulèvent beaucoup de questions sur les principes de son travail. Il y a aussi beaucoup de conjectures, souvent incorrectes. Pour clarifier la situation, il a été décidé d'écrire cet article.

De l'argent réel?

La première place dans la liste des principales idées fausses sur Bitcoin est l'idée que Bitcoin est un autre "morceau de papier", même ceux qui ne représentent que de l'argent "réel", sont de telles recettes de la dette. D'où l'origine de la plupart des autres sophismes: s'ils sont des morceaux de papier, alors ils ne valent rien; ils peuvent être imprimés ou détruits autant que vous voulez; ils peuvent être truqués; ils peuvent être copiés

Je répète - tout cela n'est rien de plus que des délires. Au cœur de l'idée de Bitcoin réside le désir de créer non seulement un autre "morceau de papier" qui représente l'argent réel, comme l'or, mais un analogue de l'or lui-même. Prenez ces propriétés de l'or, à travers lequel c'est l'argent idéal, et faites une monnaie électronique basée sur eux.

Complexité d'extraction

L'or ne peut pas être copié - il ne peut être obtenu. Mais c'est un processus qui prend beaucoup de temps, à la fois en termes de temps et de ressources. En partie à cause de cela, l'or est tellement apprécié. Pour le rendre plus clair, regardons un exemple.

Supposons qu'une personne extrait toute la journée de l'or avec zèle et en extrait 1 kg. Pour lui, le coût de l'or extrait est un jour de dur labeur. Après une dure journée de travail, il a décidé de se reposer et d'aller au cinéma. Par une heureuse coïncidence, le caissier donnait des billets en échange d'or. Pourquoi? Parce que la caissière aime l'or, mais je n'aime pas travailler avec un médiator toute la journée. Par conséquent, il est prêt à rendre un service - pour donner un billet - en échange de 1 kg d'or. En fait, il échange son service pour une journée de travail acharné.

Maintenant, imaginons une situation différente. Inventé un copieur qui fonctionne avec de l'or. Et toute personne peut faire 10 kg à partir de 1 kg d'or par minute. Dans cette situation, le caissier n'échangera plus de billets contre de l'or, puisqu'il peut désormais facilement l'imprimer autant qu'il veut. L'or cessera d'avoir de la valeur et ne pourra plus être utilisé comme monnaie.

Dans Bitcoin, le processus de collecte de pièces nécessite également des ressources et du temps. Mais dans ce cas, ce ne sont pas des ressources humaines, mais des ressources informatiques.

Ressource conditionnellement limitée

Plus l'or est miné, plus il devient difficile (plus coûteux en ressources) de l'extraire. Cela garantit que l'inflation sera sous contrôle.

Dans Bitcoin, un comportement similaire est atteint en introduisant de temps en temps la fonction de la vitesse de la totalité des pièces produites. Cette fonction est inversement proportionnelle, c'est-à-dire que la vitesse diminue avec le temps et tend vers zéro. Si nous prenons l'intégrale de cette fonction par rapport au temps, nous obtenons une exponentielle. Approximativement ceci:

Bitcoin. Как это работает

On peut voir que le nombre total de pièces tend à être 21 000 000. Les détails du travail de Bitcoin seront discutés plus loin. En attendant, vous devez savoir deux choses: les pièces apparaissent dans le système en paquets environ toutes les 10 minutes, le nombre de pièces dans un paquet est de 50, et il diminue deux fois tous les 4 ans.

Matérialité

C'est déjà une propriété pas autant d'or que n'importe quelle monnaie non électronique. Un lingot d'or ne peut être échangé contre un service ou un objet deux fois. C'est, à un moment donné, il peut être soit du vendeur ou de l'acheteur.

Ce comportement est naturel pour une devise importante, mais pas pour une devise électronique. Pour atteindre ce comportement de l'argent virtuel, vous devez faire beaucoup d'esprit. Dans Bitcoin, ce comportement est fourni par le mécanisme de transaction. Toutes les transactions sont fusionnées en chaînes. Chaque transaction prend des pièces d'une ou plusieurs transactions existantes et indique à qui elles sont ciblées. Par conséquent, vous pouvez toujours vérifier toute la chaîne pour la validité.

Complexité de l'extraction, ressources limitées, matérialité - ces propriétés, ainsi que l'utilisation de la cryptographie pour la sécurité, permettent à Bitcoin d'être utilisé comme argent. Ils sont basés sur le noyau de Bitcoin. Ce n'est pas juste un arrangement. Tous sont incorporés dans le système par conception, et d'une autre manière, cela ne fonctionnera pas. Il est temps de considérer ce design très.

Chaîne de blocs

Tout système de paiement électronique devrait quelque part et en quelque sorte stocker des transactions. Dans Bitcoin, toutes les informations sont stockées dans une chaîne de blocs. Les blocs sont transmis au format JSON. Chaque bloc contient un en-tête et une liste de transactions. L'en-tête consiste en plusieurs propriétés, parmi lesquelles il y a un hachage du bloc précédent. Ainsi, toute la chaîne de blocs stocke toutes les transactions pendant toute la durée d'exécution de Bitcoin.

Dans les versions actuelles du programme Bitcoin, la chaîne de blocs est entièrement téléchargée par chaque client, ce qui rend le système complètement décentralisé. Les données ne sont en aucun cas cryptées et n'importe qui peut suivre manuellement toutes les transactions. Il y a même un site spécial - Bitcoin Block Explorer, où vous pouvez facilement voir toutes les informations sur les blocs et les transactions.

Au moment où j'écris ces lignes, le nombre de blocs dans la chaîne était égal à 110 968 et, comme je l'ai dit précédemment, ce nombre augmente d'environ 1 toutes les 10 minutes, ce qui signifie qu'un des participants a pu créer un nouveau bloc.

Cela fonctionne comme ça. L'un des clients crée une nouvelle transaction et l'envoie à d'autres clients qui sont en train de générer le bloc. Ils ajoutent cette transaction à leur bloc et continuent à générer. Tôt ou tard, quelqu'un pourra générer un bloc. Un tel bloc est scellé (aucune transaction supplémentaire n'y est ajoutée) et envoyé sur le réseau. Ensuite, les clients vérifient la validité du bloc et des transactions qui s'y trouvent. S'il n'y a pas de problèmes, les transactions sont considérées comme approuvées. A ce moment, le nouveau bloc a déjà atteint chaque client et est ajouté à la chaîne. Après cela, le processus est répété - les clients commencent à générer le bloc suivant et à collecter de nouvelles transactions.

Bloquer

Considérez le contenu du bloc et le processus de sa génération plus en détail. Un exemple de bloc peut être trouvé sur le même Bitcoin Block Explorer . Le bloc consiste en un en-tête et une liste de transactions. L'en-tête comprend les propriétés suivantes:

  • hash - SHA-256 en-tête de hachage du bloc. Un tel hachage est assez aléatoire, et le temps de son calcul est prévisible. Je veux noter que seul l'en-tête est haché, sans transactions. Ainsi, le nombre de transactions n'affectera pas grandement le temps de calcul du hachage.
  • ver - La version du schéma de bloc. À l'heure actuelle, toutes les unités ont une version - 1.
  • prev_block - Hache le bloc précédent de la chaîne. En raison de cette propriété, la chaîne ne peut pas être truquée en remplaçant l'un des blocs, puisque le hachage du bloc dépend toujours du hachage du bloc précédent dans la chaîne. En changeant l'un des blocs, vous devrez recréer tous les suivants.
  • mrkl_root - Merkle root - liste des hachages de transaction. Le hachage de bloc doit nécessairement dépendre des transactions, de sorte qu'elles ne peuvent pas être truquées. Mais le calculer directement sera long, si le nombre de transactions est important. Par conséquent, les transactions elles-mêmes sont hachées en premier, puis leurs hachages sont utilisés pour calculer le hachage du bloc entier.

Cela peut sembler absurde - pourquoi double-calculer le hachage de la même chose. Mais le fait est que le hachage de transaction est mis à jour uniquement lorsqu'une nouvelle transaction est ajoutée au bloc, et le hachage de l'en-tête du bloc est recalculé plusieurs milliers de fois par seconde. En outre, plus la taille de l'en-tête est proche d'une constante, plus vous pouvez prédire avec précision le temps nécessaire pour calculer son hachage.

  • time - uint32_t représentant l'heure à laquelle le bloc a été créé. L'année maximale autorisée est 2106.
  • bits - Une des propriétés les plus importantes. C'est une forme raccourcie de la valeur de hachage cible. Un bloc est considéré comme généré (valide) lorsque son hachage est inférieur à cette valeur cible. La valeur cible détermine la complexité de la création du bloc. Plus il est petit, moins il est susceptible de choisir un hachage approprié en une seule itération. Cette propriété est mise à jour toutes les deux semaines.

Il y a comme suit. Le nombre de blocs générés au cours des deux dernières semaines est calculé et comparé à la norme (1 bloc toutes les 10 minutes). S'il y a trop de blocs, alors la complexité augmente. Si les blocs sont trop petits, ils diminuent. Ainsi, le système s'adapte à l'augmentation du nombre d'utilisateurs et, par conséquent, à la puissance totale de leurs ordinateurs.

  • nonce - Un nombre qui, à partir de zéro, est incrémenté après chaque itération du calcul de hachage. En fait, c'est le cas, jusqu'à ce que le hachage soit inférieur à la valeur cible. Pour chaque nouveau hachage différent du précédent, au moins une des propriétés de l'en-tête du bloc doit être différente.

Par exemple, la version ne change jamais. Le hachage du bloc précédent est mis à jour lorsque quelqu'un nous remplace et génère un nouveau bloc. Merkle root est mis à jour lorsque la transaction est ajoutée. Le temps est toutes les quelques secondes. Bits (valeur cible, complexité) - toutes les deux semaines. C'est trop long. Ne pas attendre que l'une des propriétés soit mise à jour et qu'il y ait un nonce.

Considérons une situation hypothétique. Toutes les valeurs de nonce ont été vérifiées et aucune d'elles n'est appropriée. Pendant ce temps, aucune autre propriété n'a changé. Il y a un débordement de nonce et il recommence à zéro. Il s'avère que les hachages seront alors répétés. Pour éviter de telles situations, après un débordement de nonce, la propriété spéciale de l'une des transactions change. Après cela, la racine Merkle est mise à jour et les en-têtes des hachages d'en-tête de bloc ne seront plus répétés.

  • n_tx - Nombre de transactions dans la liste.
  • size - La taille du bloc en octets.

Transactions

Les transactions sont contenues dans des blocs sous la forme d'une liste. Ils, comme des blocs, s'alignent en chaînes. Chaque transaction doit spécifier où elle prend de l'argent (à partir de laquelle la transaction existante), et où elle dirige.

Pour spécifier le destinataire, sa clé publique est utilisée. Pour le destinataire pourrait utiliser l'argent reçu, il doit créer une nouvelle transaction qui prendra de l'argent de la précédente et les rediriger vers une autre adresse. Pour prouver qu'une personne utilise son argent, plutôt que celui de quelqu'un d'autre, pour traduire, il doit laisser sa signature numérique dans sa transaction. Puis, à tout moment, vous pouvez vous assurer que toutes les transactions dans le système sont valides.

En pratique, tout ceci est réalisé à l'aide des propriétés suivantes:

  • hash - Le hachage de l'ensemble de la transaction. Il s'avère que les transactions sont hachées deux fois. La première fois lors du calcul du hachage de transaction. La deuxième fois pendant le calcul du hachage de bloc. De plus, chaque bloc fait référence au hachage du bloc précédent, et chaque transaction au hachage de la ou des transactions précédentes. Si vous changez la transaction et que, par miracle, son hachage ne se brise pas, tous les autres hachages se briseront et la chaîne de blocs modifiée sera rejetée par tous les clients.
  • ver - La version du schéma de transaction. Alors qu'il n'a jamais changé, de sorte que partout est égal à 1.
  • vin_sz - Le nombre de transactions précédentes, à partir de laquelle l'argent est transféré à de nouvelles adresses. Un ou plusieurs.
  • vout_sz - Nombre d'adresses vers lesquelles l'argent est transféré. Un ou plusieurs.
  • lock_time - Pas encore utilisé et partout égal à 0. L'idée est de créer des transactions en attente de sorte qu'elles ne soient pas ajoutées au bloc généré en cours, mais, par exemple, au redirecteur. Il est entendu que cette propriété indique le nombre de blocs que la transaction doit ignorer avant d'ajouter. Cela vous permet de modifier la transaction et de la re-signer pendant un certain temps.
  • size - La taille de la transaction en octets. La taille de la transaction au format JSON est implicite.
  • in - Contient une liste d'entrées de transaction (sources). Les entrées sont les sorties des transactions précédentes (prev_out). Chaque sortie a les propriétés suivantes:
    • hash - Le hachage de la transaction précédente.
    • n - Puisque la transaction peut avoir plusieurs sorties, vous devez spécifier laquelle d'entre elles l'argent est pris. Pour cela, il y a cette propriété. Il contient le numéro de séquence de la sortie de la transaction précédente, en commençant par 0.
    • scriptSig - Dans cette propriété, l'expéditeur doit prouver qu'il traduit son propre argent, pas celui de quelqu'un d'autre. Pour ce faire, il spécifie la clé publique du destinataire de la transaction précédente, c'est-à-dire sa propre clé, puisqu'il doit s'agir du destinataire. En outre, il ajoute ECDSA à la signature de la même transaction, qui est faite par sa clé privée. Cela prouve qu'il dispose de son argent et non d'étrangers.

Après la liste des entrées de la transaction (in), une liste des sorties (out), c'est-à-dire, des adresses, est indiquée. Chaque sortie a les propriétés suivantes:

  • valeur - Contient le montant d'argent qui sera transféré à la nouvelle adresse. Ils sont tirés des transactions précédentes. Par conséquent, ce nombre ne doit pas dépasser leur montant. Par exemple, nous voulons prendre 10 pièces d'une transaction et 20 d'une autre et envoyer 25 à une nouvelle adresse. Que les 5 pièces restantes ne sont pas perdues, nous les envoyons à nous-mêmes, comme un changement. Ainsi, dans notre transaction, il y aura deux destinataires, dont l'un est nous-mêmes. La valeur est toujours spécifiée dans les nanomonets pour éviter les nombres fractionnaires.
  • scriptPubKey - Cette propriété, avec scriptSig, forme un script sur le fichier modifié

Le montant total d'argent à l'entrée de la transaction est toujours égal au montant total à la sortie. Sinon, l'argent provient soit de l'air, soit disparaît de la circulation. Mais au tout début, il y avait un graphique montrant que le nombre d'argent augmente de façon exponentielle. Alors, d'où vient l'argent neuf?

À mon goût, la question de l'argent est simple et élégante. Dans chaque bloc, la première transaction de la liste est une transaction spéciale. Il a toujours une entrée, qui à la place de la propriété scriptSig a une propriété coinbase . Cette propriété peut contenir n'importe quoi.

La stabilité du système est basée sur le nombre d'utilisateurs qui ont un client officiel en cours d'exécution. Bien que leur majorité, Bitcoin ne menace rien.

Conclusion

La preuve de travail (preuve de travail) est le résultat d'un travail difficile à réaliser mais facile à vérifier. Le travail du réseau Bitcoin repose sur ce principe. Vous pouvez vérifier le hachage (résultat du travail) en une fraction de seconde. Et pour le ramasser, il faut beaucoup de travail.

Ici, vous pouvez rappeler l'analogie avec l'or, dont l'extraction prend beaucoup de temps et de ressources. Mais pour comprendre cela avant l'or, vous pouvez presque immédiatement. En ce sens, Bitcoin a aussi sa valeur. Mais vous n'avez pas besoin de comprendre cela comme un prix en dollars ou dans les factures d'électricité que l'ordinateur a utilisé lors de la sélection du hachage.

Le prix en dollars est un peu différent. Il n'est pas intégré dans Bitcoin et est déterminé uniquement par le marché. Après tout, l'or lui-même ne vous garantit pas un certain prix en dollars. Il est garanti seulement par une personne qui veut échanger de l'or contre des dollars.

La valeur originale de l'or a été déterminée uniquement par ceux qui l'ont extrait. Pour l'or extrait, il a tellement demandé qu'il était possible de compenser l'effort pour l'extraire. Et seulement après que le marché commence à influencer le prix de l'or.

Une fois que Bitcoin est sur le marché, sa valeur est déterminée uniquement par le niveau de confiance dans le système. Plus les gens font confiance, plus Bitcoin sera acheté, plus il y aura d'argent investi et, par conséquent, plus Bitcoin sera cher.

Avant que les gens puissent faire confiance à Bitcoin, ils devraient savoir si ce système a un degré de sécurité suffisant, et s'il peut être utilisé comme argent, c'est-à-dire s'il possède les propriétés d'argent que j'ai énumérées au début. Apprenez ceci pour sûr que vous pouvez seulement démonter dans les principes de Bitcoin.

J'espère qu'après cet article avec Habarhabar, le niveau de confiance en Bitcoin augmentera au moins un peu.