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 acheté son idée de p2p. Plus j'enterrais profondément dans leur wiki, plus cette idée était imprégnée. Sa mise en œuvre est belle et élégante d'un point de vue technique.

Rechercher Bitcoin donne un tas de sujets. Il ressort des commentaires que beaucoup de gens, surtout ceux qui ne connaissent pas Bitcoin directement, se posent beaucoup de questions sur les principes de son travail. Il existe également de nombreuses 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 sur Bitcoin est prise par l'idée que Bitcoin est juste un autre "papier", qu'il soit électronique, qui ne représente que de la "vraie" monnaie, sont de tels billets à ordre. C’est d’où viennent la plupart des autres idées fausses: s’il s’agit de bouts de papier, ils ne valent rien; ils peuvent être imprimés ou détruits à leur guise; ils peuvent être falsifiés; vous pouvez les copier

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

Difficulté minière

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

Supposons qu'une personne toute la journée extrait de l'or avec diligence et finisse par produire 1 kg. Pour lui, la valeur de l'or extrait est une journée de dur labeur. Après une dure journée de travail, il a décidé de faire une pause et d’aller au cinéma. Par chance, la caissière 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 autre situation. Inventé un copieur qui fonctionne avec de l'or. Et toute personne peut gagner 10 kg par minute à partir de 1 kg d'or. Dans cette situation, le caissier n'échangera plus de billets contre de l'or, car il peut désormais imprimer lui-même autant de fois qu'il le souhaite. 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 devient difficile (plus onéreux en termes de ressources) de l'exploiter. Cela garantit que l'inflation est sous contrôle.

En Bitcoin, un comportement similaire est obtenu en introduisant une fonction du taux de pièces totales extraites au fil du temps. 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 au fil du temps, nous obtenons un exposant. Quelque chose comme ça:

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

Ici, vous pouvez voir que le nombre total de pièces tend à 21 000 000. Les détails du travail de Bitcoin seront discutés plus en détail. En attendant, vous devez savoir deux choses: les pièces apparaissent dans le système par lots toutes les 10 minutes environ, le nombre de pièces d'un paquet est de 50 et il est divisé par deux tous les 4 ans.

La matérialité

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

Ce comportement est naturel pour la devise en question, mais pas pour l’électronique. Pour obtenir ce comportement de l'argent virtuel, vous devez mettre beaucoup d'ingéniosité. En Bitcoin, ce comportement est fourni par le mécanisme de transaction. Toutes les transactions sont fusionnées dans des chaînes. 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. Ils sont basés sur le noyau Bitcoin. Ce n'est pas simplement 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'examiner cette conception même.

Chaîne de blocs

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 l'ensemble de l'opération Bitcoin.

Dans les versions actuelles du programme Bitcoin, la 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 dans la chaîne était de 110 968 et, comme je l’ai dit plus tôt, ce nombre augmente toutes les 10 minutes environ, ce qui signifie que certains participants ont 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. Un tel bloc est scellé (plus aucune transaction n'y est ajoutée) 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 a été ajouté à la chaîne. Après cela, le processus se répète - les clients commencent à générer un autre bloc et y collectent de nouvelles transactions.

Bloc

Examinez 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 comprend un en-tête et une liste de transitions. L'en-tête comprend les propriétés suivantes:

  • hash - Hachage 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 transaction. Le nombre de transactions n'influencera 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 - Le hachage du bloc précédent dans la chaîne. En raison de cette propriété, la chaîne ne peut pas être falsifiée en remplaçant l'un des blocs qu'elle contient, car le hachage de 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 de transactions afin qu'elles ne puissent pas être falsifiées. Mais il faudra beaucoup de temps pour le calculer directement 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 double-calculer 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 d'en-tête de 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 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 difficulté de créer un 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. Si les blocs sont trop petits - diminue. Ainsi, le système s'adapte à l'augmentation du nombre d'utilisateurs et, par conséquent, à la capacité 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, voici comment se déroule la recherche 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 hachage 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, complexité) - toutes les deux semaines. Tout cela est trop long. Ne pas attendre que l'une des propriétés soit mise à jour et qu'il n'y ait plus d'existence.

