Le maneki-neko de DUCAT, tenant une pièce Monero
commerce de proximité pair à pair · spécification brouillon 1.1.0-dev13

DUCAT

Veilid pour le transport. Monero pour le règlement. Aucun opérateur entre les deux.

Il n'existe aucun serveur DUCAT nulle part — les contacts, les messages, les factures et les reçus sont des enregistrements DHT et des charges scellées de bout en bout, et chaque téléphone fait tourner un nœud Veilid complet, rendant le routage et le stockage qu'il prend.

0 vecteurs de conformité 0 modes de fonctionnement 0 langues 0 serveurs

Signé en débogage, stagenet uniquement. Pas encore pour de l'argent réel.

Debout sur

Le commerce sans personne au milieu

Un ducat fut, six siècles durant, une pièce d'or acceptée de Venise à Vienne jusqu'au Levant — aucune relation avec un émetteur, aucun compte derrière, aucune autorisation attachée. DUCAT, c'est cela, pour le moment où l'on se tient devant quelqu'un et où l'on fait affaire.

🐱

Aucun serveur nulle part

Contacts, factures, paiements et reçus voyagent sous forme de charges scellées de bout en bout sur la DHT de Veilid. Il n'y a rien à assigner en justice, à limiter, à déréférencer ou à éteindre, parce que rien ne tourne. Chaque téléphone est un nœud complet et rend le routage et le stockage qu'il prend.

🔑

L'identité est une paire de clés

Créée sur le téléphone. Pas d'e-mail, pas de numéro, personne auprès de qui s'inscrire — ce qui explique aussi que personne ne puisse vous la restaurer, et l'application le dit franchement au lieu de l'enfouir.

🎫

Des cartes valables une seule fois

Vous tendez une carte à quelqu'un — QR, lien ducat: ou une touche NFC — et elle vaut pour une seule personne. Une fois réclamée, elle cesse de fonctionner : une capture d'écran qui finit ailleurs n'est donc pas une porte d'entrée.

🔒

Des conversations scellées

Un chiffrement de forme X3DH, avec des préclés à usage unique et la confidentialité persistante. Quand l'application doit se rabattre sur la préclé signée, elle vous montre un cadenas ouvert plutôt que de le cacher.

💬

Des conversations qui portent de l'argent

Des fils fondés sur une boîte aux lettres, qui fonctionnent même si l'un des deux est hors ligne — ils portent des factures détaillées dont les lignes doivent faire le total, sans quoi le message est refusé, des paiements, et des reçus émis par le bénéficiaire pointant vers la transaction qu'ils reconnaissent. Les petits groupes se répartissent sur ces mêmes fils deux à deux : pas de clé de groupe, pas d'enregistrement partagé, aucune propriété du fil modifiée.

Six étapes, aucun compte,
environ une minute

Chaque capture de cette page montre l'application sur un téléphone, pas une maquette. Rien ici ne vous demande de vous inscrire, puisqu'il n'y a personne auprès de qui le faire.

Étape 1 sur 6 : créez votre identité — une paire de clés faite sur ce téléphone, sans compte
1 · Identité — une paire de clés, pas une inscription
Étape 4 sur 6 : choisissez un code PIN, avec l'avertissement d'absence de réinitialisation dit clairement
4 · Un code PIN — et aucun moyen de le réinitialiser, dit clairement
Étape 5 sur 6 : comment des inconnus se font confiance — les deux côtés déposent, aller au bout le rend
5 · Confiance — expliquée avant votre première affaire
Étape 6 sur 6 : la sauvegarde, honnêtement pas encore une sauvegarde tant qu'elle n'a pas quitté le téléphone
6 · Sauvegarde — « pas encore une sauvegarde » tant qu'elle n'a pas quitté le téléphone

Votre identité est une paire de clés créée sur l'appareil — pas d'e-mail, pas de numéro, personne auprès de qui s'inscrire, ce qui explique aussi que personne ne puisse vous la restaurer. La dernière étape est la sauvegarde, car un portefeuille qu'on ne peut pas restaurer est la seule façon dont on perd vraiment de l'argent ici.

De l'argent qui est le vôtre

Un portefeuille Monero auto-conservé avec conversion en monnaie locale partout, scanné et dépensé par un moteur monero-oxide embarqué — aucun démon de portefeuille sur le téléphone.

