Marmelab Blog

La blockchain expliquée aux développeurs web, 3ème partie : la vérité sur la blockchain

Après avoir exploré de manière théorique la blockchain, et après avoir utilisé la blockchain pour de vrai, nous avons maintenant une meilleure compréhension de ses forces et de ses faiblesses. Surprise : nos conclusions sont très différentes de ce que vous pourrez lire ailleurs sur le web. Peut-être est-ce parce que nous ne relayons pas aveuglément la fascination ambiante, engendrée par l'impressionnante valorisation du BitCoin et des autres crypto-monnaies. C'est sûrement dû au fait que la dure réalité à propos de la blockchain, c'est qu'en fait elle n'est pas encore prête. Ce billet décrit en détail comment nous en sommes arrivés à cette conclusion, et les preuves solides sur lesquelles nous nous appuyons. Il est la traduction d'un billet en langue anglaise publié il y a quelques jours sur ce même blog.

La technologie n'est pas assez mature

Comme nous l'avons expliqué en détail dans le second article de cette série, développer des DApps (Decentralized Apps en anglais) sur la blockchain, c'est douloureux. La communauté des développeurs est plutôt restreinte, les extraits de code disponibles ne fonctionnent pas, les tutoriels sont périmés, les librairies sont criblées de bugs, il n'y a pas d'outils pour développer, les bugs ne déclenchent pas d'alertes, etc.

Ce n'est pas parce que les développeurs et la communauté Ethereum sont mauvais. Bien au contraire : ils sont incroyables, et ils investissent beaucoup de temps et d'expertise dans leurs outils. Mais construire un framework de blockchain, c'est beaucoup de travail, et ils n'en sont même pas à la moitié. Ethereum n'a pas encore atteint le point il est vraiment utilisable. J'ai la certitude que cela va changer dans le futur, mais je ne sais pas si ça prendra des mois ou des années.

Note: Nous n'avons pas développé d'application décentralisée (DApp) pour Bitcoin, mais j'ai entendu dire que c'était encore pire. Au lieu d'utiliser un langage proche de JavaScript (Solidity) pour écrire les smart contracts, il faut utiliser un langage proche de l'assembleur, qui n'est même pas Turing-complet. Beurk.

La conséquence est que les développeurs ne veulent pas travailler sur des projets blockchain. Ils trouvent cette technologie très frustrante. Si vous les forcez à travailler avec une technologie qu'ils détestent, ils partiront. Et vu qu'il est extrêmement difficile de trouver des développeurs compétents ces temps-ci, vous devriez regarder à deux fois avant de vous lancer sur la blockchain.

La deuxième conséquence est qu'il est impossible d'estimer le temps que prendra un projet sur la blockchain. Et si vous ne pouvez pas estimer vos coûts, je vous souhaite bonne chance pour construire un Business model sur la blockchain.

Les Smart Contracts ne peuvent pas appeler d'API

Dans notre expérimentation sur la blockchain, tout ce qui était un peu intelligent dans le smart contract a dû être déplacé vers un bon vieux service web tournant hors de la blockchain, dans un environnement de confiance. Par exemple, un smart contract ne peut pas déterminer si la personne demandant un emplacement publicitaire est bien l'auteur d'une pull request, parce qu'un smart contract ne peut pas appeler l'API GitHub. Du coup, notre smart contract ne conserve que très peu de logique, et devient, par voie de conséquence, un dumb contract. Ce n'est pas ce que nous voulions, mais nous n'avons pas pu faire autrement.

La blockchain est conçue pour être déterministe. Cela veut dire que si vous prenez tout l'historique des transactions, et que vous les rejouez localement, vous devez aboutir au même état que tous les autres noeuds. C'est ce qui interdit d'appeler des API externes, car les réponses pourraient varier dans le temps, ou varier selon celui qui les appelle.

Une blockchain est un espace clos. On peut y exécuter un contrat venu du monde extérieur, mais le contrat lui-même ne peut pas dépendre de données provenant d'une source externe. Si un smart contract nécessite des données externes, il faut injecter ces données dans blockchain au préalable.

Dans la vraie vie, très peu d'applications fonctionnent de manière isolée. Toutes les applications que nous avons développées ces trois dernières années reposaient sur des API externes - pour de la gestion d'identité, du paiement, de la transformation d'image, du stockage, etc. En pratique, les possibilités trop limitées des smart contracts les rendent inutiles.

Des efforts sont faits pour permettre aux smart contracts d'appeler à l'extérieur, avec notamment le concept des oracles. Mais un oracle a besoin d'un système de réputation et une gouvernance centralisée. Fini la désintermédiation, retour à la case départ.

