Bitcoin, pièce par pièce · 6 min · démo interactive

Comment fonctionne la blockchain ? Construis la tienne en 50 lignes de JS

Une blockchain est un fichier dont chaque page cite l'empreinte de la précédente. Le reste vient de là. Ajoute des blocs, puis lis le code.

L’idée en une phrase

Une blockchain est une liste de blocs où chaque bloc contient l'empreinte du précédent, ce qui fixe leur ordre et rend toute retouche visible.

Ce n'est ni un logiciel magique ni une base de données rapide. C'est un journal qu'on peut seulement allonger, recopié par des milliers d'ordinateurs indépendants, et dont chacun peut recalculer tout l'historique pour vérifier qu'il tient debout.

La démo

Trois blocs existent déjà. Ajoute le tien : il citera le hash du dernier.
3blocs dans la chaîne
0nonces essayés ici
00e9e6e6d2…sommet de la chaîne
Bloc 0
DonnéesBloc de genèsePrécédent0000000000000000000000000000000000000000000000000000000000000000Nonce525Hash009a336ba699ca43e13f970c43f2970a69524d0ad583c9c1fa97f514031ddaad
Bloc 1
DonnéesAlice paie 5 à BobPrécédent009a336ba699ca43e13f970c43f2970a69524d0ad583c9c1fa97f514031ddaadNonce78Hash0011767e67b1aeae82eb6cbb3b08273cfaf4c452f0d5988466443a75849616fb
Bloc 2
DonnéesBob paie 2 à CarolePrécédent0011767e67b1aeae82eb6cbb3b08273cfaf4c452f0d5988466443a75849616fbNonce90Hash00e9e6e6d22b81aed0437127329bc3c9dcc63efed2bbb83e32c7506285a50dd7

Sans JavaScript, regarde les blocs ci-dessus. Le bloc 1 stocke dans son champ « Précédent » la valeur exacte du hash du bloc 0, 009a336b…. Son propre hash est le SHA-256 de la chaîne 1|009a336b…|Alice paie 5 à Bob|78, et le nonce 78 a été retenu parce que ce hash commence par deux zéros.

Intégrer cette démo

Copie ce code sur ton site, ton cours ou ton blog. La démo reste gratuite ; garde simplement le lien vers protocole.org.

Pourquoi ça compte

Alice et Bob veulent tenir un compte commun sans banque et sans se faire confiance. Si Alice tient le registre, elle peut l'arranger. Si chacun garde le sien, ils divergeront au premier désaccord. Il faut un registre partagé dont chaque ligne est vérifiable et dont l'ordre ne se discute pas.

Cet ordre compte plus qu'il n'y paraît : avec une monnaie numérique, la vraie menace est de dépenser deux fois la même somme. Celui qui voit deux paiements contradictoires doit savoir lequel est arrivé d'abord. Une chaîne de blocs répond à cette question sans arbitre.

Le code

Voici la chaîne entière, en moins de 50 lignes et sans bibliothèque de blockchain. Ajoute des blocs, ou passe DIFFICULTE à 3 ou 4 et regarde le nombre d'essais grimper. La dernière partie falsifie un bloc pour montrer ce que voit un vérificateur.

Clique sur Lancer pour exécuter ce code dans ton navigateur.

Ce qui se passe vraiment

Chaque carte de la démo est un bloc à quatre champs : les données, le hash du bloc précédent, un nonce et le hash du bloc. Celui-ci se calcule sur tout le reste. C'est le point central : le hash d'un bloc dépend du hash du précédent, qui dépend du précédent, et ainsi de suite jusqu'au bloc 0. Le dernier hash résume donc toute l'histoire.

Le bloc 0 s'appelle le bloc de genèse. Il n'a pas de parent, alors on inscrit 64 zéros à la place. Sur Bitcoin, il date du 3 janvier 2009 et contient un titre du journal The Times de ce jour-là, ce qui prouve qu'il n'a pas été créé avant.

