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

BitCoin c'est quoi?

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

J'ai appris l'existence de Bitcoin relativement récemment, mais il m'a immédiatement corrompu avec son idée de p2p. Plus je m'enfonçais dans leur wiki, plus je me suis mis à cette idée. Sa mise en œuvre est belle et élégante d'un point de vue technique.

Une recherche Bitcoin vous donne des tonnes de sujets. Selon les commentaires, il est à noter que beaucoup de gens, surtout ceux qui ne sont pas directement familiarisés avec Bitcoin, se posent beaucoup de questions sur les principes de son fonctionnement. Il y a aussi beaucoup de suppositions, souvent incorrectes. Afin de 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 concernant Bitcoin est occupée par l'idée que Bitcoin est un autre «papier», même si les documents électroniques qui représentent uniquement de la «vraie» monnaie sont une sorte de reçu de dette. La plupart des autres idées fausses commencent à partir d'ici: puisque ce sont des bouts de papier, ils ne valent rien; ils peuvent être imprimés ou détruits autant que vous le souhaitez; ils peuvent être falsifiés; ils peuvent être copiés

Je répète - tout cela n'est rien d'autre que des illusions. L'idée de Bitcoin était basée sur le désir de créer non pas des «morceaux de papier» ordinaires représentant de la monnaie réelle, telle que de l'or, mais un analogue de l'or lui-même. Prenez les propriétés de l’or, grâce auxquelles c’est la monnaie idéale, et fabriquez de la monnaie électronique à partir de ces propriétés.

Difficulté minière

L'or ne peut être copié - il ne peut être que miné. Mais c’est un processus très coûteux, à la fois en temps et en ressources. En partie à cause de cela, l’or est si prisé. Pour être plus clair, considérons un exemple.

Disons qu'un homme a sérieusement extrait de l'or toute la journée et a finalement gagné 1 kg. Pour lui, la valeur de l'or extrait est un jour de dur labeur. Après une dure journée de travail, il a décidé de se détendre et d'aller au cinéma. Heureusement, le caissier a donné des billets en échange d'or. Pourquoi Parce que le caissier aime l'or, mais n'aime pas travailler avec une pioche toute la journée. Par conséquent, il est prêt à fournir un service - donner un billet - en échange de 1 kg d'or. En fait, il échange son service pour une journée de travail acharné.

Maintenant, imaginez une situation différente. Inventé un copieur qui fonctionne avec de l'or. Et toute personne peut gagner 10 kg à raison de 1 kg d'or par minute. Dans cette situation, le caissier n'échangera plus de billets pour de l'or, car il peut désormais l'imprimer lui-même facilement. L'or n'aura plus aucune valeur et ne pourra plus être utilisé comme monnaie.

En Bitcoin, le processus d’extraction 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 extrait, plus il est difficile (plus onéreux en termes de ressources) de le faire. Cela garantit que l'inflation est sous contrôle.

En Bitcoin, un comportement similaire est obtenu en introduisant la fonction de la vitesse du total des pièces extraites au fil du temps. Cette fonction est inversement proportionnelle, c’est-à-dire que la vitesse décroît avec le temps et tend vers zéro. Si nous prenons l'intégrale de temps de cette fonction, nous obtenons une exponentielle. Quelque chose comme ça:

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

Vous pouvez voir ici que le nombre total de pièces de monnaie approche 21 millions de dollars. Des détails sur le fonctionnement de Bitcoin seront discutés plus tard. En attendant, vous devez savoir deux choses: les pièces apparaissent dans les paquets du système toutes les 10 minutes environ, le nombre de pièces dans un paquet est de 50 et il se divise en deux tous les 4 ans.

La matérialité

Cette propriété est moins or que n'importe quelle monnaie non électronique. Un lingot d'or ne peut pas être échangé deux fois contre un service ou un produit. C'est-à-dire qu'à un moment donné, il peut être soit le vendeur, soit l'acheteur.

Un tel comportement est naturel pour une monnaie matérielle, mais pas pour une monnaie électronique. Pour obtenir ce comportement de l’argent virtuel, vous devez faire preuve de beaucoup d’ingéniosité. En Bitcoin, ce comportement est fourni par le mécanisme de transaction. Toutes les transactions sont enchaînées. Chaque transaction prend des pièces d'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.

La complexité de l’exploitation minière, les ressources limitées, l’importance relative - ces propriétés, ainsi que l’utilisation de la cryptographie pour des raisons de sécurité, vous permettent d’utiliser Bitcoin comme de l’argent. Le noyau de Bitcoin est basé sur eux. Ce n'est pas simplement un arrangement. Tous sont intégrés au système de conception finale et, d’une autre manière, cela ne fonctionnera pas. Il est temps d'examiner cette conception même.