Accueil personnel : solde en XMR et en monnaie locale, état de synchronisation, compteur de notes dépensables, tuiles de mode et mouvements récents
Le solde, et les notes derrière lui
Payer ou demander : montant en monnaie locale ou en XMR, calcul des frais, ce qu'il reste ensuite
Tout le calcul avant de vous engager
Le relevé : solde courant, recherche de reçus, export CSV
Un relevé reconstruit depuis la chaîne
Choisir qui payer : contacts listés avec leurs empreintes de clé
Qui vous payez, par empreinte de clé

Payer affiche le montant, les frais de réseau estimés, le total, ce qu'il vous reste ensuite, combien de notes cela dépense et à peu près combien de temps cela prendra — et vous laisse choisir une vitesse. L'historique est reconstruit depuis la chaîne : les envois identifiés par image de clé, la monnaie rendue jamais présentée comme une entrée, chaque ligne portant le solde courant, et tout le relevé exportable en CSV.

Monero dépense des notes distinctes plutôt qu'un solde : un portefeuille détenant une grosse note peut donc être incapable de payer deux fois de suite. L'application compte les notes qu'elle peut dépenser et vous dit d'en casser une avant que vous ne soyez au comptoir, plutôt que d'échouer sur place.

Des conversations qui portent de l'argent

Un contact est une paire de clés, pas un identifiant. Un scan ouvre une conversation fondée sur une boîte aux lettres, qui fonctionne même si l'un des deux est hors ligne — et ces fils portent du commerce, pas seulement du texte.

Votre carte : un QR à usage unique qui ouvre une conversation, valable pour une personne
Votre carte — valable pour une personne
Une conversation portant de l'argent : facture détaillée avec ligne de taxe, le reçu, un bandeau de séquestre réglé
Une facture, un paiement, un reçu — dans le fil
Un groupe de trois sur un tableau partagé : un enregistrement par génération, une question et sa réponse depuis un autre téléphone
Les groupes — un enregistrement partagé par génération
Rechercher ce que les gens ont dit, les correspondances de noms classées avant celles des messages
Cherchez ce que les gens ont réellement dit

Vous tendez une carte à quelqu'un — par QR, lien ducat: ou touche NFC — et elle est valable pour une seule personne : une fois réclamée, elle cesse de fonctionner ; une capture qui finit ailleurs n'est donc pas une porte d'entrée.

Un groupe est une liste qui ne fait que croître, et ses mots voyagent sur un seul enregistrement de tableau par génération (§16.24) : chaque membre écrit ses propres pages sous une clé de groupe que la liste transporte, si bien qu'un message à cinq personnes est une écriture au lieu de cinq, et le réseau ne peut distinguer cet enregistrement d'aucun autre. Personne ne peut se faire passer pour un autre, et partir est une décision locale. Un groupe peut partager une note : un total devient une demande individuelle à chacun, plus une phrase permettant à tous de vérifier le calcul, et chaque demande passe à payée dès que sa référence arrive.

Votre téléphone est toute l'entreprise

Choisissez l'un des neuf modes et l'application entière passe la main — ses propres onglets, plus rien de ceux du portefeuille. Presque rien de tout cela n'a exigé un nouvel objet de protocole, et c'est la phrase dont la spécification est la plus fière.

Modes de fonctionnement : personnel, caisse, ardoise, taxi, dons, place de marché, location, recruter de l'aide, borne
Neuf modes, un protocole
Caisse : articles enregistrés avec une ligne de taxe calculée
Caisse — avec la taxe calculée
Un code que le client scanne ; la facture détaillée arrive sur son téléphone
Un code — la facture arrive au scan
Ardoises : ouvertes, facturées et en attente, closes par une seule facture
Ardoises — réglées depuis le bus du retour
Mode borne, côté client : touchez ce que vous voulez, la taxe est montrée avant l'engagement
Borne — le client commande lui-même
Panneau du personnel de la borne derrière un code PIN : commandes, menu et taux de taxe
Panneau du personnel derrière un code PIN
Un code de don permanent, avec son coût de traçabilité indiqué à l'écran
Dons — avec le coût annoncé