Considérons une situation hypothétique. Toutes les valeurs de nonce ont été vérifiées et aucune d’entre elles n’a été trouvée. 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, une propriété particulière de l’une des transactions change après le non-dépassement. Après cela, la racine Merkle est mise à jour et les hachages d'en-tête de bloc ne seront plus 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 dans une liste. Comme des blocs, ils sont alignés. Chaque transaction doit indiquer d'où elle provient (à partir de quelle transaction existante) et où elle va.

Pour indiquer le destinataire, sa clé publique est utilisée. Pour que le destinataire utilise l'argent reçu, il doit créer une nouvelle transaction qui prendra l'argent de la précédente et le redirige vers une adresse différente. Pour prouver qu'une personne utilise son argent pour le transfert et non des étrangers, elle doit laisser sa signature numérique dans sa transaction. Ensuite, vous pouvez à tout moment 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 - Hash la transaction entière. Il s'avère que les transactions sont hachées deux fois. Premier 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 transactions précédentes. Si vous modifiez une 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 l'argent est transféré à de nouvelles adresses. Un ou plusieurs.
  • vout_sz - Le nombre d'adresses vers lesquelles l'argent est transféré. Un ou plusieurs.
  • lock_time - En cours d'utilisation 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 suivant. Cela implique que cette propriété indique le nombre de blocs qu'une transaction doit ignorer avant d'être ajoutée. Cela permet pendant un certain temps de changer la transaction et de la signer à nouveau.
  • size - Taille de la transaction en octets. Taille de transaction implicite au format JSON.
  • in - contient la liste des entrées (sources) de la transaction. Les entrées des transactions précédentes (prev_out) sont utilisées comme entrées. Chaque sortie a les propriétés suivantes:
    • hash - Le hash de la transaction précédente.
    • n - Étant donné qu'une transaction peut avoir plusieurs sorties, vous devez spécifier à partir de quelle transaction l'argent a été prélevé. Pour cela et 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 transfère exactement son argent et non des étrangers. Pour ce faire, il spécifie la clé publique du destinataire de la transaction précédente, c'est-à-dire sa clé, car il doit s'agir du destinataire. De plus, il ajoute la signature ECDSA de la même transaction, qui devient sa clé privée. Cela prouve qu'il gère son argent, pas des étrangers.

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

  • valeur - Contient le montant qui sera transféré à la nouvelle adresse. Ils sont tirés de transactions précédentes. Par conséquent, ce nombre ne doit pas dépasser leur somme. Par exemple, nous voulons prendre 10 pièces d’une transaction et 20 d’une autre et en envoyer 25 à une nouvelle adresse. Pour 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, l'un d'eux étant nous-mêmes. La valeur est toujours indiquée en nanomonet pour éviter les nombres fractionnaires.
  • scriptPubKey - Cette propriété, avec scriptSig, constitue le script sur le fichier modifié.

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

À 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 a la propriété coinbase au lieu de la propriété scriptSig . 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 que la plupart d'entre eux, Bitcoin ne menace rien.

Conclusion

Preuve de travail - 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 (le résultat du travail) en une fraction de seconde. Et pour le ramasser, cela demande beaucoup de travail.

Vous pouvez rappeler ici l'analogie avec l'or, dont l'extraction prend beaucoup de temps et de ressources. Mais vous pouvez comprendre que l’or est devant vous presque immédiatement. En ce sens, Bitcoin a aussi sa valeur. Mais ne comprenez pas cela comme le 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 incorporé dans Bitcoin et est déterminé uniquement par le marché. Après tout, l'or 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 déterminée exclusivement par ceux qui l'exploitaient. Pour l'or extrait, il a tellement demandé qu'il était 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 le bitcoin est arrivé 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 les Bitcoins achèteront, plus ils investiront de dollars et, par conséquent, plus les Bitcoins seront chers.

Avant que les gens puissent faire confiance à Bitcoin, ils doivent savoir si ce système dispose d'un niveau de sécurité suffisant et s'il peut être utilisé comme argent, c'est-à-dire qu'il a les propriétés d'argent que j'ai énumérées au début. Pour le savoir, vous ne pouvez comprendre que les principes de fonctionnement de Bitcoin.

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