Bienvenue !
Il s'agit d'un tutoriel interactif destiné aux débutants qui souhaitent en savoir plus sur l'aspect technique du bitcoin. Une expérience du codage est utile, mais pas obligatoire.
Cela prend environ 20 minutes à compléter. Il est conçu pour un ordinateur de bureau, alors s'il vous plaît, je vous en supplie, n'essayez pas sur un mobile.
Try Bitcoin utilise des bibliothèques JavaScript Bitcoin populaires comme bitcoinjs et bip-schnorr pour expliquer les différentes parties du système. Il présente également quelques commandes Bitcoin Core CLI .
Certains concepts ont été simplifiés à des fins pédagogiques, mais ne vous laissez pas décourager ! L'objectif est de permettre aux participants de mieux comprendre le fonctionnement de Bitcoin et d'acquérir la confiance nécessaire pour s'attaquer aux nombreux livres, cours et sites Web qui permettent d'approfondir le sujet.
Sur la droite, nous avons quelque chose qui s'appelle une
Pour commencer, tapez
Leçon 1
La plupart des gens connaissent le bitcoin en tant que type de monnaie, mais qu'est-ce que cela signifie d'en posséder ?
Les unités de bitcoin sont attribuées à des éléments appelés
Dans des situations avancées, les bitcoins peuvent être assignés à plusieurs clés publiques. Des scripts rendent cela possible, mais nous ne les aborderons pas.
Pour l'instant, il est possible de corréler la propriété des bitcoins avec une seule clé publique.
À chaque clé publique correspond une
Si la clé publique peut être partagée, la clé privée ne doit jamais être révélée à quiconque.
Commençons par générer une paire de clés publiques et privées pour voir à quoi elles ressemblent.
Tapez
Leçon 2 - Signatures
Comme vous pouvez le constater, les clés publiques et privées peuvent ressembler à de grosses chaînes de lettres et de chiffres. Ceux-ci sont encodés en hexadecimale.
Vous verrez que l'hexadécimale est souvent utilisé. Vous n'avez pas nécessairement besoin de savoir comment il fonctionne, mais simplement qu'il s'agit d'un moyen de représenter des données. Il est beaucoup plus facile pour l'homme de regarder et de reconnaître l'hexadécimale qu'un tas de 1 et de 0 !
Il s'avère que l'on peut faire des choses plutôt cool avec des clés publiques et privées.
Une clé privée peut être utilisée pour signer certaines données et créer une
La clé publique est ensuite utilisée pour vérifier que la signature est authentique. A-t-elle vraiment été signée par qui vous pensez ?
Cela signifie que vous pouvez signer numériquement un élément de données et que toute personne possédant votre clé publique peut vérifier que la signature provient bien de vous.
La clé privée que vous venez de générer a été enregistrée dans une variable appelée privateKey
. Désormais, à chaque fois que vous tapez privateKey
, le programme saura que vous faites référence à cette longue chaîne de lettres et de chiffres qui représente votre clé privée.
Créons une signature numérique en signant un message. Tapez
Après avoir appuyé sur Entrée, la signature numérique sera renvoyée.
Leçon 3 - Vérification de la signature
Bon travail ! Nous avons créé une signature numérique en utilisant la clé privée. Nous pouvons maintenant utiliser la clé publique correspondante pour vérifier l'authenticité de la signature.
Semblable à la leçon précédente, ce tutoriel a automatiquement enregistré les valeurs publicKey
,message
et signature
vers des variables de même nom.
Ce qui siginfie que tout ce que vous avez à faire est de taper
Leçon 4 - Hachage
Comme prévu, la signature est valide !
Les signatures numériques de ce type font partie des technologies les plus importantes au cœur du bitcoin. Dépenser des bitcoins revient en fait à signer un message - un message de transfert de propriété.
Vous avez peut-être entendu parler de l'importance de protéger vos clés (privées). Voici pourquoi ! Toute personne qui y a accès peut signer des messages en votre nom, des messages qui transfèrent la propriété, c'est-à-dire dépenser, de vos bitcoins.
Une autre partie essentielle et connexe de Bitcoin est
Le hachage est en quelque sorte la création d'une empreinte numérique pour un élément de données.
Tout commence par une fonction, la fonction de hachage, qui renvoie toujours des sorties, ou des hachages d'une taille définie. Cela est vrai quelle que soit la taille de l'entrée.
- Tout comme les empreintes digitales, les hachages sont uniques. Sauf circonstances exceptionnelles, les hachages de deux choses différentes ne devraient jamais être les mêmes.
- Les fonctions de hachage sont à sens unique. Vous ne pouvez pas faire de l'ingénierie inverse sur un hachage et découvrir les données utilisées pour le faire.
- Les hachages sont extrêmement fiables dans le sens où ils sont déterministes. Cela signifie que vous pouvez hacher le même élément de données encore et encore et vous obtiendrez toujours le même résultat.
Exemple
J'ai pris la phrase "Cypherpunks write code" et je l'ai fait passer par une fonction de hachage, représentée par cette boîte noire étincelante. Sur la droite, une chaîne de lettres et de chiffres apparaît.
Cela n'a probablement pas l'air très excitant. Le hachage résultant est en fait plus long que la phrase qui a été entrée, et il est maintenant complètement indéchiffrable. Mais si nous essayions de hacher quelque chose de plus long ? Que diriez-vous de hacher le premier paragraphe du livre blanc du Bitcoin ?
Regardez ça ! Ce long paragraphe a été réduit à une chaîne unique de lettres et de chiffres. Comme prévu, il est totalement différent du hachage de "Cypherpunks write code", pourtant les deux hachages ont la même longueur.
Vous voyez des hachages partout dans Bitcoin, des identifiants de transaction à la création d'adresses, en passant par les scripts qui définissent des conditions de dépense particulières. Souvent, un élément d'information sera réduit à son hash pour gagner de la place.
Testons la propriété déterministe des fonctions de hachage.
Nous allons régénérer ce hash nous-mêmes. Tapez
Leçon 5 - Adresses
Les hashs correspondent ! Maintenant que nous connaissons les paires de clés publiques/privées et le hachage, nous pouvons commencer à comprendre ce que signifie recevoir des bitcoins. Lorsque vous voulez en recevoir, vous fournissez une
En voici un exemple : 2NEwkTybLpYyaRooBFMXAJDtchRdA8FMM4G
Oui, je sais, une autre chaîne de lettres et de chiffres qui semble aléatoire... mais c'est en fait un hash !
Pour simplifier, les adresses sont des hachages de clés publiques. Vous vous souvenez, plus tôt, quand nous avons appris que la propriété des bitcoins est corrélée aux clés publiques ? Voici comment.
Pour les applications avancées, les adresses peuvent correspondre à plusieurs clés publiques. Cela est rendu possible par ce qu'on appelle les scripts, mais cela dépasse le cadre de ce tutoriel.
Nous savons, grâce à la leçon précédente, que vous ne pouvez pas revenir en arrière avec les hachages. Si quelqu'un vous donne une adresse, vous ne pouvez pas faire l'ingénierie inverse de la clé publique utilisée pour la créer.
Essayez de générer une adresse pour vous-même ! Tapez createAddress()
avec la clé publique que vous avez créée précédemment.
Leçon 6 - Transactions et Coins
Voilà l'adresse !
À ce stade, je dois dire ce qui est évident. N'envoyez pas de bitcoin à cette adresse. Vous ne les reverrez jamais. Selon les mots du créateur anonyme de Bitcoin, Satoshi Nakamoto,
"Les pièces perdues ne font qu'augmenter légèrement la valeur des pièces des autres. Considérez cela comme un don à tout le monde."
Le mouvement du bitcoin est suivi par les
Vous verrez que la transaction est divisée en deux parties, l'
Ceci est similaire à la comptabilité à double entrée, une pratique populaire chez les marchands italiens au 14ème siècle. Leurs grands livres comportaient deux colonnes, une pour les débits et une pour les crédits.
La partie d'entrée de la transaction est comme la colonne "débit" et la partie de sortie est comme la colonne "crédit".
Dans notre exemple, il n'y a qu'une entrée (le bitcoin d'Alice) et une sortie (maintenant votre bitcoin). Et si Alice avait 10 bitcoins ? Si elle ne veut vous en donner qu'un, elle doit préciser que les 9 autres lui seront rendus comme monnaie.
Voici à quoi ressemble cette transaction :
Si Alice n'avait pas précisé qu'elle voulait récupérer la monnaie, les 9 bitcoins restants seraient allés à des personnes que nous appelons des mineurs (nous y reviendrons plus tard) !
L'analogie du billet d'un dollar
Comme vous le voyez, cette transaction a une entrée et deux sorties.
Les entrées et les sorties sont un peu comme des billets de banque. Ils ne peuvent pas être décomposés sans une transaction. Si Alice n'a qu'un billet de 10 dollars et qu'elle veut vous donner 1 dollar, elle ne peut pas rendre la monnaie toute seule. Elle ne peut pas arracher 1/10e du billet et vous le donner. Elle doit créer une sorte de transaction, peut-être avec une caisse enregistreuse, et utiliser le billet de 10 $ comme entrée.
Les choses commencent à différer de l'argent traditionnel (aka fiat) quand nous regardons les dénominations. En Bitcoin, vous pouvez avoir un "billet" dans n'importe quelle dénomination. Dans cette analogie, Alice recevrait en fait un billet de 9 $ comme monnaie.
Les entrées et les sorties, l'entrée de 10 bitcoins d'Alice, sa monnaie de 9 bitcoins, et votre 1 bitcoin sont souvent appelés
Cela semble simple, mais n'oubliez pas qu'un "coin" peut être n'importe quelle dénomination de bitcoin. Il n'est pas nécessaire que ce soit 1 bitcoin. Il peut s'agir de 21 bitcoins, ou de fractions de bitcoins comme 0,1.
Vous entendrez souvent parler de "coin" lorsque les gens parleront de la vie privée.
Le logiciel "officiel" de Bitcoin, l' implémentation de référence, est quelque chose appelé Bitcoin Core. Bitcoin Core dispose d'un ensemble de commandes que vous pouvez utiliser pour gérer vos bitcoins.
Si nous jouons l'exemple où Alice nous envoie un bitcoin, nous pouvons utiliser la commande getbalance
pour voir que l'argent a été reçu.
Tapez
Leçon 7 - Signature de la transaction
Le solde est correct ! Considérons maintenant le scénario dans lequel Bob vous envoie également 1 bitcoin (vous avez de la chance !).
Pour des raisons de confidentialité, il est déconseillé de réutiliser les adresses. Dans les exemples suivants, nous allons créer de nouvelles adresses lorsque cela est nécessaire.
Les détails sur la façon dont vous pouvez générer une gamme de nouvelles adresses sont en dehors du cadre de ce tutoriel. Vous pouvez en savoir plus en consultant BIP 32.
Vous créez une nouvelle adresse à donner à Bob, différente de celle que vous avez donnée à Alice.
Bob vous envoie un bitcoin, comme Alice l'a fait dans la leçon précédente. Vous avez maintenant 2 bitcoins.
Vous souhaitez acheter quelque chose à votre ami Hal pour 1,5 bitcoin. Pour ce faire, vous créez une transaction comme celle-ci :
- Les deux entrées sont les bitcoins que vous avez reçus d'Alice et de Bob.
- La première sortie envoie 1,5 bitcoin à Hal.
- La deuxième sortie vous renvoie la monnaie de 0,5 bitcoin, à une nouvelle adresse.
Cette transaction est presque prête, à l'exception d'une chose très importante !
Nous avons appris précédemment que pour pouvoir dépenser des bitcoins, vous devez signer un message qui autorise le transfert de fonds. C'est ainsi que vous empêchez les autres de dépenser vos bitcoins. Le message que vous signez est en fait la transaction !
Dans les exemples précédents, Alice et Bob devaient tous deux signer leurs transactions lorsqu'ils vous envoyaient des bitcoins.
Les transactions comportent une zone spéciale où le dépensier ajoute sa signature numérique. Ce champ est nommé scriptSig
, bien qu'il existe de nombreux cas particuliers et de nombreuses règles à ce sujet que nous ne couvrirons pas. Pour l'instant, tout ce que nous devons retenir, c'est :
1. les signatures vont dans le champ scriptSig, et
2. les transactions ne sont pas complètes tant qu'elles ne sont pas signées.
Vous trouverez ci-dessous les données brutes de notre transaction. Nous pouvons voir que les deux champs scriptSig
(un pour chaque entrée) sont vides. Ils ne contiennent aucune signature.
Si nous essayons de diffuser cette transaction telle quelle sur le réseau Bitcoin, elle sera rejetée. La transaction doit être signée.
Nous utiliserons une fonction signTransaction()
pour cela. C'est similaire à l'appel signMessage()
fait précédemment, mais les données signées sont différentes. Au lieu d'accepter n'importe quel message arbitraire, ceci accepte une transaction. Il crée ensuite le nombre approprié de signatures, une par entrée.
La transaction brute que nous avons examinée ci-dessus a été sauvegardée dans la variable transaction
.
Tapez
Leçon 8 - Diffusion d'une transaction
Vous voyez ces valeurs dans les champs scriptSig
? Cela signifie que la transaction a été signée !
Maintenant, nous pouvons aller de l'avant et la
Chaque nœud Bitcoin possède un ensemble de pairs avec lesquels il "parle" régulièrement. Lorsqu'un nœud entend parler d'une nouvelle transaction, il la partage avec ses pairs.
il suffit seulement de quelques minutes pour qu'une transaction soit transmise au reste du réseau Bitcoin ! Au moment de la rédaction de cet article, il y a plus de 15,000 noeuds Bitcoin dans le monde.
Nous utiliserons le même logiciel Bitcoin Core que précédemment pour faire la diffusion. Le nom de la commande est sendrawtransaction
et elle accepte la transaction au format hexadécimal.
La conversion en hexadécimal a déjà été effectuée pour vous, mais vous remarquerez qu'il s'agit d'une longue chaîne de lettres et de chiffres ! Copiez la commande suivante et exécutez-la dans la console :
Leçon 9 - Attente des confirmations
Regardez ça ! Après une diffusion réussie, le client Bitcoin Core renvoie l'identifiant de la transaction.
Comme il s'agit juste d'un exercice éducatif, nous ne pouvons pas faire grand-chose avec l'ID de la transaction, mais s'il était réel, nous serions en mesure de rechercher la transaction dans un explorateur de blocs et voir toutes sortes de détails à ce sujet.
Maintenant que le reste du réseau est au courant de votre transaction, celle-ci est presque finalisée, mais il reste encore une étape à franchir :
C'est là qu'intervient la partie "bloc" de la blockchain du bitcoin. Après avoir diffusé une transaction, elle va dans une zone de stockage spéciale appelée le
Les transactions non confirmées traînent ici, attendant d'être ramassées par un mineur et mises dans un bloc.
Le mempool n'est pas un endroit unique et centralisé. Chaque nœud a son propre mempool. Après qu'une transaction soit diffusée, et avant qu'elle ne soit minée, elle se trouve dans les mempools de chaque nœud qui a été mis au courant de la transaction.
Toutes les dix minutes environ, un mineur prend un ensemble de transactions non confirmées dans sa copie du mempool et les place, ou les "exploite", dans un bloc.
Frais
La probabilité que votre transaction se retrouve dans le bloc suivant dépend des autres transactions dans le pool de mémoire et des frais que vous choisissez de payer.
Nous n'avons pas explicitement abordé les frais, mais nous en avons appris un peu plus à leur sujet en examinant les sorties de monnaie. Vous vous souvenez de l'exemple où Alice avait 10 bitcoins et voulait vous en envoyer un ? Elle a dû préciser que les 9 restants devaient lui être retournés, sinon ils auraient été considérés comme des frais ! Les frais vont au mineur qui crée le bloc.
Tout montant de bitcoin "restant" dans une transaction est considéré comme des frais.
Dans l'exemple précédent, si Alice décide de ne retourner que 8,5 bitcoins à elle-même, 0,5 bitcoin correspondra aux frais de transaction. Les calculs sont corrects : l'entrée totale de la transaction est de 10 (les 10 bitcoins d'Alice), et la sortie totale est de 9,5 (1 pour vous, et 8,5 pour Alice en tant que monnaie).
Aux premiers jours du bitcoin, les transactions n'avaient pas besoin de payer de frais, mais à mesure que le bitcoin mûrit, les frais sont de plus en plus importants.
Pour notre exercice, nous allons considérer le cas où un certain temps s'est écoulé et où la transaction que nous avons diffusée dans la leçon précédente a été minée. Elle a fait son chemin dans un bloc.
Comment le saurions-nous ? Nous pourrions demander périodiquement à un nœud Bitcoin, ou utiliser l'un des explorateurs de blocs mentionnés précédemment pour surveiller la blockchain et voir quand une transaction particulière est minée.
La dernière chose à faire est de vérifier une dernière fois notre solde pour s'assurer qu'il est exact et qu'il reflète les 1,5 bitcoin envoyés à notre ami Hal dans la leçon précédente.
Vous pouvez le faire avec la même commande
C'est tout pour le moment !
Le solde est correct ! Nous avons commencé avec 2 bitcoins (un d'Alice et un de Bob), avons envoyé 1,5 bitcoin à notre ami Hal et avons reçu 0,5 bitcoin en retour.
Merci d'avoir consulté ce petit tutoriel. Si vous souhaitez le refaire, vous pouvez utiliser la commande
Le plaisir ne doit pas s'arrêter là ! Vous êtes maintenant prêt à vous aventurer plus loin dans le terrier du lapin. Voici quelques-unes de mes ressources préférées pour continuer à apprendre sur le bitcoin :
Ressources générales
- Hello Bitcoin: Votre source unique d'informations de base. Couvre un large éventail de sujets allant de l'autonomisation économique et de la liberté financière à la consommation d'énergie et au réseau peer-to-peer. Si vous voulez en savoir plus sur le bitcoin, mais que vous n'avez pas envie de vous pencher sur des sujets plus techniques. Ce site est fait pour vous !
- Bitcoin Money: A Tale of Bitville Discovering Good Money par Michael Caras : C'est un adorable livre pour enfants sur le bitcoin, mais je le recommande à tous les âges !
- 6 week virtual seminars avec Chaincode Labs : Vous avez besoin d'une motivation externe ? Vous voulez apprendre avec des amis ? Chaincode rend cela amusant et gratifiant ! Ces séminaires sont pour tous les niveaux, vous devez juste être capable de vous engager pour 4-6 heures par semaine.
- Mastering Bitcoin by Andreas Antonopoulos [free digital version]: Il s'agit du premier manuel sur le bitcoin et il doit être lu par tous ceux qui veulent construire sur le bitcoin ou y contribuer.
- Learning Bitcoin from the command line par BlockChain Commons : Êtes-vous un magicien de la ligne de commande ? L'idée d'utiliser une interface graphique vous fait-elle bâiller ? Vous refusez d'aller quelque part si vous ne pouvez pas prendre votre bonbon shell avec vous ? BlockChain Commons est là pour vous. Apprenez votre chemin à travers Bitcoin sans jamais avoir à quitter le confort de votre terminal !
- Still haven't found something for you? https://bitcoin.page propose tous les types de ressources sur le bitcoin que vous pouvez souhaiter, sur toutes les facettes du bitcoin auxquelles vous pouvez penser. Des podcasts aux vidéos, en passant par les statistiques, la sécurité, l'art et la musique, cette page contient tout. Je n'ai pas encore vu de ressource de qualité qui ne figure pas sur cette liste exhaustive, mais si vous parvenez à trouver quelque chose qui manque, les PR (pull requests) sont toujours les bienvenus !
Développement de Bitcoin Core :
Pour ceux qui aiment boire au robinet et être jetés dans le grand bain, voici où vous pouvez aller pour en savoir plus sur Bitcoin Core.
- le code Bitcoin Core sur GitHub: Commencez ici et téléchargez une copie du code ! Le répertoire
docs
est riche en informations et en notes de productivité pour les développeurs. - Embarquement vers Bitcoin Core par Amiti Uttarwar: Amiti est comme le BFF de Bitcoin Core que nous aimerions tous avoir. Laissez-la vous guider à travers les étapes que vous pouvez suivre pour devenir un contributeur actif.
- Articles sur la façon de compiler Bitcoin Core, d'examiner les demandes de retrait et de trouver d'autres ressources. par Jon Atack: L'une des meilleures façons de contribuer est d'examiner les demandes de modification. Jon vous guide à travers certains des aspects les moins évidents de ce processus. Mettez ces pages dans vos favoris, car vous y reviendrez sans cesse !
Saisir les commandes ici