Une caisse enregistre des articles ou accepte un total saisi, calcule la taxe sur les ventes de sa région et affiche un code ; la facture arrive sur le téléphone du client dès qu'il scanne, et un reçu repart quand il paie. Une ardoise signale chaque consommation au client et se solde par une seule facture. Une borne confie entièrement le téléphone au client, avec un panneau du personnel derrière un code PIN. Une boîte à dons offre les deux voies : un code DUCAT qui ouvre une conversation et renvoie un reçu dès que l'argent arrive, et une adresse permanente à laquelle n'importe quel portefeuille Monero peut donner, avec son coût de traçabilité indiqué à l'écran plutôt que dans une politique.

Une course que personne ne répartit

Tapez où vous allez. Votre téléphone transforme un point GPS en géocellule — un tableau d'affichage public dont l'adresse est le lieu lui-même — et publie un appel : une carte à usage unique, une zone approximative et une offre calculée depuis le vrai itinéraire. Aucun nom ne va sur le tableau — ni sur la carte, ni dans l'enregistrement derrière. Les conducteurs surveillent leur cellule et ses voisines et le prennent ; la DHT arbitre la course, et aucun intermédiaire n'existe.

La ligne verte est l'essentiel : les tarifs de DUCAT se situent environ 15 % sous ceux qu'une plateforme facture au passager, et le conducteur garde tout — la commission absente, rendue aux deux. L'acceptation arrive avec un visage : nom, voiture, couleur, plaque, heure d'arrivée — scellée pour le passager, jamais montrée au tableau. Votre propre nom et le porche où vous attendez partent en sens inverse au même instant, vers le seul conducteur qui a pris l'appel.

Une concession, énoncée clairement à l'écran : la recherche d'adresse, l'itinéraire et les tuiles de carte interrogent OpenStreetMap — le seul endroit où DUCAT envoie une position hors de l'appareil. Les tableaux eux-mêmes ne portent jamais mieux que ~1,2 km.

Appeler une course : itinéraire, distance, durée, et le tarif face à ce que facturerait une plateforme
L'appel, comparé à la plateforme
Le compteur : tarif saisi une fois, un code de prise en charge, les conditions arrivant dans la discussion au départ
Le compteur, avec les conditions dans le fil

Vendez-le, louez-le, ou offrez une heure de votre temps

La même mécanique de tableaux porte plus que des courses. Une annonce de place de marché, une location ou une heure d'aide qualifiée se publient toutes sur un tableau d'affichage adressé par le quartier, et un inconnu tout près le lit sans qu'aucun de vous deux ne touche à une plateforme.

Les annonces vivent sur des tableaux plus grossiers que les appels — environ cinq kilomètres de large, parce que les gens se déplacent pour aller chercher un jeu de clés. La recherche lit votre tableau et l'anneau qui l'entoure, en dessinant les résultats à mesure qu'ils répondent : quelque chose garé près de vous s'affiche en moins de six secondes, tandis que « rien d'annoncé par ici » prend une quarantaine de secondes et coche les zones au fur et à mesure.

Parcourir la place de marché : une annonce trouvée sur le tableau, avec prix, dépôts et un bouton pour demander
Place de marché
Parcourir l'aide : une compétence proposée à proximité, au tarif horaire
Recruter de l'aide
Mettre un véhicule en location : la moitié publique qui part sur le tableau
La moitié publique — ce que le tableau peut lire
Seulement pour qui réserve : l'adresse et les détails de remise ne vont jamais sur le tableau
La moitié privée — jamais sur le tableau
Trouver du matériel à proximité : une annonce active avec prix à la journée et dépôt
La trouver — prix, dépôt, et un moyen de demander

Le formulaire d'annonce est coupé en deux et l'application vous dit laquelle est laquelle : tout ce qui est dans la première partie part sur un tableau public que n'importe qui à proximité peut lire, et l'adresse, l'endroit où sont les clés et la plaque vont dans la seconde, qui ne quitte votre téléphone que lorsqu'une réservation est réelle.

Un chez-soi, un fil
et une étagère à soi

Les enregistrements qui portent une facture portent tout aussi bien une page. Votre clé est déjà une adresse : ce que vous écrivez a donc où vivre sans demander de place à personne.