Il faut un doctorat pour s'y retrouver

Si vous avez lu le premier article de cette série, vous pensez probablement que vous avez compris la blockchain. Vraiment ? Alors allez lire cet article pour voir. Je suis un ingénieur moyen avec seulement 20 ans d'expérience en développement web, et je n'ai plus rien compris à partir de la référence à Jurassic Park. Des termes comme "two-way-pegged blockchains", "pre-determined Host Oracle Contract", et des phrases comme "The M-S result, combined with our inability to feed (non-BB) a revelation mechanism, means that Oracles are out" me donnent la désagréable impression d'être un étudiant de première année.

Le concept de blockchain est complexe. Les implémentations existantes s'appuient sur des design patterns rares, que l'on n'apprend pas à l'école. Le vocabulaire de la blockchain est cabalistique.

Développer des applications décentralisées en s'appuyant sur la blockchain nécessite de comprendre trop de concepts compliqués, qui ne tiennent pas dans le cerveau d'un développeur moyen. A mon avis, il n'y a pas assez de programmeurs hautement compétents pour assurer la révolution promise par la blockchain. Et il n'y en aura jamais, tant que ce sera si difficile à comprendre.

Il en résulte que la plupart des apps décentralisées sont vraiment bugguées. Un article récent annonçait que les smart contracts Ethereum contiennent 1 bug toutes les 10 lignes de code, faisant d'Ethereum "du pain béni pour les hackers". Ce ne serait pas vraiment un problème si les bugs n'étaient pas si difficiles à corriger. Malheureusement, comme nous l'avons expliqué dans l'article précédent, vous ne pouvez pas mettre à jour un smart contract. Vous devez créer un nouveau contrat, transférer toutes les données et les pointeurs depuis l'ancien contrat vers le nouveau, et attendre que la blockchain propage les changements. Les vieux contrats tout buggés restent dans la blockchain pour toujours.

Le pouvoir aux développeurs

Les créateurs de blockchains disent que c'est un espace où "le code, c'est la loi" (Code as law en anglais). Je ne veux pas trop noircir le tableau, mais, dans mon esprit, les scénarios possibles d'une société gouvernée par des machines ne se terminent pas tous par un "happy end".

When machines control the world

"Le code, c'est la loi", ça veut aussi dire "les bugs, c'est la loi", vu que tout programme contient des bugs. Ces bugs peuvent être utilisés par certains développeurs malins (les criminels, la NSA, etc.) pour s'affranchir de jouer selon les règles. Les bugs sont très courants, même dans des projets open-source célèbres.

Bitcoin, par exemple, a dû essuyer de nombreux bugs critiques qui ont mené à des "cyber-vols". Le récent scandale de la DAO (la DAO est une sorte de KickStarter ouvert, basé sur Ethereum) jette lui aussi une lumière crue sur ce problème : en utilisant une faille dans un smart contract, un hacker a siphonné 50 millions de dollars, en toute légalité. Donc laisser les clefs aux développeurs, ça veut dire donner un pouvoir extraordinaire aux développeurs moyens.

Et même si l'on écarte les développeurs moyens, donner le pouvoir aux bons développeurs est également dangereux. Le problème, c'est que les développeurs sont irresponsables (sans vouloir être méchant - je suis un développeur moi-même). Ce n'est pas qu'ils soient puérils, c'est juste que personne ne leur a jamais demandé d'écrire des lois et de les assumer.

De plus, les développeurs ne sont pas élus par la population. Si vous n'êtes pas d'accord avec la direction que prend Bitcoin (favorisant la spéculation plutôt que des applications pratiques), tant pis pour vous. Il n'y a rien que vous puissiez faire contre cela. Et c'est ce qui arrive actuellement : le réseau Bitcoin subit une crise majeure à cause d'une mésentente entre quelques développeurs centraux.

La décision d'une demi-douzaine de développeurs pourrait causer l'effondrement d'une capitalisation d'un milliard de dollars. Mais personne ne les tiendra pour responsables si cela arrive.

Un gigantesque gâchis

Une blockchain effectue des traitements automatisés pas optimisés du tout. C'est même un immense gâchis de ressources.

Prenez la réplication de données par exemple. La blockchain réplique toutes les transactions sur tous les noeuds. Les ingénieurs ont inventé depuis longtemps des stratégies de réplication avec une meilleure gestion de l'espace mémoire. Comparez la Blockchain avec une grappe de disques en RAID6 par exemple:

