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

BitCoin c'est quoi?

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

J'ai appris à propos de Bitcoin relativement récemment, mais il m'a immédiatement soudoyé avec son idée de p2p. Plus je fouille 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 des commentaires, il est à noter que beaucoup de gens, en particulier ceux qui ne sont pas familiers avec Bitcoin directement, 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 électronique, qui ne représente que de la "vraie" monnaie. D'où l'origine de la plupart des autres erreurs: si ce sont des bouts de papier, alors ils ne valent rien; ils peuvent être imprimés ou détruits autant que vous le souhaitez; ils peuvent être truqués; ils peuvent être copiés

Je répète - tout cela n’est rien d’autre que des délires. Au cœur de l’idée de Bitcoin se trouve le désir de créer non seulement un autre "morceau de papier" qui représente de 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 lesquelles c'est l'argent idéal, et fabriquez une monnaie électronique basée sur celles-ci.

Complexité de l'extraction

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

Supposons qu'une personne toute la journée extrait de l'or avec zèle et en extrait 1 kg. Pour lui, le prix de l'or extrait est un jour de travail acharné. Après une dure journée de travail, il décide de se reposer et d'aller au cinéma. Par une heureuse coïncidence, la caissière a donné des billets en échange d’or. Pourquoi Parce que le caissier 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 d'un kilo d'or. En fait, il échange son service pour une journée de travail acharné.

Imaginons maintenant une situation différente. Inventé un copieur qui fonctionne avec de l'or. Et toute personne peut gagner 10 kg à partir d'1 kg d'or par minute. Dans cette situation, le caissier n’échangera plus de billets contre de l’or, car il peut désormais l’imprimer facilement à sa guise. L'or cessera d'avoir une valeur et il ne peut plus être utilisé comme monnaie.

Dans Bitcoin, le processus de collecte des 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 long, plus l'extraction est difficile (plus coûteuse en ressources). Cela garantit que l'inflation sera sous contrôle.

Dans Bitcoin, un comportement similaire est obtenu en introduisant de temps en temps la fonction de la vitesse du total 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 a tendance à être 21 000 000. Les détails du travail de Bitcoin seront discutés plus loin. En attendant, vous devez connaître 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.

La matérialité

C’est déjà une propriété moins que de l’or comme toute autre monnaie non électronique. Un lingot d'or ne peut pas être échangé contre un service ou un article deux fois. C'est-à-dire qu'à un moment donné, il peut s'agir du vendeur ou de l'acheteur.

Ce comportement est naturel pour une devise matérielle, mais pas pour une devise électronique. Pour réaliser ce comportement de monnaie virtuelle, vous devez faire preuve de 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 prélève des pièces sur une ou plusieurs transactions existantes et indique à qui elles sont destinées. Par conséquent, vous pouvez toujours vérifier la validité de la chaîne entière.

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 d'utiliser Bitcoin comme monnaie. 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 d'envisager cette conception même.

Chaîne de blocs

Tout système de paiement électronique devrait se trouver quelque part et stocker en quelque sorte les 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 se compose de 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 cryptées d'aucune manière 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 d'écrire ces lignes, le nombre de blocs dans la chaîne était égal à 110 968 et, comme je l'ai dit précédemment, cette quantité 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 occupés à 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 autre transaction n'y est ajoutée) et envoyé sur le réseau. Ensuite, les clients vérifient la validité du bloc et des transactions qu'il contient. 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 à y collecter de nouvelles transactions.

Bloquer

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

  • hash - SHA-256 en-tête du bloc. Un tel hachage est assez aléatoire et le temps de son calcul est prévisible. Je tiens à noter que seul l'en-tête est haché, sans transactions. Le nombre de transactions n’affectera donc pas beaucoup le temps de calcul du hachage.
  • ver - La version du schéma de blocs. Pour le moment, toutes les unités ont une version - 1.
  • prev_block - Hacher 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, car 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 - Racine Merkle - liste des hachages de transaction. Le bloc hash doit nécessairement dépendre des transactions, de sorte qu'elles ne peuvent pas être falsifié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 de tout le bloc.