Le Fil : les publications des gens que vous gardez, et votre propre chez-soi
Le fil — les publications des gens que vous gardez
La Bibliothèque : des numéros classés par éditeur, enregistrés plutôt qu'ouverts
La bibliothèque — des numéros classés par éditeur
Mondial : des publications sur des tableaux par thème, « Tout » lisant chaque étagère d'un coup
Mondial — des tableaux par thème, toutes les étagères d'un coup
Une annonce ouverte : les photos de son paquet, la description du vendeur, le prix saisi à côté de la conversion du jour
Une annonce ouverte — ses photos et le prix saisi

Le chez-soi d'un profil se tient à l'adresse que nomme sa propre clé, et le fil est la chronologie des gens que vous gardez — une publication peut porter une image et un fichier, et les cœurs reviennent. Les sites sont servis depuis le disque de qui les a publiés et s'ouvrent dans une salle scellée, si bien qu'en lire un ne va rien chercher ailleurs.

Les publications — un journal, un feuilleton, un logiciel — se vendent mondialement sur des tableaux par thème plutôt que par quartier : un envoi se pose sur le tableau du thème et sur celui de sa langue, et « Tout » lit les six étagères côte à côte. Une annonce va chercher son paquet sur le téléphone du vendeur — jusqu'à 24 photographies en taille réelle, une description, des caractéristiques et des fichiers joints — refusé en bloc sur toute clé qu'il ne nomme pas, pour qu'un mauvais document ne puisse pas cacher de bonnes photos.

Vous déposez tous les deux.
Aller au bout vous le rend.

Il n'y a aucune entreprise au milieu pour prendre parti, alors DUCAT fait plus simple. L'argent repose à une adresse que vous seuls deux pouvez ouvrir, et la libération rend à chaque partie son propre dépôt, nommément. Personne ne peut prendre un dépôt — nous compris, car il n'y a aucun nous à payer.

~10 % une course courte, faible exposition aux dégâts
~20 % un hébergement les clés du logement de quelqu'un
~30 % un véhicule les dégâts peuvent dépasser le prix

Ces chiffres sont argumentés plutôt que devinés — le modèle 2-sur-2 sans dépositaire de Bisq est le précédent fonctionnel le plus proche, et la littérature sur le double dépôt prouve que l'arrangement est à l'épreuve de la triche à l'équilibre. Deux bornes en découlent : un dépôt qui vaut moins que les frais pour le rendre devient nul plutôt que décoratif, et aucun ne dépasse la moitié du prix. La partie la plus exposée finance en second, pour que son argent ne repose jamais seul à une adresse partagée.

⅔

Un séquestre sans entreprise derrière

Quand une affaire demande plus qu'une caution : le passager, le conducteur et un contact arbitre de confiance mutuelle exécutent une génération distribuée de clés sur le fil scellé — trois appareils dérivent une même adresse Monero, chacun ne détenant qu'une part, deux quelconques pouvant signer, sans distributeur nulle part. Le chemin heureux tient en deux touches.

Tout le reste est un règlement : l'une des parties propose un partage, l'autre signe ou contre-propose. Celui qui est bloqué s'adresse à l'arbitre, dont la cosignature est la décision — un arbitre compromis peut au pire choisir entre les parties nommées, jamais se payer lui-même. Prouvé sur la chaîne, sur stagenet, sous toutes ses formes, y compris une libération FROST à deux entrées.

∅

Ce qu'un nom a coûté

Avant toute affaire il y a un inconnu, et la question est ce que son nom lui a coûté. Un persona peut brûler des Monero — les envoyer à une adresse dont personne ne détient les clés, dérivée d'une empreinte que chacun peut recalculer — et porter la preuve de paiement de Monero elle-même. Votre client vérifie cette preuve auprès de son propre nœud, demande à un second nœud si la transaction est dans un bloc, et montre dès lors le persona en toutes lettres partout où vous décidez quelque chose : a brûlé 0,01 XMR, depuis le bloc N. Jamais une note. La règle qui compte est l'avertissement : quand ce que vous allez risquer vaut plus que ce qu'ils ont brûlé, l'application le dit, parce qu'un nom qui n'a rien coûté n'a rien à perdre à disparaître.

Après une affaire réglée, chaque partie peut signer un reçu noté, et quiconque vous a rencontré en personne peut signer une garantie. Les deux voyagent dans un fil scellé et les deux sont pesés par le seul lecteur — une voix par signataire, en ne comptant que les signataires dont vous avez vérifié le brûlage, et en ne comptant une garantie que de gens déjà dans vos contacts. Un seul saut, aucun graphe, rien de publié nulle part. Une réputation qui coûte de l'argent plutôt que de la vie privée.