Dans un réseau Blockchain, 10 noeuds de 1GB chacun permettent la réplication d'un volume de données total de 1GB. Vous pouvez perdre jusqu'à 9 noeuds, et récupérer l'ensemble des données.

Dans une grappe RAID6, 10 disques dur de 1GB chacun permettent la réplication d'un volume de données total de 8GB. Vous pouvez perdre jusqu'à 2 disques durs, et récupérer l'ensemble des données.

Miner des bitcoins nécessite du matériel très cher, avec des cartes graphiques très puissantes et beaucoup de mémoire. Les fermes de minage représentent des investissements considérables. Si vous vous demandez à quoi ça ressemble, jetez un oeil à ce reportage éclairant sur une ferme de minage secrète en Chine.

99.99% de la capacité de calcul est tout bonnement gâchée. Tous les mineurs sont en compétition pour miner un bloc en essayant de résoudre des challenges mathématiques complexes. Dans Bitcoin, seul un noeud gagne toutes les 10 minutes. Seul ce noeud est réellement utile à la chaîne, en créant un bloc. Les calculs faits par tous les autres noeuds sont purement et simplement jetés à la poubelle.

Ethereum est en train d'essayer de résoudre ce problème : ils pensent basculer d'un algorithme de consensus dit de proof-of-work vers un algorithme de consensus dit de proof-of-stake, qui est bien moins gourmand en ressources. Mais le proof-of-stake a lui aussi des effets de bord, comme le fait de donner plus de pouvoir aux personnes ou aux sociétés qui possèdent de grandes quantités de monnaie virtuelle. De toute façon, c'est loin d'être déjà opérationnel (pas avant un an).

Ce gâchis de stockage, de capacité de calcul et de mémoire se traduit par un énorme gâchis en énergie. Si l'on en croit un opérateur de ferme de minage de Bitcoin, produire un Bitcoin en 2014 nécessitait 240kWh (l'équivalent de 60 litres d'essence). Les fermes de minage sont des usines transformant l'électricité en chaleur. Une blockchain est, en résumé, un gros radiateur. L'efficacité énergétique est un sujet important dans le contexte actuel de réchauffement climatique.

Très chers contrats

Qui paie pour l'énergie dilapidée ? Les compagnies qui publient et utilisent les smart contracts. Oui, c'est vous, si vous voulez monter un business sur la blockchain. Lorsque vous payez pour une transaction sur la blockchain, vous payez aussi pour les 99.99% du réseau qui tourne à fond pour rien. Cela rend les transactions sur la blockchain très chères.

Un million de dollars en billets

En moyenne, une transaction BitCoin coûte BTC 0.0002 ($0.11) en frais de transaction. Ce montant est en train d'augmenter. Ce n'est pas vraiment moins cher que les frais de transaction entre deux banques (à moins que vous ne considériez un transfert entre deux banques de deux pays et deux monnaies différentes, bien sûr).

Pour ZeroDollarHomepage, exécuter une méthode de 10 lignes dans un contrat Ethereum coûte environ un cent ($0.01). C'est horriblement cher. Amazon Lambda, par comparaison, coûte $0.0000002 par requête (après le premier million de requêtes gratuit par mois).

Il est normal de payer pour des coûts d'hébergement lorsque vous utilisez une plate-forme, mais les coûts sur la blockchain sont beaucoup, beaucoup plus chers que le plus cher des Platform-as-a-Service.

Volatilité et Spéculation

