// document . 1998 . 2012
b-money, les versions évolutives
⇄ Traduit de l'anglaisLe 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.
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
------- 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