Chaîne de bloc

Tout système de paiement électronique doit stocker quelque part et en quelque sorte les transactions. En 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 est constitué de plusieurs propriétés, parmi lesquelles le hachage du bloc précédent. Ainsi, toute la chaîne de blocs stocke toutes les transactions pour toute la durée de Bitcoin.

Dans les versions actuelles du programme Bitcoin, une chaîne de blocs est téléchargée entièrement 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 existe 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 de la rédaction du présent document, le nombre de blocs de la chaîne était de 110 968, et comme je l'ai dit précédemment, ce nombre augmente toutes les 10 minutes environ, ce qui signifie qu'un des participants a pu créer un nouveau bloc.

Cela fonctionne comme suit. L'un des clients crée une nouvelle transaction et l'envoie aux 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 sera capable de générer un bloc. Ce bloc est scellé (les transactions ne lui sont plus ajoutées) et envoyé sur le réseau. Ensuite, les clients vérifient la validité du blocage et des transactions qu’il contient. S'il n'y a pas de problèmes, les transactions sont considérées comme approuvées. À ce stade, un nouveau bloc a déjà atteint chaque client et ajouté à la chaîne. Après cela, le processus se répète - les clients commencent à générer le bloc suivant et y collectent de nouvelles transactions.

Bloc

Examinez plus en détail le contenu du bloc et le processus de sa génération. Vous trouverez un exemple de bloc dans le même explorateur de blocs Bitcoin . Le bloc comprend un en-tête et une liste de transactions. L'en-tête comprend les propriétés suivantes:

  • hash - hash-SHA-256 de l'en-tête de bloc. Un tel hachage est assez aléatoire et son temps de 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 - Version du diagramme. Pour le moment, tous les blocs ont une version - 1.
  • prev_block - Hash du bloc précédent dans la chaîne. En raison de cette propriété, une chaîne ne peut pas être falsifiée en remplaçant l'un des blocs qu'elle contient, car le hachage d'un bloc dépend toujours du hachage du bloc précédent de la chaîne. Changer l'un des blocs devra 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 afin qu'elles ne puissent 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 d'abord hachées, puis leurs hachages sont utilisés pour calculer le hachage de tout le bloc.

Cela peut sembler absurde - pourquoi calculer en double un 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 que le hachage de l'en-tête de bloc est recompté plusieurs milliers de fois par seconde. En outre, plus la taille de l'en-tête est proche dans 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 de création du bloc. L'année maximale autorisée est de 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 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 qu'il trouve un hachage approprié en une itération. Cette propriété est mise à jour toutes les deux semaines.

Cela se passe 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. S'il y a trop peu de blocs, cela diminue. Ainsi, le système s’adapte pour augmenter le 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 du hachage. En fait, c'est comme ça que la recherche se produit jusqu'à ce que le hachage soit inférieur à la valeur cible. Pour que chaque nouvelle valeur de hachage diffère de la précédente, au moins une des propriétés de l'en-tête de bloc doit être différente.

Par exemple, la version ne change jamais. Le hash du bloc précédent est mis à jour lorsque quelqu'un prend de l'avance sur nous et génère un nouveau bloc. Merkle root est mis à jour quand une transaction est ajoutée. Temps - toutes les quelques secondes. Bits (valeur cible, difficulté) - toutes les deux semaines. Tout cela est trop long. Afin de ne pas attendre que l’une des propriétés soit mise à jour et qu’il existe un nonce.

Considérons une situation hypothétique. Toutes les valeurs de nonce ont été vérifiées et aucune d’elles ne convient. Pendant ce temps, aucune autre propriété n'a changé. Un débordement de nonce se produit et il recommence à zéro. Il s'avère que d'autres 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 est modifiée. Après cela, la racine Merkle est mise à jour et les hachages d'en-tête de bloc ne seront pas répétés.

  • n_tx - Le nombre de transactions dans la liste.
  • taille - 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. Chaque transaction doit indiquer d'où elle tire l'argent (de quelle transaction existante) et où elle envoie.

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 le redirigera vers une autre adresse. Pour prouver qu’une personne utilise son argent, et non celui de quelqu'un d'autre, pour transférer, elle doit laisser sa signature numérique dans sa transaction. Ensuite, à tout moment, vous pouvez vous assurer que toutes les transactions du système sont valides.