Clique sur « Ajouter un bloc ». Le programme cherche un nonce tel que le hash commence par le nombre de zéros demandé. Avec deux zéros hexadécimaux, il faut environ 256 essais. Chaque zéro de plus multiplie l'effort par 16 : passe le curseur à 3 et regarde le compteur. Cette contrainte est une preuve de travail : fabriquer un bloc coûte des calculs, et n'importe qui peut en vérifier un d'un seul hash.

Le bouton de vérification rejoue ce que fait un nœud qui découvre la chaîne. Il ne lit pas le champ hash pour le croire : il le recalcule, contrôle le lien avec le bloc d'avant, puis compte les zéros. Aucune confiance n'entre en jeu, seulement du calcul.

Voici ce que ta mini-chaîne laisse de côté par rapport à Bitcoin :

ÉlémentMini-chaîneBitcoin
ContenuUn texte libreDes transactions signées
RésuméLe texte dans le hashRacine de Merkle dans l'en-tête
HashSHA-256 d'un texteDouble SHA-256 d'un en-tête de 80 octets
DifficultéCurseur manuelAjustée tous les 2 016 blocs
HorodatageAucunDans l'en-tête
RéseauTon ongletDes milliers de nœuds

Dans la vraie vie

Il manque à la démo la partie la plus difficile : le consensus. Sur un vrai réseau, deux mineurs peuvent trouver un bloc presque en même temps. Une partie des nœuds suit l'un, une partie suit l'autre. La règle résout ce conflit : on retient la chaîne qui a accumulé le plus de travail. Dès qu'un bloc s'ajoute d'un côté, l'autre branche est abandonnée, et ses transactions retournent en attente.

Le contenu d'un bloc n'est donc pas définitif dès son apparition. Il devient de plus en plus sûr à mesure que des blocs s'y empilent : on parle de confirmations. La page sur la blockchain infalsifiable calcule ce que cela représente et te laisse tenter une falsification.

Bitcoin vise un bloc toutes les dix minutes environ. Ce rythme volontairement lent laisse aux blocs le temps de se propager dans le monde entier. Sur Ethereum, la structure est voisine mais le mécanisme change : depuis 2022, les validateurs y remplacent les mineurs, et c'est la preuve d'enjeu qui choisit qui propose le bloc.

Une blockchain publique a un coût : tout le monde stocke et recalcule tout, donc elle reste bien moins rapide qu'une base de données classique. Elle n'a d'intérêt que si l'on veut se passer d'un tiers de confiance. Si un seul acteur contrôle les écritures, une base ordinaire fait mieux.

Ce qui peut mal tourner

  • Croire qu'une chaîne seule protège. Le chaînage révèle une modification mais ne l'empêche pas. Sans preuve de travail et sans réplication, on recalcule tous les hash en une fraction de seconde. C'est le cas de la mini-chaîne à zéro zéro exigé.
  • Accepter un paiement trop tôt. Une transaction sans confirmation peut être remplacée, ou disparaître dans une branche abandonnée.
  • Croire que tout ce qui est inscrit est vrai. Une blockchain garantit qu'une donnée a été inscrite, pas qu'elle est exacte. Un faux document horodaté reste faux.
  • Y inscrire des données personnelles. Ce qui est écrit y reste visible de tous, ce qui se concilie mal avec un droit à l'effacement.
  • Utiliser une blockchain par effet de mode. Un registre privé contrôlé par une seule entreprise n'apporte aucune garantie supplémentaire.
  • Dépendre d'un nœud unique. Un wallet qui interroge un seul serveur lui fait confiance. Le principe de vérification n'a de valeur que si quelqu'un vérifie vraiment.

Teste-toi

1. Qu'est-ce qui relie un bloc au précédent ?
2. Passer de 2 à 3 zéros hexadécimaux multiplie l'effort moyen par…
3. Que fait un nœud quand deux blocs valides arrivent en même temps ?