Et elle se comporte comme une application

Un outil de confidentialité désagréable à utiliser sert une fois. Celui-ci nomme ce que les choses vous coûtent, parle vingt langues, et a un thème sombre qui n'est pas une arrière-pensée.

Profil : le coût de traçabilité qu'il y a à laisser vos contacts vous payer directement, énoncé là où vous choisissez
Les coûts nommés au moment du choix
Le même écran d'accueil dans le thème sombre Mocha
Mocha — le thème sombre, fait correctement
Le même écran d'accueil en arabe : un miroir droite-à-gauche complet, avec les chiffres arabes orientaux
Arabe — un miroir droite-à-gauche complet
La moitié professionnelle des réglages : région tarifaire, taux de taxe, confidentialité, sauvegarde
La moitié professionnelle des réglages

La commodité a un prix dans un système de confidentialité, et l'application le nomme au moment où vous choisissez plutôt que dans une politique que personne ne lit. Laisser vos contacts vous payer directement, c'est réutiliser une adresse — elle dit donc que quiconque observe la chaîne peut voir que la même personne a été payée à chaque fois, y compris des gens qui ne vous ont payé qu'une seule fois, et montre l'alternative. La même habitude traverse tout : une apparition dans le mempool est montrée comme vue, jamais réglée ; un profil est toujours présenté comme l'affirmation qu'il est.

Elle parle vingt langues — chaque écran lit depuis des ressources, les pluriels sont composés plutôt que concaténés, et l'arabe et le farsi prouvent le miroir. Les reçus sont des registres, pas des messages : chaque reçu vit dans son propre magasin, survit à la suppression du fil et du contact, et voyage dans la sauvegarde chiffrée — qui emporte les personnes autant que l'argent.

La même application sur un bureau

Une fenêtre native au-dessus du même Rust que fait tourner le téléphone — de sorte que la caisse d'un commerçant, une borne, la salle de presse, le marché et le fil sont une implémentation, pas un portage.

La page Discussion du bureau : les groupes sur tableaux au-dessus des fils deux à deux, avec un volet de conversation
Discussion — les groupes sur tableaux, au-dessus des fils deux à deux
La caisse du bureau : une vente enregistrée et des ardoises
La caisse — une vente enregistrée et les ardoises
La page Marché du bureau : des annonces près d'une cellule avec leurs vignettes
Le marché — des annonces près d'une cellule, avec vignettes
La page État du bureau : le nœud, sa table de routage, Reconnecter, le journal
État — le nœud, sa table de routage, Reconnecter

Elle parle les vingt langues du téléphone depuis les mêmes ressources, et elle est éprouvée contre le téléphone dans chaque rite : discussion, groupes sur tableaux, factures et reçus, une commande de borne payée depuis un téléphone qui n'avait jamais rencontré le bureau, fichiers et sites servis et récupérés, et des appels avec du vrai son.

Ce qui est prouvé, et ce qui ne l'est pas

Le README tient le registre de ce qui a réellement tourné de bout en bout sur le réseau réel et le stagenet réel — et énonce les manques au lieu de les enfouir.

Démontré de bout en bout
  • Deux courses complètes réparties téléphone↔ordinateur — de l'appel par géocellule au règlement sur la chaîne, pourboire et reçu — et la course cautionnée désormais menée jusqu'au bout sur deux téléphones
  • L'arc complet du séquestre — deux téléphones et un arbitre au bureau ont dérivé indépendamment une adresse 2-sur-3 ; financer → libérer → conducteur payé
  • Une réservation — propriétaire et hôte finançant chacun son dépôt, la cagnotte confirmée par le scan de l'hôte, partage proposé, signé, les deux parties intactes ; elle a repris au lieu de recommencer quand un nœud Monero a expiré en cours de route
  • Ardoise du téléphone à l'ordinateur, de la facture au reçu ; dix attaques refusées
  • Un téléphone effacé jusqu'au vide a parcouru la configuration : première carte, premier paiement, une vente de borne payée de bout en bout — puis effacé de nouveau et restauré depuis sa propre sauvegarde
  • Tous les rails de séquestre passés par l'interface en une journée — une vente de place de marché, un appel dans la rue avec la position en direct traversant les téléphones, une location de matériel, et une mission d'aide dont la première exécution a fait surgir et corriger une vraie situation de concurrence
  • La couche de confiance, parcourue plutôt qu'argumentée — un brûlage prouvé et vérifié en 12 s auprès du propre nœud d'un inconnu, un reçu noté correctement pesé à zéro, quatre ordinateurs concluant « 2 de vos contacts les connaissent », et une carte d'appel sans nom que les informations partagées ensuite ont nommée