En pratique, tout cela est implémenté en utilisant les propriétés suivantes:

  • hash - Le hash de la transaction entière. Il s'avère que les transactions sont hachées deux fois. Première fois lors du calcul du hachage de la transaction. La deuxième fois lors du calcul du hachage du bloc. De plus, chaque bloc fait référence au hash du précédent et chaque transaction au hash de la ou des transaction (s) précédente (s). Si vous modifiez la transaction et que, par miracle, son hachage ne se casse pas, tous les autres hachages se briseront et la chaîne de blocs modifiée sera rejetée par tous les clients.
  • ver - Version du schéma de transaction. Jusqu'à présent, il n'a jamais changé, il est donc égal à 1 partout.
  • 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 - Le 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 manière à ce qu'elles ne soient pas ajoutées au bloc généré en cours, mais par exemple au transfert en aval . Il est entendu que cette propriété indique le nombre de blocs qu'une transaction doit ignorer avant d'être ajoutée. Cela vous permet de modifier la transaction et de la signer à nouveau pour un certain temps.
  • size - Taille de la transaction en octets. La taille de la transaction est au format JSON.
  • in - Contient une liste d'entrées de transaction (sources). Les sorties des transactions précédentes (prev_out) sont utilisées comme entrées. Chaque sortie a les propriétés suivantes:
    • hash - Hash de la transaction précédente.
    • n - Étant donné qu'une transaction peut avoir plusieurs issues, vous devez indiquer laquelle prend de l'argent. Pour cela, cette propriété existe. Il contient le numéro de séquence de sortie de la transaction précédente, commençant à 0.
    • scriptSig - Dans cette propriété, l'expéditeur doit prouver qu'il transfère précisément son argent, et non celui de quelqu'un d'autre. Pour ce faire, il indique la clé publique du destinataire de la transaction précédente, c'est-à-dire sa propre clé, car il doit s'agir du destinataire. De plus, il ajoute une signature ECDSA à la même transaction, qui devient sa clé privée. Cela prouve qu'il gère son argent et non des étrangers.

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

  • valeur - Contient le montant 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 en envoyer 25 à une nouvelle adresse. Pour que les 5 pièces restantes ne disparaissent pas, nous les envoyons à nous-mêmes, en échange. Ainsi, dans notre transaction, il y aura deux destinataires, l'un d'eux étant nous-mêmes. La valeur est toujours indiquée en nanocoins pour éviter les nombres fractionnaires.
  • scriptPubKey - Cette propriété, ainsi que scriptSig, constituent le script de la modification

Le montant total en entrée de la transaction est toujours égal au montant total en sortie. Autrement, l'argent est sorti de l'air ou a disparu de la circulation. Mais au tout début, il y avait un graphique qui montre que le nombre d'argent augmente de manière exponentielle. Alors d'où vient le nouvel argent dans le système?

À mon goût, la question de l'argent est mise en œuvre simplement et avec élégance. Dans chaque bloc, la première transaction de la liste est une transaction spéciale. Il a toujours une entrée qui, au lieu de la propriété scriptSig , a une propriété coinbase . Cette propriété peut contenir n'importe quoi.

La stabilité du système dépend du nombre d’utilisateurs qui exécutent un client officiel. Bien qu'il y en ait la plupart, Bitcoin n'est pas en danger.

Conclusion

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

On peut rappeler ici l'analogie avec l'or, dont l'extraction prend beaucoup de temps et de ressources. Mais pour comprendre que devant vous est l'or, vous pouvez presque immédiatement. En ce sens, Bitcoin a aussi sa valeur. Mais ne comprenez pas cela comme étant le 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. Ce n'est pas inhérent à Bitcoin et est déterminé uniquement par le marché. Après tout, l’or en lui-même ne vous garantit pas un certain prix en dollars. Il n'est garanti que par une personne qui souhaite échanger de l'or contre des dollars.

La valeur initiale de l'or était uniquement déterminée par ceux qui l'exploitaient. Pour l'or extrait, il a tellement demandé qu'il soit possible de compenser les efforts déployés pour l'extraction. Et après cela, le marché commence à influencer le prix de l'or.

Une fois que Bitcoin est entré 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 ils achèteront de Bitcoin, plus ils y investiront d’argent et, par conséquent, plus le Bitcoin sera cher.

Avant que les gens puissent faire confiance à Bitcoin, ils doivent savoir si ce système a un degré de sécurité suffisant, et aussi s’il peut être utilisé comme argent, c’est-à-dire qu’il a les propriétés de l’argent que j’avais énuméré au début. Vous ne pouvez le savoir que dans les principes de Bitcoin.

J'espère qu'après cet article avec Khabarhabar, le niveau de confiance en Bitcoin augmentera légèrement.