Cela peut sembler absurde - pourquoi calculer deux fois le hash 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 que le hachage de l'en-tête de bloc est recalculé plusieurs milliers de fois par seconde. De plus, plus la taille de l'en-tête est proche de la 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 abrégée de la valeur de hachage cible. Un bloc est considéré comme étant 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 probable de sélectionner un hachage approprié dans une 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, 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 - 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 que chaque nouveau hachage diffère 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. La racine Merkle est mise à jour lorsque la transaction est ajoutée. Le temps passe toutes les quelques secondes. Bits (valeur cible, complexité) - toutes les deux semaines. C'est trop long. Ne pas attendre qu'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 ne convient. Pendant ce temps, aucune autre propriété n'a changé. Il y a un débordement de nonce et il recommence à partir de zéro. Il se trouve que les hachages seront 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 en-têtes 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. Comme des blocs, ils s'alignent en chaînes. Chaque transaction doit spécifier où elle prend de l'argent (à partir de quelle transaction existante), et où elle dirige.

Pour spécifier le destinataire, sa clé publique est utilisée. Pour que le destinataire puisse utiliser l’argent reçu, il doit créer une nouvelle transaction qui prendra l’argent de la précédente et les redirigera 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. À tout moment, vous pouvez vous assurer que toutes les transactions du système sont valides.

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

  • hash - Le hash de la transaction entière. 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 lors du calcul du bloc de hachage. 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 modifiez la transaction et que, par miracle, son hachage ne se casse pas, tous les autres hachages seront rompus et la chaîne de blocs modifiée sera rejetée par tous les clients.
  • ver - La version du schéma de transaction. Bien qu'il n'ait jamais changé, il est donc partout égal à 1.
  • vin_sz - Le nombre de transactions précédentes, à partir desquelles de l'argent est transféré vers de nouvelles adresses. Un ou plusieurs.
  • vout_sz - Nombre d'adresses vers lesquelles de 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 afin qu'elles ne soient pas ajoutées au bloc actuellement généré, 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 signer à nouveau 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 des 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 - Comme la transaction peut avoir plusieurs sorties, vous devez spécifier d’où elle provient. 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é, car elle doit être le destinataire. En outre, il ajoute ECDSA à la signature de la même transaction, effectuée 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:

  • value - Contient le montant d'argent qui sera transféré à la nouvelle adresse. Ils proviennent de 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 pièces à une nouvelle adresse. Que les 5 pièces restantes ne sont pas perdues, nous nous les envoyons, 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 à l'entrée de la transaction est toujours égal au montant total à la sortie. Autrement, l’argent provient des airs ou disparaît de la circulation. Mais au tout début, il y avait un graphique montrant que le nombre de dollars augmentait de manière exponentielle. Alors, d'où vient l'argent neuf?

A 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 ayant un client officiel en cours d'exécution. Alors que leur majorité, Bitcoin ne menace rien.

Conclusion

La preuve du 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 hash (résultat du travail) en une fraction de seconde. Et pour le récupérer, il faut beaucoup de travail.

Vous pouvez rappeler ici l'analogie avec l'or, dont l'extraction prend beaucoup de temps et de ressources. Mais pour comprendre qu'avant vous, vous pouvez presque immédiatement. En ce sens, Bitcoin a également sa valeur. Mais vous n'avez pas besoin de comprendre cela comme un prix en dollars ou en 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 uniquement par une personne qui veut échanger de l'or contre des dollars.

La valeur originale de l'or était déterminée uniquement par ceux qui l'avaient extraite. Pour l'or extrait, il a demandé tellement 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 auront confiance, plus Bitcoin sera acheté, plus les dollars seront investis et, par conséquent, plus Bitcoin sera cher.

Avant que les gens puissent faire confiance à Bitcoin, ils doivent déterminer si ce système est suffisamment sécurisé et si l’argent peut être utilisé, c’est-à-dire s’il a les propriétés d’argent que j’avais énumérées au début. Apprenez ceci pour vous assurer que vous ne pouvez que démonter 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.