En ce moment les technologies autour de la Blockchain sont en pleine hype. J’ai eu un flash de déjà vu avec la vague du “noSQL”:

En bonus cette fois: la question de la régulation & le trading.

Mais c’est quoi l’intérêt de la Blockchain au juste? On peut faire quoi avec? On ne peut pas faire quoi? Pourquoi en parler maintenant?

Quand on regarde les fondamentaux de la Blockchain, c’est la solution à un problème connu et très concret de Computer Science:

Le problème du Consensus

C’est un fondamental des systèmes distribués:

Comme la plupart des problèmes intéressants, il n’y a pas UNE solution idéale, la _bonne_ solution va dépendre des contraintes que l’on choisit. Tout est affaire de compromis:

Dans un datacenter Google, je peux admettre que le réseau est stable. Mais entre deux continents, je dois prendre en compte la latence et les déconnexions. Pour un compteur de like, j’ai une marge d’erreur. Mais dans le cas d’un compte en banque je veux ZÉRO erreurs sur le résultat d’une opération.

Pour une monnaie numérique comme le Bitcoin, cette question du consensus se traite sous la forme du problème du “Double Spending”. Imaginons que je tente de payer 2 fois avec le même Bitcoin. J’envoie deux transactions à deux serveurs différents sur le réseau.
On doit s’assurer qu’il n’existe aucun cas où le système confirme les deux dépenses. On veut que le réseau atteigne un consensus sur chaque transaction.

Ce qui est vraiment novateur dans les technologies de la blockchain c’est le fait de résoudre une version du problème plus complexe que les autres:

Le Consensus dans un environnement potentiellement hostile

Le problème du consensus est bien connu. Quelques exemples de technologies qui utilisent déjà un protocole de consensus d’une manière ou d’une autre: Kafka, HBase, MongoDB, Zookeeper, etcd.

Toutes ces technologies naviguent sur des problèmes de disponibilité (une machine plante) et de partitionnement (le réseau coupe). MAIS elles partent du principe que chaque machine est amicale:
Dans un réseau d’entreprise, mes serveurs ne sont pas hostiles, ils ne tentent pas de corrompre le résultat d’un consensus. Et les administrateurs n’ont rien à gagner à maintenir une machine corrompue.

Les solutions utilisées en production aujourd’hui sont donc inutilisables dans le cadre d’un système complément ouvert. J’ai toujours une organisation, un Google ou une banque qui possède la responsabilité des données et des serveurs.

Même Wikipédia a un CEO.

C’est là que les technologies de Blockchain forment une “révolution”. Elles répondent à ces problèmes de disponibilités et de résistances aux crashs AVEC la capacité de tolérer des participants hostiles au sein du système. Donc avec la capacité de fonctionner dans une communauté ouverte.

Vous pouvez cloner le repos du client Bitcoin principal, modifier son code source et émettre des transactions frauduleuses sur le réseau. Les lois du Bitcoin ne craignent rien (jusqu’à un certain point).

Et c’est tout!

On entend parler de beaucoup d’autres choses. L’immutabilité des logs, l’anonymisation des transactions, le stockage permanent des données, etc. En réalité, ce sont des détails techniques, des conséquences ou des nécessités pour mettre en œuvre le consensus.

Ce qu’est la Blockchain fondamentalement c’est une machine à générer du consensus dans un environnement potentiellement hostile.

Note que les instances actuelles de la Blockchain, comme l’Ethereum ou le Bitcoin, fonctionnent d’une manière que je trouve très élégante:

Puisque les mécanismes de consensus reposent sur une monnaie, les acteurs avec le plus de pouvoir sur le réseau sont aussi ceux qui ont le plus à perdre en trichant. Faire mentir le Bitcoin, c’est prendre le risque de faire tomber sa valeur à zéro. On touche à des questions de Théorie des Jeux, pour un autre article.

Trois liens (anglais) pour aller plus loin sur le consensus:

https://blog.acolyer.org/2015/03/01/cant-we-all-just-agree/

http://the-paper-trail.org/blog/a-brief-tour-of-flp-impossibility/

https://www.microsoft.com/en-us/research/publication/paxos-made-simple/