Quand la blockchain est-elle le mauvais outil ?
Une blockchain est un registre partagé, copié chez tous ses participants. Elle est le mauvais outil dès qu’une base de données ordinaire fait le même travail, ce qui arrive presque toujours.
Vous allez voir ce qu’elle coûte en énergie, en vitesse et en confidentialité, puis choisir l’outil qui convient à un besoin.
À la fin de cette leçon
Remarque
Je peux dire quand une blockchain est le mauvais outil et proposer une autre solution.
Mots-clés
| Mot | Ce que ça veut dire |
|---|---|
| Base de données | un registre tenu par un responsable qui décide de ce qui y entre |
| Tiers de confiance | une personne ou un organisme que tous les participants acceptent |
| Débit | le nombre de transactions traitées par seconde |
| Effacement | le droit de faire retirer des données personnelles |
| Journal en ajout seul | un registre où l’on ajoute des lignes sans jamais en retirer |
Les cellules que les étudiants remplissent restent vides dans cet aperçu.
La preuve de travail consomme de l’énergie
Chaque essai de minage est un calcul. Le travail est volontairement inutile : sa seule valeur est d’être cher à refaire. Chaque zéro de plus multiplie les essais par 16.
Le script mine.py écrit des mots anglais, comme « tries » pour essais. Il affiche 15, 835, 7992 et 109028 essais pour les difficultés 1 à 4. Le second calcul donne la moyenne pour huit zéros.
Revoir le coût de quatre difficultés
docker exec jupyter python3 steps/mine.pyAffichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.
Les essais moyens de la difficulté 8
docker exec jupyter python3 -c "print(16 ** 8)"Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.
Un registre partagé est plus lent
Pour accepter un bloc, tous les participants doivent le vérifier et s’accorder, comme dans la leçon sur le consensus. Cela prend du temps.
Une base de données gérée par un responsable accepte une ligne en un instant. Le débit, le nombre de transactions par seconde, est bien plus faible pour une chaîne.
Une copie chez tous : rien ne se retire
Chaque participant garde le registre entier. Une donnée écrite dans un bloc est donc copiée partout, et la changer demande de refaire la chaîne.
C’est un problème pour des données personnelles : une personne a le droit de demander leur effacement. On n’y écrit donc jamais une donnée secrète, au plus son empreinte.
Les alternatives à une blockchain
| Besoin | Solution plus simple | Ce qu’elle garantit |
|---|---|---|
| Un seul responsable tient le registre | Une base de données avec des droits d’accès | Le responsable décide qui écrit |
| On veut voir si une ligne a été changée | Un journal en ajout seul avec des empreintes en chaîne | Toute modification se voit, sans minage |
| Plusieurs sites gardent la même copie | Une base de données répliquée | Chaque site a la même donnée, vite |
| Des rivaux écrivent sans arbitre commun | Une blockchain peut convenir | Personne n’est obligé de croire quelqu’un d’autre |
Les cellules que les étudiants remplissent restent vides dans cet aperçu.
Exemple travaillé : choisir l’outil pour trois situations
| Situation | Plusieurs écrivains ? | Arbitre de confiance ? | Données secrètes ? | Choix |
|---|---|---|---|---|
| Stock de la cantine d’un lycée | Non | Oui, le lycée | Non | Base de données |
| Cinq transporteurs rivaux qui notent leurs livraisons | Oui | Non | Non, peu de lignes | Une blockchain peut convenir |
| Dossiers de patients d’un hôpital | Oui | Oui, l’hôpital | Oui | Base de données avec droits d’accès |
Les cellules que les étudiants remplissent restent vides dans cet aperçu.
Erreur fréquente
Attention
On croit qu’une blockchain est toujours plus sûre qu’une base de données. Elle rend les modifications visibles, rien de plus. Elle ne vérifie pas que ce qu’on y écrit est vrai. Si un responsable de confiance existe, elle coûte plus cher pour un service pire.
Les essais moyens selon la difficulté
for difficulte in range(1, 9):
essais = 16 ** difficulte
print("difficulté", difficulte, ":", essais, "essais en moyenne")
Les essais montent très vite avec les zéros
Le programme affiche huit lignes, de 16 essais pour un zéro jusqu’à 4294967296 pour huit zéros. Chaque ligne vaut seize fois la précédente.
C’est pour cela qu’un réseau réglé sur une grande difficulté consomme tant d’énergie.