Trois questions qu'une revue extérieure a posées, et la position prise sur chacune.
Une revue de conception extérieure a relevé trois choses qu'une monnaie doit traiter et que nos documents n'avaient jamais traitées. Rien ne casse, rien ne fuit : ce sont des silences. Après vérification contre le code, la revue a raison sur les trois.
Les trois : ce que la chaîne montre de ses utilisateurs ; ce qu'un ordinateur quantique pourrait un jour lui prendre ; et de qui dépend l'épargnant qui revient après des années d'absence. La revue place les deux premières au premier ordre, et juge la troisième plus grave que nos papiers ne le disent.
La règle de ce document est celle de tous les autres : ce qui suit est établi depuis le code, pas depuis nos propres papiers, chaque chiffre est mesuré ou compté, et ce qui n'est pas su est écrit comme tel. Un lecteur doit apprendre une faiblesse de nous, pas contre nous.
Pour chaque question : ce qui est vrai aujourd'hui, ce que le terrain a déjà essayé et à quel prix, ce que cela coûterait ici, la position prise, et ce qu'elle change au format du billet. Ce dernier point n'est pas un détail. Une règle peut changer à une hauteur annoncée, mais un billet déjà créé garde pour toujours la forme qu'il avait en naissant : ce qui se décide du format aujourd'hui vaut pour toute la valeur qui se posera dessus.
Aujourd'hui, Cairn protège moins bien la vie privée que Bitcoin. Non par un choix assumé : par silence. C'est la phrase que nos documents devaient contenir et ne contenaient pas.
L'adresse est écrite sur la chaîne à la création du billet, en clair, à côté du montant. Jusqu'à la 0.11.0 c'était la clé publique elle-même ; c'en est l'empreinte depuis, ce qui ne change rien à ce qu'un observateur lit. Un paiement ordinaire pèse 223 octets et chacun d'eux se lit : quels billets meurent, quels billets naissent, pour qui, pour combien, et la différence entre les deux, qui est le frais. Rien n'est chiffré nulle part.
Le portefeuille aggrave ce que le protocole expose. Il tient une clé par fichier, donc une adresse par personne, réutilisée à chaque paiement : le salaire, le loyer et les dons arrivent au même endroit, et quiconque connaît l'adresse lit le solde et toute l'histoire. Le papier d'origine de Bitcoin recommandait déjà une clé neuve par transaction, et les portefeuilles de ce réseau le font par défaut depuis des années. Le nôtre ne le fait pas.
L'explorateur, enfin, industrialise la lecture. Il tient pour chaque propriétaire tout ce qu'il a reçu et dépensé, à quelle hauteur, le solde qui en découle, et il publie les cinquante détenteurs les plus riches. C'est un programme séparé que personne n'est obligé de faire tourner, et cette séparation est réelle du côté du coût des nœuds ; du côté de la vie privée elle ne protège de rien, car n'importe qui peut construire le même index depuis ce que le réseau diffuse de toute façon. Un nœud oublie ; le monde, non. Ce qui a été diffusé une fois est public pour toujours.
Le réseau, lui, apprend autre chose que la chaîne : d'où l'on parle. Un portefeuille est un nœud, et chacun de ses pairs voit l'adresse IP de la machine. Un paiement part vers tous les pairs connectés à l'instant où il est envoyé, sans délai ni détour : le premier à le recevoir peut lire d'où il vient, et relier cette adresse IP aux billets dépensés, donc à leur propriétaire. Bitcoin a la même exposition et a ajouté de quoi la brouiller ; Cairn ne l'a pas fait, et c'est un choix qui n'était écrit nulle part. Un portefeuille qui doit demander le chemin d'un billet tombé envoie des places dans la cave, et une place désigne, pour quiconque a la chaîne, le billet, son propriétaire et son montant : il ne la demande donc qu'aux pairs qui disent garder toute la cave. Il ne demande pas à ses pairs d'inscrire son adresse dans leurs carnets, et un nœud qui ne garde pas toute la cave ne répond à personne depuis les chemins qu'il tient pour son propriétaire, ce qui dirait à un inconnu à qui est la machine. Il ne compose l'adresse écrite dans le programme, la graine, que si moins de deux des pairs rencontrés la fois précédente lui répondent. Quand il la compose, la graine voit la session, et d'où part un paiement envoyé pendant qu'elle est là ; ce qu'elle en garde, le code ne le dit pas.
| Réseau | Ce qui est caché | Le prix payé |
|---|---|---|
| Bitcoin | Rien, mais l'adresse est l'empreinte de la clé et une clé neuve par paiement est la norme | L'analyse du graphe reste efficace ; des sociétés entières en vivent |
| Monero | L'expéditeur, le destinataire, le montant | Environ 2 ko par transaction, dix fois le nôtre ; chaque sortie jamais créée et un reçu par dépense gardés pour toujours, donc un état qui grandit sans borne |
| Zcash | Tout, dans la partie protégée | Des transactions de plusieurs kilooctets ; un reçu par dépense gardé pour toujours ; retrouver son propre argent oblige à essayer de déchiffrer chaque sortie de la chaîne |
| Mimblewimble | Les montants, et le graphe se compacte | Des paiements interactifs, les deux portefeuilles doivent se parler ; une centaine d'octets par transaction gardés pour toujours |
| Cairn aujourd'hui | Rien, et l'adresse est la clé elle-même, réutilisée | La lecture est gratuite, pour tout le monde, pour toujours |
Un motif traverse cette table, et il n'est pas un accident. Cacher qui dépense quoi oblige le réseau à se souvenir de quelque chose par dépense, pour toujours : Monero garde une image de clé, Zcash un jeton de dépense, Mimblewimble un noyau. Ou bien il oblige l'utilisateur à porter l'histoire : les leurres de Monero se tirent parmi toutes les sorties passées, et un portefeuille Zcash qui revient d'absence essaie de déchiffrer tout ce qu'il a manqué. Une mémoire éternelle chez les nœuds, ou l'histoire chez les utilisateurs : les deux sont exactement le coût qui grandit que ce projet existe pour refuser.
Une nuance, parce qu'elle est vraie : notre accumulateur sait prouver l'absence, donc un ensemble de reçus de dépense tiendrait chez chaque nœud en soixante-quatre empreintes, comme la cave. Ce qui ne tient pas, c'est l'entretien. La preuve d'absence d'un reçu encore secret ne peut être rafraîchie que par son propriétaire, qui ne peut la confier à personne sans se désigner. Le fardeau de mise à jour que ce projet a accepté pour les billets s'étendrait à des chemins que nul ne peut surveiller pour vous. Personne n'a résolu cela, nous non plus, et ce document ne prétend pas le contraire.
Enfin, tout ce que le terrain déploie pour cacher, montants engagés, signatures en anneau, preuves à divulgation nulle, repose sur le logarithme discret, que l'adversaire de la section suivante casse.
Ce que cette position change au format du billet : rien pour les montants, qui restent huit octets en clair. Pour l'adresse, le changement vient de la section suivante, décidé pour une autre raison, et il sert aussi ici.
La promesse du projet se compte en décennies, et c'est exactement l'horizon où les estimations publiques placent un ordinateur quantique capable de casser ces clés. La revue a raison : une ligne en aparté ne suffisait pas.
Il y a deux familles de cryptographie dans Cairn, et elles ne tombent pas ensemble. La structure, le sceau, les deux forêts, la preuve de travail, les identifiants, est faite de fonctions de hachage, que l'ordinateur quantique n'entame pas de façon utile. Ce point était déjà dans le document de conception, et il tient : l'état, le sceau qui l'engage et l'histoire des en-têtes n'ont rien à craindre.
Les fonds, si. Un billet est verrouillé par une signature Ed25519, dont la clé secrète se retrouve depuis la clé publique sur un ordinateur quantique assez grand. Et tant que l'adresse était la clé publique elle-même, jusqu'à la 0.11.0, la clé de chaque billet non dépensé était en clair sur la chaîne depuis sa création. Un tel adversaire n'a pas besoin d'attraper une transaction au vol : il lit la chaîne, à son heure, et chaque billet dormant est une cible immobile. L'épargnant, précisément celui que ce projet met en avant, est le plus exposé.
Bitcoin fait mieux, et il vaut la peine de dire pourquoi. Une sortie ordinaire y porte l'empreinte de la clé, et la clé ne paraît qu'au moment de dépenser : un billet jamais dépensé, d'une adresse jamais réutilisée, n'offre rien à casser, et la fenêtre d'attaque se réduit aux minutes entre la diffusion d'un paiement et son enfouissement. Le bouclier est imparfait, les recensements publics situent autour du quart de l'offre de Bitcoin ce qui est déjà à découvert, clés réutilisées et sorties des premières années, et le format le plus récent, Taproot, y renonce en remettant la clé dans la sortie. Mais la norme protège. Cairn n'avait pas la norme : chez nous, cent pour cent de l'offre était à découvert, par construction, jusqu'à la décision qui suit.
Les schémas standardisés existent, publiés en 2024 ; un quatrième, Falcon, attend encore sa version finale au moment d'écrire. Aucun ne rend les 64 octets d'Ed25519 : une signature post-quantique se compte en kilooctets, et c'est un problème particulier pour une conception dont tout l'intérêt est d'être petite. Mesuré contre notre format, un paiement ordinaire, un billet dépensé, deux créés, dans un bloc de 128 ko :
| Schéma | Clé publique | Signature | Un paiement | Par bloc | Par seconde |
|---|---|---|---|---|---|
| Ed25519, adresse = clé (jusqu'à la 0.11.0) | 32 o | 64 o | 191 o | 686 | 11,4 |
| Ed25519, adresse en empreinte | 32 o | 64 o | 223 o | 587 | 9,8 |
| Falcon-512 | 897 o | 666 o | 1 690 o | 77 | 1,3 |
| ML-DSA-44 | 1 312 o | 2 420 o | 3 859 o | 33 | 0,55 |
| SLH-DSA-128s | 32 o | 7 856 o | 8 015 o | 16 | 0,27 |
Le bloc n'est pas la seule victime, et c'est le chiffre qui décide tout. Tant que l'adresse est la clé, la clé vit dans le billet, et le billet vit dans le tiroir que chaque nœud porte : sous ML-DSA-44, chaque billet chaud grossit de 1 280 octets, le tiroir passe d'environ 68 Mo à environ 236 Mo, et le téléphone, qui est la raison d'être du chiffre, ne suit plus. Avec l'adresse en empreinte, le billet garde ses quarante octets quel que soit le schéma : la clé ne paraît que sur le fil, à la dépense, et le tiroir ne bouge pas. C'est la différence entre une migration coûteuse et une migration impossible.
Sur le choix du schéma lui-même : SLH-DSA est le seul qui repose sur les mêmes hypothèses que notre structure, du hachage et rien d'autre, et c'est le plus lourd du tableau. Falcon est le plus petit et le plus délicat à implémenter correctement. Les schémas en treillis sont jeunes à l'échelle où ce projet compte. Il n'y a aucune urgence à trancher, à une condition : que le format n'ait plus à changer le jour où l'on tranche.
La cave n'est pas une perte, disent nos documents, puisqu'un archiviste peut toujours reconstituer une preuve. La revue répond : et s'il n'y en a pas ? Elle a raison de poser la question à cette hauteur, car le personnage le plus concerné est celui que ce projet met en avant, l'épargnant hors ligne depuis des années.
Le tiroir tient 131 072 billets, et le plus ancien tombe quand il est plein. À blocs pleins, un billet qui ne bouge pas descend à la cave en 3,2 heures ; à un dixième du trafic, en 32 heures ; à un centième, en treize jours. La fenêtre qui suit la chute, pendant laquelle il se dépense encore sans preuve, dure douze minutes à pleine charge. La cave est donc l'état normal de toute épargne, pas un cas rare, et le document de conception le disait déjà.
Trois situations, et elles n'appellent pas le même service. Un portefeuille allumé ne remarque rien : chaque bloc porte de quoi rafraîchir ses preuves, il ne demande rien à personne, et une preuve pèse 586 octets en moyenne à un million de billets tombés, de l'ordre du kilooctet à trente ans de chaîne pleine. Un portefeuille éteint quelques jours se rattrape en relisant les blocs manqués, que les nœuds gardent pour cela : un gigaoctet par défaut, environ cinq jours de chaîne pleine.
Au-delà, tout dépend de ce qui a survécu. Celui qui a gardé son carnet, quels billets, à quelle position de la forêt, n'a besoin que d'une preuve fraîche. La produire demande l'archive de la cave, 104 octets par billet tombé et pas encore dépensé, que le programme tient aujourd'hui en mémoire et reconstruit en relisant toute la chaîne à chaque démarrage ; cela coûte quelques microsecondes et une réponse d'un kilooctet, et le portefeuille vérifie seul le résultat contre les racines que tout nœud tient. La confiance demandée est nulle : un archiviste ne peut pas mentir, il peut seulement se taire. Celui qui a tout perdu sauf sa clé doit d'abord retrouver ce qu'il possède, et cela, l'archive ne le sait pas, car elle tient des empreintes, pas des noms. Retrouver demande l'histoire des blocs, ou un index par propriétaire comme celui de l'explorateur.
Et personne n'est payé pour tenir l'un ou l'autre. Voilà l'omission, énoncée depuis le code : la deuxième garantie du document de conception, reconstituable pour toujours, repose sur un rôle que le protocole ne rémunère pas, dont le réseau ne dépend pas, et dont l'épargnant, lui, dépend entièrement.
| La chaîne est | Paiements / s | L'archive, pour prouver | L'histoire, pour retrouver |
|---|---|---|---|
| pleine à 1 % | 0,1 | 8,2 Go | 20,7 Go |
| pleine à 10 % | 1,0 | 95,1 Go | 206,7 Go |
| pleine | 9,8 | 962,6 Go | 2,1 To |
Même au pire, l'archive tiendrait sur un seul disque ordinaire ; que le programme la garde aujourd'hui en mémoire plutôt que sur disque est un défaut du programme, pas du rôle. C'est un rôle de bénévole au sens où l'archive complète de Bitcoin en est un, à deux différences près : là-bas, tout nouveau venu dépend d'elle, ici seul l'épargnant sans carnet en dépend ; et là-bas elle pèse des téraoctets dès aujourd'hui. Le risque n'est donc pas le prix du service. Le risque est qu'une année calme d'une petite chaîne n'ait personne pour le rendre, et un protocole ne fabrique pas des volontaires. Ce qu'il peut faire : les multiplier, les rendre vérifiables, et les rendre payables.
Deux morceaux sont déjà dans le code. L'explorateur garde la cave entière par défaut, en plus de son index : chaque explorateur public est donc déjà, matériellement, un point de reconstitution complet, l'index pour retrouver et l'archive pour prouver. Et un nœud ordinaire accepte un drapeau qui lui fait garder la cave. Le chemin existe aussi depuis le 2 septembre : deux messages du protocole réseau permettent de demander à un archiviste où se trouve un billet tombé et d'en recevoir la preuve, qu'un portefeuille vérifie seul contre les racines que tout nœud tient. Ce qui manque est de payer celui qui la rend.
Ce qui reste vrai après tout cela, et qui doit être écrit plutôt que contourné : la reconstitution repose sur au moins un volontaire portant un ensemble qui grandit. Le protocole rend ce volontaire bon marché, découpable, vérifiable et payable ; il ne peut pas le faire exister. Le testnet est l'expérience qui dira si cela suffit, et ce document sera corrigé par ce qu'elle montre.
Sur trois questions, une seule chose devait entrer dans le format du billet avant qu'une chaîne de valeur existe : le propriétaire d'un billet devient l'empreinte d'une clé, plus jamais une clé. Trente-deux octets inchangés dans le billet, trente-deux de plus par dépense, et cela achète le bouclier quantique de Bitcoin, un schéma de signature remplaçable sans toucher au format, et une porte ouverte aux clés à usage unique si la vie privée au niveau du protocole devient un jour tenable. Tout le reste, clés dérivées d'une graine, carnet exporté, marché de la reconstitution, est du logiciel autour du format, remplaçable à loisir.
Ce qui reste ouvert, par ordre de certitude décroissante sur ce que nous en savons :
La revue demandait que trois silences deviennent trois positions. Les voici : datées, chiffrées, et prises pour être contredites par écrit.
Ces questions ne viennent pas de la revue. Elles viennent du testnet : le 2 octobre 2026, un inconnu a miné quatre-vingts blocs en deux minutes et la moyenne mobile qui réglait la difficulté a presque arrêté le réseau pendant 33 heures. La règle a changé ; deux variantes ont été écartées de ce changement, la nouvelle règle donne au premier bloc un poids qu'il n'avait pas, et ce que la même puissance louée peut faire d'autre reste entier. Tout cela est écrit ici plutôt qu'oublié.
La règle est désormais ASERT : ce qu'un bloc doit à la difficulté dépend de
l'écart entre la chaîne et un calendrier fixé à son premier bloc, avec une
demi-vie de soixante blocs, une heure sur les réseaux publics, et jamais plus
d'un facteur quatre d'un bloc au suivant. Une rafale qui porte la difficulté à
X fois celle des mineurs honnêtes a coûté environ X fois le débit honnête
pendant tau / ln 2 ; elle laisse environ X temps-cible au prochain bloc
honnête, et la chaîne honnête rend en tout l'avance que la rafale a prise sur
le calendrier, log2(X) demi-vies. Le retard grandit donc comme le logarithme
de ce que la rafale a payé, et non comme ce qu'elle a payé. Mesuré sur une même
base pour les deux règles, les cent blocs honnêtes suivants arrivent 5,6 heures
en retard après cinq minutes à 1 260 fois le débit honnête et 11,3 après une
heure, là où la moyenne mobile en laissait 71 et 298 : à effort égal, treize à
vingt-six fois moins. La rafale du 2 octobre elle-même, quatre-vingts blocs,
coûterait encore à la chaîne honnête environ la moitié de ce qu'elle a payé :
une heure, à cette taille. Le livre blanc donne le tableau.
tau * log2(1 + X T ln 2 / tau) au lieu de X temps-cible. Mais la difficulté d'un en-tête cesserait d'être fixée par son parent seul : la pesée d'une chaîne inconnue, qui déduit le travail minimal d'une suite de blocs de la borne par bloc, raisonnerait sur une règle dont l'en-tête choisit lui-même une partie. Écartée de cette vague pour cette raison, et à rouvrir avec la pesée.X fois celle des honnêtes, le premier bloc honnête attend environ X temps-cible. Au-delà d'environ 120 fois, cette attente dépasse deux demi-vies, et la borne de quatre par bloc retient la baisse qui suit : chaque bloc ne descend qu'au quart du précédent, là où le calendrier seul aurait demandé moins tout de suite, et à partir de quelques centaines de fois cela ajoute au blocage environ un tiers de la première attente, X / 3 temps-cible. Une heure à 1 260 fois le débit honnête laisse les cent blocs honnêtes suivants 11,3 heures en retard avec la borne et 9,6 sans elle ; le plan avait mesuré la règle sans sa borne et écrit qu'elle ne changeait rien. Au-delà de quelques milliers de fois, le blocage laisse la chaîne plus loin derrière son calendrier que le bord du plancher, log2(D) - 1 demi-vies, et la chaîne honnête mine alors des centaines ou des milliers de blocs à la difficulté 1, en quelques minutes, jusqu'à revenir à ce bord : c'est la dette envers le calendrier qui se rembourse. Mesuré sur les règles de testnet-8, quand chaque bloc prend le temps moyen que sa difficulté demande : 579 blocs au plancher après un départ de 2 048 fois, 3 455 après 4 096 fois, moins de cinq heures au débit de l'intrus du 2 octobre, et 9 191 après 8 192 fois ; avec des temps de bloc tirés au hasard, la médiane sur soixante-quatre graines est d'une vingtaine, de 2 244 et de 7 793. Ce document disait aucun après 2 048 fois et 874 après 4 096 fois : des médianes sur seize graines, tombées bas, que l'étude de la vague testnet-9 a refaites. La borne avance cette course et l'allonge. Un paiement inscrit dans ces blocs n'a presque aucun travail derrière lui tant que la chaîne n'est pas remontée, puisqu'une branche de blocs au plancher ne coûte rien. La variante qui lit l'horodatage du bloc lui-même, plus haut, bornerait la première attente ; il faudra la mesurer, borne comprise, avant d'en conclure qu'elle supprime ces deux effets.sims/q2_departures.py de l'étude), les pertes de débit sur seize (sims/q2_loss.py), le début de la course au plancher sur le chemin moyen, sans tirage (sims/q2_onset.py). Un plafond qui ne lit que le parent et l'origine ne peut rien effacer : rapporté à la difficulté du parent, c'est la borne de quatre sous un autre nom, et la dette reste entière (mesurée avec une borne de deux et une de huit, la course s'allonge à deux et raccourcit un peu à huit, sans jamais disparaître) ; rapporté à l'origine, c'est une difficulté minimale fixée à l'ouverture, qui ne change que le niveau du rattrapage et arrête une chaîne dont le débit tombe plus bas. Le plafond qui marche porte un état d'un bloc à l'autre, donc un nouveau champ d'en-tête : il supprime la course au plancher et l'aubaine d'une ouverture tardive, mais allonge les grands blocages d'environ cinq heures à K = 2 (de rien à deux heures à K = 4), et la chaîne ne rattrape plus jamais son calendrier écrit : elle reste en retard d'environ la durée du blocage, 67 heures à K = 2 après un départ de 4 096 fois. Aucune règle de difficulté ne rend non plus coûteuse en temps une réécriture depuis un point de bifurcation ancien, puisque le temps écoulé depuis ce point est réel et gratuit à déclarer ; cette question reste à la revue extérieure. La demi-vie, enfin, déplace les dégâts d'une sorte d'événement à l'autre sans en retirer : à coût égal, cent vingt blocs divisent par deux les grands blocages et ne laissent de course au plancher qu'après une attaque d'environ 9 100 heures du débit honnête au lieu de 2 300, mais une vraie perte de débit se résorbe deux fois plus lentement (après une perte de neuf dixièmes, les mille blocs suivants ont 6,6 heures de retard contre 3,3, et 13,2 contre 6,6 après une perte de quatre-vingt-dix-neuf centièmes). Soixante reste, parce qu'un jeune réseau à peu de mineurs verra des pertes réelles bien plus souvent que des départs de milliers de fois ; cent vingt est l'alternative défendable si l'on juge l'inverse, et demanderait un redémarrage. Ce que la course au plancher abîme se traite hors du consensus. Le surveillant du réseau de test sonne sur une suite de dix blocs au plancher (l'alarme floor-run de .github/scripts/watch_testnet.py). Le portefeuille et l'explorateur devront compter les confirmations d'un paiement au travail au-dessus de lui plutôt qu'en blocs : c'est dû, et ce n'est pas encore fait. Le plafond porté par l'en-tête est décrit et prêt si la revue de lancement du réseau principal tranche autrement, K = 4 étant la meilleure constante ; le décider alors, ce sera le décider sans testnet qui l'ait fait tourner.Le laboratoire D a montré qu'un paiement qui ne dépense que des billets tombés de l'ensemble chaud attendait sans fin derrière des blocs tenus pleins de transferts au plancher. Le portefeuille lui proposait son plancher exact, et ce plancher laisse à son mineur moins par unité de poids que le remplissage qui ne prend aucune place. Le portefeuille propose désormais toujours de quoi passer devant ce remplissage-là. C'est la réponse étroite, et elle laisse une question.