// document . 1998 . 2012

b-money, les versions évolutives

Wei Dai · 1998 . 2012

⇄ Traduit de l'anglais

Le précurseur direct de Bitcoin (référence n.1 du whitepaper), et la seule modification que Wei Dai y a apportée : l'ajout d'un Appendix A, gelé ensuite de 1999 à 2012.

En novembre 1998, Wei Dai poste « b-money » sur la liste cypherpunks. Le texte décrit deux protocoles de monnaie créée par preuve de calcul, avec un registre répliqué et des pseudonymes cryptographiques : la structure de Bitcoin y est presque entière. b-money est la référence numéro 1 du whitepaper de Satoshi.

Le texte a très peu bougé, et c'est en soi un fait forensique. Entre la première version archivée (1998-1999, sur eskimo.com/~weidai) et les versions hébergées plus tard sur weidai.com, le corps du document est strictement identique. La seule évolution est l'ajout, dès 1999, d'un Appendix A décrivant une création monétaire alternative par enchère : un mécanisme où les teneurs de comptes fixent d'abord la masse à créer, puis un marché en détermine le coût. C'est exactement le problème (offre monétaire contre coût du calcul) que Bitcoin résoudra autrement, avec sa difficulté ajustable.

captures du texte 1998 (original, sans appendice) → 2007, 2009, 2011, 2012 (avec l'Appendix A) : ces quatre dernières sont identiques au bit près. Le texte est resté gelé pendant toute l'émergence de Bitcoin.

Ci-dessous, la traduction française de la version originale dans son intégralité, suivie du seul passage ajouté ensuite. L'original anglais est accessible via le lien en haut de page.

b-money . version 1 (originale) Wei Dai . posté sur cypherpunks, novembre 1998 . capture eskimo.com 19.02.1999
La crypto-anarchie de Tim May me fascine. Contrairement aux communautés
traditionnellement associées au mot "anarchie", dans une crypto-anarchie le
gouvernement n'est pas temporairement détruit mais définitivement interdit et
définitivement inutile. C'est une communauté où la menace de la violence est
impuissante parce que la violence est impossible, et la violence est impossible
parce que ses participants ne peuvent être reliés ni à leur vrai nom ni à leur
emplacement physique.

Jusqu'à présent, il n'est pas clair, même en théorie, comment une telle
communauté pourrait fonctionner. Une communauté se définit par la coopération de
ses participants, et une coopération efficace exige un moyen d'échange (la
monnaie) et un moyen de faire respecter les contrats. Traditionnellement, ces
services ont été fournis par le gouvernement ou par des institutions soutenues
par lui, et uniquement à des entités légales. Dans cet article, je décris un
protocole par lequel ces services peuvent être fournis à, et par, des entités
intraçables.

Je vais en réalité décrire deux protocoles. Le premier n'est pas praticable, car
il fait un usage intensif d'un canal de diffusion anonyme synchrone et impossible
à brouiller. Il servira toutefois à motiver le second, plus praticable. Dans les
deux cas, je suppose l'existence d'un réseau intraçable, où les émetteurs et les
destinataires ne sont identifiés que par des pseudonymes numériques (c'est-à-dire
des clés publiques) et où chaque message est signé par son émetteur et chiffré à
destination de son destinataire.

Dans le premier protocole, chaque participant tient une base de données
(distincte) indiquant combien d'argent appartient à chaque pseudonyme. Ces
comptes définissent collectivement la propriété de la monnaie, et la manière
dont ils sont mis à jour est l'objet de ce protocole.

1. La création de monnaie. N'importe qui peut créer de la monnaie en diffusant la
solution d'un problème de calcul jusque-là non résolu. Les seules conditions sont
qu'il doit être facile de déterminer quel effort de calcul a été nécessaire pour
résoudre le problème, et que la solution ne doit par ailleurs avoir aucune
valeur, ni pratique ni intellectuelle. Le nombre d'unités monétaires créées est
égal au coût de l'effort de calcul exprimé en un panier standard de marchandises.
Par exemple, si un problème demande 100 heures pour être résolu sur l'ordinateur
qui le résout le plus économiquement, et qu'il faut 3 paniers standards pour
acheter 100 heures de temps de calcul sur cet ordinateur au prix du marché,
alors, lors de la diffusion de la solution de ce problème, chacun crédite le
compte du diffuseur de 3 unités.

2. Le transfert de monnaie. Si Alice (propriétaire du pseudonyme K_A) souhaite
transférer X unités de monnaie à Bob (propriétaire du pseudonyme K_B), elle
diffuse le message "Je donne X unités de monnaie à K_B" signé par K_A. Lors de la
diffusion de ce message, chacun débite le compte de K_A de X unités et crédite le
compte de K_B de X unités, à moins que cela ne crée un solde négatif sur le
compte de K_A, auquel cas le message est ignoré.

3. La conclusion des contrats. Un contrat valide doit indiquer, pour chaque
partie qui y participe, une réparation maximale en cas de défaillance. Il devrait
aussi désigner une partie qui assurera l'arbitrage en cas de litige. Toutes les
parties à un contrat, y compris l'arbitre, doivent diffuser leur signature avant
qu'il ne prenne effet. Lors de la diffusion du contrat et de toutes les
signatures, chaque participant débite le compte de chaque partie du montant de sa
réparation maximale et crédite un compte spécial, identifié par un hachage
sécurisé du contrat, de la somme des réparations maximales. Le contrat prend
effet si les débits aboutissent pour toutes les parties sans produire de solde
négatif ; sinon le contrat est ignoré et les comptes sont rétablis. Un exemple de
contrat pourrait ressembler à ceci :