Énoncé, pas enfoui
  • Aucune revue par quiconque hors du projet — le §2.5 est l'argument de l'importance de la chose ; une passe interne sur cinq surfaces d'attaque a trouvé une quarantaine de choses et en a corrigé la plupart, ce qui vaut moins
  • Aucun implémenteur n'ayant jamais lu core/
  • NFC vérifié à la compilation, jamais testé sur le terrain entre deux téléphones — et la touche jamais mesurée sur un mobile
  • Latences mesurées sur un ordinateur avec un nœud attaché, pas sur un mobile sur batterie
  • Deux radios, deux batteries, deux horloges indépendantes — la journée de terrain reste due
  • L'ordinateur n'a pas de second facteur — aucun verrou d'appareil, aucun secret à lui, donc le contrôle que le téléphone impose avant toute dépense ne peut pas s'y exécuter
!

Pré-alpha. Stagenet. Pas pour de l'argent réel.

Chaque build est signé en débogage et règle sur le stagenet de Monero — des pièces sans valeur, par conception. La spécification est le brouillon 1.1.0-dev13 et dit d'elle-même : rien ici n'est définitif, et le §14 est le vrai programme. Essayez-la, cassez-la, lisez-la — mais ne la financez pas.

La spécification est le produit.
Tout le reste la maintient honnête.

ducat-protocol.md est l'artefact principal — cinq parties, un journal des modifications en tête, et une suite de conformité qu'une seconde implémentation exécute, pour que le document ne puisse pas s'écarter du code en silence.

★ ducat-protocol.md   la spécification — brouillon 1.1.0-dev13, journal des modifications en tête
  core/               implémentation de référence (Rust)
  vectors/            406 cas de conformité + schéma
  conformance/        quatre vérificateurs, à chaque push
  harness/            de bout en bout sur de vraies routes Veilid
  sim/                simulateur hors ligne, scénarios de marché
  applications/       android/ + desktop/ (mêmes sources)
  mobile/             le pont Rust : portefeuille · boîte aux lettres · nœud
  research/           des preuves, pas un produit

Quatre vérificateurs, à chaque push

  • Chaque vecteur validé contre schema.json
  • Une seconde implémentation exécute les 406 et doit concorder
  • Le document audité contre le code — cela a repéré une section normative référencée trois fois et jamais écrite, une plage de valeurs que le registre ne déclarait pas, et six types de vecteurs que le document n'a jamais nommés
  • Rien de ce qui est importé ne reste non déclaré

L'intendance est normative, pas velléitaire : le §18.7 fait de l'éthique de Veilid une exigence de conformité — aucun frais de protocole, aucun paiement de nœud, jamais. Construisez ce que vous voulez avec ce code, mais un client qui monétise l'acheminement n'est pas DUCAT.

Installez-la sur un téléphone,
ou sur un bureau

Rien à installer au préalable — chaque build embarque sa propre bibliothèque Rust et sa JVM. Android sur le téléphone, et la même application en fenêtre native sous Linux, Windows et macOS. Il n'y a pas de build iOS ; il aura son dossier quand il l'aura mérité.

🤖 Android

Navigateur du téléphone, build le plus récent, aucune page de versions à parcourir. armeabi-v7a uniquement pour les téléphones antérieurs à 2016 environ ; x86_64 est pour les émulateurs.

🐧 Linux

Le .deb et le .rpm s'installent comme des paquets ; l'AppImage se lance tel quel.

🪟 Windows

Non signé — Windows avertira à la première ouverture.

🍎 macOS

Builds Apple Silicon et Intel. Non signés — macOS avertira à la première ouverture.

Signé en débogage, stagenet uniquement — pas pour de l'argent réel.