Vous pourriez dire que les coûts liés à la blockchain ne sont pas un problème, tant que des personnes sont prêtes à utiliser ce réseau et à payer pour ces transactions. C'est une question d'offre et de demande, et la demande pour les monnaies virtuelles est suffisamment élevée pour que le système soit profitable. Mais cette demande élevée amène de la spéculation, ce qui rend très volatile le prix des transactions dans une blockchain (n'importe laquelle).

Cours du Bitcoin en Dollars

Certains analystes comparent Bitcoin à une pyramide de Ponzi, et prédisent que sa valeur sur le marché va s'effondrer au moment ou l'intérêt général aura disparu.

Si vous bâtissez un business sur la blockchain d'Ethereum, la plupart des dépenses seront en Ether. Si vous ne le minez pas vous-mêmes, il faudra payer cet Ether avec de l'argent sonnant et trébuchant. Mais vu que la valeur en Dollars US de l'Ether est susceptible de décupler d'ici un an, un tel business peut rapidement passer de rentable à très déficitaire au cours de cette même période. Et vous ne pourrez rien faire contre ça. Par ailleurs, si vous minez vous-mêmes, ce qui est aujourd'hui abordable (faire tourner un petit serveur pour couvrir ses dépenses en Ether) peut devenir très cher une fois que de grandes fermes cesseront de miner du Bitcoin (de moins en moins rentable) pour miner de l'Ether.

La grande volatilité des monnaies virtuelles interdit à tout business model d'être profitable à long terme s'il est construit sur la blockchain - à part si ce business model est basé sur la spéculation.

Lent à pleurer

Comparé à de nombreuses innovations liées aux ordinateurs et aux réseaux, la blockchain est extrêmement lente. Les experts disent qu'il faut attendre 6 blocs pour être certain qu'une transaction soit légitime. Ce qui veut dire plus d'une minute sur Ethereum, ou plus d'une heure sur Bitcoin.

Sur un Ad server traditionnel, planifier une publicité prend environ 100ms. Si vous avez utilisé notre Adserver ZeroDollarHomepage bâti sur la blockchain, vous avez probablement eu une expérience très différente : planifier une publicité prend environ une minute. La communication avec réseau blockchain et la réplication des transactions sont rapides ; la majorité du temps est passée à attendre que le réseau mine la transaction, et qu'il ajoute quelques blocs après ça. Au final, la blockchain Ethereum est vraiment beaucoup plus lente que de l'informatique traditionnelle.

wait

Pour les utilisateurs, chaque seconde compte. L'optimisation de la performance web met l'accent sur l'augmentation des revenus par le gain d'une ou deux secondes sur le temps de chargement. Parier sur une technologie qui nécessite d'obtenir un accord du monde entier à chaque transaction n'est pas la meilleure manière de faire du business.

Libéralisme et anarchie

Une des promesses de la blockchain est de libérer les marchés qui nécessitent encore un intermédiaire. Plus d'avocats, de banquiers, ni de bookmakers. Une super opportunité pour de nouveaux business ?

C'est sans compter sur le fait que ces intermédiaires signalent les activités criminelles aux forces de l'ordre, qui se chargent ensuite de faire appliquer la loi. Si vous supprimez les intermédiaires, vous supprimez également la police, et vous laissez donc les criminels proliférer. La première application d'envergure acceptant les bitcoins s'appelait The Silk Road. C'était un marché noir en ligne pour tout ce qui est illégal : drogues, armes, pédopornographie... Sans compter l'utilisation des monnaies virtuelles pour l'évasion fiscale.

Même les ultra-libéraux reconnaissent qu'un certain niveau de régulation économique est nécessaire pour éviter le chaos total. Faire du business au milieu de criminels et sans police n'est jamais rentable - à moins que vous ne soyez un criminel vous-même. Par exemple, la Banqueroute Mt. Gox de 2014 a coûté près de 450 millions de dollars aux utilisateurs de Bitcoin.

Tout comme il a fallu longtemps aux gouvernements pour contrôler Internet (qui était, et reste, un havre pour les criminels), il faudra du temps aux régulateurs pour contrôler l'anarchie engendrée par la blockchain. La blockchain a beau porter en elle la promesse d'un futur meilleur sur le long terme, pour ce qui est du futur proche, mieux vaut sortir armé.

Avez-vous vraiment besoin d'une blockchain ?

Les plus enthousiastes au sujet de la blockchain sont des personnes qui ne comprennent pas vraiment ses forces ni ses faiblesses. Ils utiliseraient probablement une autre solution s'ils étaient mieux informés. Voici quelques fausses bonnes raisons de choisir la blockchain.

Vous pouvez utiliser une blockchain privée Près de 80% des projets blockchain dont j'entends parler, spécialement dans le domaine de la finance, misent sur des blockchains privées. Cela va totalement à l'encontre du principe même de blockchain, qui est d'obtenir un accord entre des tiers malgré l'absence de tiers de confiance. Si un projet tourne sur une blockchain privée, alors seuls des tiers de confiance peuvent le rejoindre, et il n'y a donc pas de problème de confiance. Et dans un réseau contrôlé, il y a de très nombreux autres outils pour partager un registre de faits - et bien mieux optimisés que la blockchain (un web service par exemple).

Cela permet d'obtenir un consensus distribué C'est vrai, mais seulement si ce consensus peut être écrit avec du code. Par exemple, une société travaillant dans la gestion des droits d'auteur de musique nous a récemment contacté pour bâtir une plate-forme internationale de rétribution des artistes via la blockchain. Sauf que quand deux pays sont en désaccord sur la façon de rétribuer des ayant-droits, chaque pays a déjà un contrat valide dans son droit local. Seul un tribunal les mettre d'accord, en utilisant l'esprit des lois et non la lettre - aucun smart contract ne peut remplacer cela. Il faut donc, avant de passer sur une blockchain, des règles de gouvernance qui fonctionnent déjà.

C'est sécurisé La cryptographie asymétrique est une des forces de la blockchain. Cependant, la technologie blockchain, au même titre que toutes les autres technologies, est sécurisée jusqu'à ce que quelqu'un y trouve une faille. C'est déjà arrivé par le passé. Les concepts informatiques derrière la blockchain sont si complexes que seuls quelques développeurs sont en mesure de contribuer ou de faire des revues de code. Pour moi, les smart contracts et les blockchains sont relativement moins sûrs que, disons, TSL sur le web (via HTTPS). Et même si le code marchait parfaitement, il ne pourrait pas empêcher la fraude. Vous vous souvenez du problème de double dépense de notre premier article ? En fait, des gens tentent régulièrement ce mauvais coup sur les blockchains (voir les 200 dernières double dépenses sur la blockchain Bitcoin).

C'est transparent Entendu, toutes les transactions sont publiques, et affichent la localisation et l'adresse IP de l'expéditeur. Mais aucune information personnelle ne transite jamais - seulement des hashs anonymes. Même le créateur de Bitcoin est un mystère. Donc la transparence de la blockchain ne protège ni du crime, ni de la fraude. De plus, la transparence est généralement un inconvénient pour le business. Est-ce que vous seriez prêt à parier sur une technologie qui permet à tout le monde de suivre toutes vos transactions, et qui expose votre code aux hackers ?

Les données sont répliquées et sécurisées Bien sûr, mais avec la pire des stratégies du point de vue rendement. Amazon S3 réplique chaque octet de donnée au moins 3 fois avec une disponibilité de 100%, pour une fraction du prix. Et si vous avez réellement besoin d'un historique complet de vos transactions, utilisez un event store.

Ca permet de connecter des pairs anonymes Mais si c'est seulement pour un stockage partagé (par exemple, si vous n'avez pas besoin d'un ordonnancement des transactions), alors un protocole peer-to-peer comme BitTorrent fait l'affaire.

C'est tendance Ah là, personne ne peut dire le contraire. Crier le mot "blockchain" à tous les vents est actuellement une excellente manière de décrocher un budget d'innovation. Cependant, beaucoup des produits existants qui prétendent se baser sur la blockchain ne sont en fait que des présentations powerpoint. A côté de ça, vous obtiendrez certainement de meilleurs résultats avec une autre technologie. Et il n'es pas besoin de rappeler que le terme blockchain évoque également blanchiment d'argent, fraude fiscale, et pornographie.

Si vous voulez développer un business avec la blockchain, assurez-vous au préalable que vous en avez besoin, et que cela sera vraiment utile pour vous.

Conclusion

Les blockchains sont une idée brillante, avec d'immenses implications possibles. Mais les implémentations actuelles sont-elles prêtes pour supporter les applications révolutionnaires de la prochaine décennie ?

Du point de vue technique, certaines fonctionnalités élémentaires ne sont tout simplement pas faisables. Les blockchains ne sont pas assez rapides, pas assez attirantes pour les développeurs, et donnent beaucoup trop de pouvoir à une petite ligue de développeurs extraordinaires sans fondations politiques et économiques suffisantes.

D'un point de vue business, la blockchain change beaucoup trop vite, elle est trop chère, et souvent bien trop lourde pour le service rendu. Les coûts peuvent décupler sans raison. Bâtir un business sur une plate-forme aussi instable est incroyablement risqué.

Mon avis est qu'il faut attendre. La blockchain n'est pas encore prête. Elle a besoin de plus de maturité, une autre application phare qu'un moteur de spéculation, une communauté de développeurs plus étendue, une plus grande responsabilité économique et écologique. Combien de temps cela va-t-il prendre ? Un an, peut-être deux ? Personne ne peut le dire.

Pour être honnête, cette conclusion m'a surpris. La plupart des publications à propos de la blockchain suggèrent le contraire. Elles disent "c'est le moment", "ne ratez pas le train", ou encore "les grands business de la prochaine décennie sont en train d'être construits sur la blockchain, en ce moment même". Peut-être qu'ils ont tort, ou alors c'est nous qui avons tort. Nous avons essayé d'étayer cette analyse avec des preuves tangibles. Si votre avis diffère du nôtre, je vous invite à vous exprimer dans les commentaires ci-dessous.

Nous ne manquerons pas de suivre attentivement les développements des différents projets de blockchain. Assurez-vous de suivre ce blog pour rester informé !

Merci à Yann Gensollen pour la traduction.