K_A s'engage à envoyer à K_B la solution du problème P avant le 0:0:0 1/1/2000.
K_B s'engage à payer à K_A 100 UM (unités monétaires) avant le 0:0:0 1/1/2000.
K_C s'engage à assurer l'arbitrage en cas de litige. K_A s'engage à payer un
maximum de 1000 UM en cas de défaillance. K_B s'engage à payer un maximum de 200
UM en cas de défaillance. K_C s'engage à payer un maximum de 500 UM en cas de
défaillance.

4. Le dénouement des contrats. Si un contrat se dénoue sans litige, chaque partie
diffuse un message signé "Le contrat de hachage SHA-1 H se dénoue sans
réparations." ou éventuellement "Le contrat de hachage SHA-1 H se dénoue avec les
réparations suivantes : ..." Lors de la diffusion de toutes les signatures,
chaque participant crédite le compte de chaque partie du montant de sa réparation
maximale, supprime le compte du contrat, puis crédite ou débite le compte de
chaque partie selon le barème de réparations s'il y en a un.

5. L'exécution forcée des contrats. Si les parties à un contrat ne parviennent
pas à s'accorder sur un dénouement approprié, même avec l'aide de l'arbitre,
chaque partie diffuse un barème de réparations/d'amendes proposé ainsi que tout
argument ou élément de preuve en sa faveur. Chaque participant détermine alors les
réparations et/ou amendes effectives et modifie ses comptes en conséquence.

Dans le second protocole, les comptes indiquant qui possède combien d'argent sont
tenus par un sous-ensemble des participants (appelés désormais serveurs) et non
par tout le monde. Ces serveurs sont reliés par un canal de diffusion de type
Usenet. Le format des messages de transaction diffusés sur ce canal reste le même
que dans le premier protocole, mais les participants concernés par chaque
transaction devraient vérifier que le message a bien été reçu et traité avec
succès par un sous-ensemble de serveurs choisi au hasard.

Comme il faut accorder un certain degré de confiance aux serveurs, un mécanisme
est nécessaire pour les maintenir honnêtes. Chaque serveur est tenu de déposer
une certaine somme d'argent sur un compte spécial, destinée à servir d'amendes
potentielles ou de récompenses en cas de preuve d'inconduite. De plus, chaque
serveur doit périodiquement publier et s'engager sur l'état courant de ses bases
de création monétaire et de propriété de la monnaie. Chaque participant devrait
vérifier que le solde de ses propres comptes est correct et que la somme des
soldes n'est pas supérieure au montant total de monnaie créée. Cela empêche les
serveurs, même en cas de collusion totale, d'accroître durablement et sans coût
la masse monétaire. Les nouveaux serveurs peuvent aussi se servir des bases
publiées pour se synchroniser avec les serveurs existants.

Le protocole proposé dans cet article permet à des entités pseudonymes et
intraçables de coopérer plus efficacement, en leur fournissant un moyen d'échange
et une méthode pour faire respecter les contrats. Le protocole peut probablement
être rendu plus efficace et plus sûr, mais j'espère qu'il constitue un pas vers
une crypto-anarchie possible en pratique autant qu'en théorie.
archive → https://web.archive.org/web/19990219124653/http://www.eskimo.com/%7Eweidai/bmoney.txt
+ ajout b-money . ajout de la version 2 (Appendix A) ajouté dès 1999 . identique sur weidai.com de 2006 à 2012
-------

Appendice A : création alternative de b-money

L'une des parties les plus problématiques du protocole b-money est la création de
monnaie. Cette partie du protocole exige que tous les teneurs de comptes décident
et s'accordent sur le coût de certains calculs. Malheureusement, comme la
technologie informatique tend à progresser rapidement et pas toujours
publiquement, cette information peut être indisponible, inexacte ou périmée,
autant de situations qui poseraient de graves problèmes au protocole.

Je propose donc un sous-protocole alternatif de création de monnaie, dans lequel
les teneurs de comptes (tout le monde dans le premier protocole, ou les serveurs
dans le second) décident et s'accordent plutôt sur la quantité de b-money à créer
à chaque période, le coût de création de cette monnaie étant déterminé par une
enchère. Chaque période de création monétaire se divise en quatre phases, comme
suit :

1. Planification. Les teneurs de comptes calculent et négocient entre eux pour
déterminer une augmentation optimale de la masse monétaire pour la période
suivante. Qu'ils parviennent ou non à un consensus, chacun diffuse son quota de
création monétaire ainsi que tout calcul macroéconomique effectué pour justifier
ses chiffres.

2. Enchères. Quiconque veut créer de la b-money diffuse une enchère sous la forme
<x, y> où x est la quantité de b-money qu'il veut créer, et y un problème non
résolu issu d'une classe de problèmes prédéterminée. Chaque problème de cette
classe devrait avoir un coût nominal (en MIPS-années, par exemple) faisant
l'objet d'un accord public.

3. Calcul. Après avoir vu les enchères, ceux qui en ont placé pendant la phase
d'enchères peuvent maintenant résoudre les problèmes contenus dans leurs enchères
et en diffuser les solutions.

4. Création de monnaie. Chaque teneur de comptes retient les enchères les plus
élevées (parmi celles dont les solutions ont effectivement été diffusées) en
termes de coût nominal par unité de b-money créée, et crédite les comptes des
enchérisseurs en conséquence.
archive → https://web.archive.org/web/20061202010422/http://www.weidai.com/bmoney.txt