Il maneki-neko di DUCAT, con in mano una moneta Monero
commercio di prossimità peer-to-peer · specifica bozza 1.1.0-dev13

DUCAT

Veilid per il trasporto. Monero per il regolamento. Nessun operatore in mezzo.

Non esiste alcun server DUCAT da nessuna parte — contatti, messaggi, fatture e ricevute sono record sulla DHT e payload sigillati end-to-end, e ogni telefono esegue un nodo Veilid completo, restituendo l'instradamento e lo spazio che occupa.

0 vettori di conformità 0 modalità operative 0 lingue 0 server

Firmato in debug, solo stagenet. Non ancora per denaro vero.

Poggia su

Commercio senza nessuno in mezzo

Un ducato è stato per sei secoli una moneta d'oro accettata da Venezia a Vienna fino al Levante — nessun rapporto con un emittente, nessun conto dietro, nessun permesso allegato. DUCAT è questo, per quando stai davanti a qualcuno e fai affari.

🐱

Nessun server da nessuna parte

Contatti, fatture, pagamenti e ricevute viaggiano come payload sigillati end-to-end sulla DHT di Veilid. Non c'è nulla da citare in giudizio, limitare, deplatformare o spegnere, perché non c'è nulla in esecuzione. Ogni telefono è un nodo completo e restituisce l'instradamento e lo spazio che occupa.

🔑

L'identità è una coppia di chiavi

Creata sul telefono. Nessuna email, nessun numero, nessuno presso cui registrarsi — ed è anche il motivo per cui nessuno può ripristinartela, e l'app lo dice ad alta voce invece di nasconderlo.

🎫

Biglietti da riscattare una volta sola

Dai a qualcuno un biglietto — QR, link ducat: o un tocco NFC — e vale per una sola persona. Una volta riscattato smette di funzionare, quindi uno screenshot che finisce altrove non è una via d'ingresso.

🔒

Conversazioni sigillate

Cifratura in stile X3DH, con prekey monouso e forward secrecy. Quando l'app deve ripiegare sulla prekey firmata, ti mostra un lucchetto aperto invece di nasconderlo.

💬

Conversazioni che portano denaro

Conversazioni basate su casella postale che funzionano anche se una delle due parti è offline — portano fatture dettagliate le cui righe devono dare il totale, altrimenti il messaggio viene rifiutato, pagamenti, e ricevute emesse da chi incassa che puntano alla transazione che riconoscono. I piccoli gruppi si distribuiscono sulle stesse conversazioni a due: nessuna chiave di gruppo, nessun registro condiviso, ogni proprietà della conversazione invariata.

Sei passi, nessun account,
circa un minuto

Ogni schermata di questa pagina è l'app in esecuzione su un telefono, non un mockup. Nulla qui ti chiede di iscriverti, perché non c'è nessuno presso cui iscriversi.

Passo 1 di 6: crea la tua identità — una coppia di chiavi creata su questo telefono, nessun account
1 · Identità — una coppia di chiavi, non una registrazione
Passo 4 di 6: scegli un PIN, con l'avviso che non si può reimpostare detto chiaramente
4 · Un PIN — e nessun modo di reimpostarlo, detto chiaramente
Passo 5 di 6: come si fidano due sconosciuti — entrambi versano una garanzia, portare a termine la restituisce
5 · Fiducia — spiegata prima del tuo primo affare
Passo 6 di 6: il backup, che onestamente non lo è ancora finché non lascia il telefono
6 · Backup — «non è ancora un backup» finché non lascia il telefono

La tua identità è una coppia di chiavi creata sul dispositivo — nessuna email, nessun numero, nessuno presso cui registrarsi, ed è anche il motivo per cui nessuno può ripristinartela. L'ultimo passo è il backup, perché un portafoglio che non puoi ripristinare è l'unico modo in cui qui si perde davvero del denaro.

Denaro che è tuo

Un portafoglio Monero in autocustodia con conversione in valuta locale ovunque, scansionato e speso da un motore monero-oxide integrato — nessun demone di portafoglio sul telefono.

Home personale: saldo in XMR e valuta locale, stato di sincronizzazione, contatore delle note spendibili, riquadri delle modalità e movimenti recenti
Il saldo, e le note che ci stanno dietro
Pagare o richiedere: importo in valuta locale o XMR, aritmetica delle commissioni, quanto resta dopo
Tutta l'aritmetica prima di impegnarti
L'estratto conto: saldo progressivo, ricerca delle ricevute, esportazione CSV
Un estratto conto ricostruito dalla catena
Scegliere chi pagare: contatti elencati con le impronte delle loro chiavi
Chi stai pagando, per impronta della chiave

Pagando vedi l'importo, la commissione di rete stimata, il totale, quanto ti resta dopo, quante note vengono spese e all'incirca quanto ci vorrà — e ti lascia scegliere una velocità. La cronologia è ricostruita dalla catena: gli invii identificati dalla key image, il resto mai mostrato come entrata, ogni riga con il saldo progressivo, e l'intero estratto esportabile in CSV.

Monero spende note distinte anziché un saldo, quindi un portafoglio con una nota grande può non riuscire a pagare due volte di fila. L'app conta le note che può spendere e ti dice di spezzarne una prima che tu sia alla cassa, invece di fallire lì.

Conversazioni che portano denaro

Un contatto è una coppia di chiavi, non un identificativo. Una scansione apre una conversazione basata su casella postale che funziona anche se una delle due parti è offline — e quelle conversazioni portano commercio, non solo testo.

Il tuo biglietto: un QR monouso che apre una conversazione, valido per una persona
Il tuo biglietto — vale per una persona
Una conversazione che porta denaro: fattura dettagliata con riga d'imposta, la ricevuta, un banner di deposito regolato
Fattura, pagamento, ricevuta — nella conversazione
Un gruppo di tre su una bacheca condivisa: un record per generazione, una domanda e la sua risposta da un altro telefono
Gruppi — un record condiviso per generazione
Cercare quello che le persone hanno detto, con i nomi prima dei messaggi
Cerca quello che le persone hanno detto davvero

Dai a qualcuno un biglietto — con QR, link ducat: o un tocco NFC — e vale per una sola persona: una volta riscattato smette di funzionare, quindi uno screenshot che finisce altrove non è una via d'ingresso.

Un gruppo è un elenco che può solo crescere, e le sue parole viaggiano su un solo record di bacheca per generazione (§16.24): ogni membro scrive le proprie pagine sotto una chiave di gruppo che l'elenco porta con sé, così un messaggio a cinque persone è una scrittura invece di cinque, e la rete non riesce a distinguere quel record da nessun altro. Nessuno può spacciarsi per un altro, e andarsene è una faccenda locale. Un gruppo può dividere un conto: un totale diventa una richiesta a ciascuno più una frase su cui tutti possono verificare i conti, e ogni richiesta passa a pagata appena arriva il suo riferimento.

Il tuo telefono è tutta l'attività

Scegli una delle nove modalità e l'intera app passa il testimone — con le sue schede, nulla di quelle del portafoglio. Quasi nulla di tutto ciò ha richiesto un nuovo oggetto di protocollo, ed è la frase di cui la specifica va più fiera.

Modalità operative: personale, punto cassa, conto aperto, taxi, donazioni, mercato, noleggio, cerca aiuto, chiosco
Nove modalità, un protocollo
Punto cassa: articoli registrati con una riga d'imposta calcolata
Punto cassa — con l'imposta calcolata
Un codice che il cliente scansiona; la fattura dettagliata arriva sul suo telefono
Un codice — la fattura arriva alla scansione
Conti aperti: aperti, fatturati e in attesa, chiusi con una sola fattura
Conti aperti — saldati dall'autobus di ritorno
Modalità chiosco, lato cliente: tocca quello che vuoi, l'imposta è mostrata prima di confermare
Chiosco — il cliente ordina da sé
Pannello del personale del chiosco dietro un PIN: ordini, menù e l'aliquota
Pannello del personale dietro un PIN
Un codice di donazione permanente, con il suo costo di collegabilità dichiarato sullo schermo
Donazioni — con il costo dichiarato

Un punto cassa registra articoli o accetta un totale digitato, calcola l'imposta sulle vendite della sua regione e mostra un codice; la fattura arriva sul telefono del cliente nel momento in cui scansiona, e una ricevuta torna indietro quando paga. Un conto aperto segnala ogni consumazione al cliente e si chiude con una sola fattura. Un chiosco consegna il telefono interamente al cliente, con un pannello del personale dietro un PIN. Una cassetta delle donazioni offre entrambe le strade: un codice DUCAT che apre una conversazione e rimanda una ricevuta appena il denaro arriva, e un indirizzo permanente a cui qualunque portafoglio Monero può donare, con il suo costo di collegabilità dichiarato sullo schermo anziché in una policy.

Una corsa che nessuno smista

Scrivi dove vai. Il telefono trasforma una posizione GPS in una geocella — una bacheca pubblica il cui indirizzo è il luogo stesso — e pubblica una chiamata: un biglietto monouso, una zona approssimativa e un'offerta calcolata sul percorso reale. Sulla bacheca non finisce nessun nome — né sul biglietto né nel record che gli sta dietro. Chi guida sorveglia la propria cella e quelle vicine e la prende; è la DHT ad arbitrare la gara, e nessun intermediario esiste.

La linea verde è il punto: le tariffe di DUCAT stanno circa il 15% sotto quelle che una piattaforma applica al passeggero, e chi guida tiene tutto — la commissione assente, restituita a entrambi. L'accettazione arriva con una faccia: nome, auto, colore, targa, orario di arrivo — sigillati verso il passeggero, mai mostrati alla bacheca. Il tuo nome e il portone davanti al quale aspetti fanno il percorso inverso nello stesso momento, verso l'unico autista che ha preso la chiamata.

Una concessione, dichiarata chiaramente sullo schermo: la ricerca degli indirizzi, il calcolo del percorso e le tessere della mappa interrogano OpenStreetMap — l'unico punto in cui DUCAT manda la posizione fuori dal dispositivo. Le bacheche stesse non portano mai una precisione migliore di ~1,2 km.

Chiamare una corsa: percorso, distanza, tempo e la tariffa a confronto con quella di una piattaforma
La chiamata, confrontata con la piattaforma
Il tassametro: tariffa digitata una volta, un codice di prelievo, le condizioni che arrivano in chat alla partenza
Il tassametro, con le condizioni nella conversazione

Vendilo, affittalo, oppure offri un'ora del tuo tempo

La stessa meccanica delle bacheche porta ben più delle corse. Un annuncio di mercato, un noleggio o un'ora di aiuto qualificato finiscono tutti su una bacheca indirizzata dal quartiere, e uno sconosciuto lì vicino la legge senza che nessuno dei due tocchi una piattaforma.

Gli annunci stanno su bacheche più grossolane delle chiamate — circa cinque chilometri di lato, perché per un mazzo di chiavi la gente si sposta. La ricerca legge la tua bacheca e l'anello attorno, disegnando i risultati man mano che rispondono, così qualcosa parcheggiato vicino a te compare in meno di sei secondi, mentre «qui non c'è nulla» richiede una quarantina di secondi e spunta le zone via via.

Sfogliare il mercato: un annuncio trovato in bacheca, con prezzo, garanzie e un pulsante per chiedere
Mercato
Sfogliare gli aiuti: una competenza offerta lì vicino, a tariffa oraria
Cerca aiuto
Mettere un veicolo a noleggio: la metà pubblica che finisce in bacheca
La metà pubblica — ciò che la bacheca può leggere
Solo per chi prenota: indirizzo e dettagli della consegna non finiscono mai in bacheca
La metà privata — mai sulla bacheca
Trovare attrezzatura lì vicino: un annuncio attivo con prezzo al giorno e la garanzia
Trovarlo — prezzo, garanzia e un modo per chiedere

Il modulo dell'annuncio è diviso in due e l'app ti dice quale metà è quale: tutto ciò che sta nella prima parte finisce su una bacheca pubblica che chiunque nei paraggi può leggere, mentre l'indirizzo, dove sono le chiavi e la targa vanno nella seconda, che non lascia il tuo telefono finché una prenotazione non è reale.

Una casa, un feed
e uno scaffale tutto tuo

I record che portano una fattura portano altrettanto bene una pagina. La tua chiave è già un indirizzo, quindi ciò che scrivi ha dove stare senza chiedere spazio a nessuno.

Il Feed: i post delle persone che tieni, e la tua casa
Il feed — i post delle persone che tieni
La Biblioteca: numeri archiviati per editore, salvati fuori anziché aperti
La biblioteca — numeri archiviati per editore
Mondiale: pubblicazioni su bacheche per argomento, con «Tutto» che legge ogni scaffale insieme
Mondiale — bacheche per argomento, tutti gli scaffali insieme
Un annuncio aperto: le foto del suo pacchetto, la descrizione di chi vende, il prezzo digitato accanto alla conversione di oggi
Un annuncio aperto — le sue foto e il prezzo digitato

La casa di un profilo sta all'indirizzo che nomina la sua stessa chiave, e il feed è la cronologia delle persone che tieni — un post può portare un'immagine e un file, e i cuori tornano indietro. I siti li serve dal proprio disco chi li ha pubblicati e si aprono in una stanza sigillata, così leggerne uno non va a prendere nulla altrove.

Le pubblicazioni — un giornale, una serie, un pezzo di software — si vendono in tutto il mondo su bacheche per argomento anziché per quartiere: un post finisce sulla bacheca dell'argomento e su quella della sua lingua, e «Tutto» legge tutti e sei gli scaffali affiancati. Un annuncio va a prendere il suo pacchetto dal telefono di chi vende — fino a 24 fotografie a dimensione piena, una descrizione, le specifiche e file allegati — rifiutato per intero su qualunque chiave che non nomini, perché un documento cattivo non possa nascondere buone fotografie.

Entrambi versate una garanzia.
Portare a termine ve la restituisce.

Non c'è nessuna azienda in mezzo a poter prendere le parti di qualcuno, quindi DUCAT fa qualcosa di più semplice. Il denaro sta a un indirizzo che solo voi due potete aprire, e lo sblocco restituisce a ciascuna parte la propria garanzia, nominalmente. Nessuno può prendersi una garanzia — noi compresi, perché non c'è nessun noi da pagare.

~10% una corsa breve, poca esposizione ai danni
~20% un alloggio le chiavi di casa di qualcuno
~30% un veicolo il danno può superare il prezzo

Quei numeri sono argomentati, non tirati a indovinare — il modello 2-su-2 senza custode di Bisq è il precedente funzionante più vicino, e la letteratura sul doppio deposito dimostra che all'equilibrio l'assetto è a prova di imbroglio. Ne discendono due limiti: una garanzia che vale meno della commissione per restituirla diventa zero anziché decorazione, e nessuna supera la metà del prezzo. La parte più esposta versa per seconda, così il suo denaro non resta mai da solo a un indirizzo condiviso.

⅔

Deposito a garanzia senza nessuna azienda dietro

Quando un affare chiede più di una cauzione: passeggero, autista e un contatto arbitro di fiducia reciproca eseguono una generazione distribuita di chiavi sulla conversazione sigillata — tre dispositivi derivano un solo indirizzo Monero, ciascuno con una sola quota, due qualsiasi in grado di firmare, nessun distributore da nessuna parte. Il percorso felice sono due tocchi.

Tutto il resto è un accordo: una parte propone una divisione, l'altra firma o rilancia. Chi resta bloccato si rivolge all'arbitro, la cui controfirma è la decisione — un arbitro compromesso può al massimo scegliere fra le parti nominate, mai pagare se stesso. Dimostrato sulla catena, su stagenet, in ogni forma, inclusa una liberazione FROST a due ingressi.

∅

Quanto è costato un nome

Prima di ogni affare c'è uno sconosciuto, e la domanda è quanto gli sia costato il suo nome. Una persona può bruciare Monero — mandarli a un indirizzo di cui nessuno ha le chiavi, derivato da un hash che chiunque può ricalcolare — e portare con sé la prova di pagamento di Monero stessa. Il tuo client verifica quella prova contro il proprio nodo, chiede a un secondo nodo se la transazione è in un blocco, e da lì in poi mostra la persona a parole ovunque tu debba decidere qualcosa: ha bruciato 0,01 XMR, dal blocco N. Mai un punteggio. La regola che conta è l'avviso: quando ciò che stai per rischiare vale più di quanto hanno bruciato, l'app lo dice, perché un nome che non è costato nulla non ha nulla da perdere a sparire.

Dopo un affare concluso ciascuna parte può firmare una ricevuta valutata, e chiunque ti abbia incontrato di persona può firmare una garanzia. Entrambe viaggiano in una conversazione sigillata ed entrambe le pesa soltanto chi legge — una voce per firmatario, contando solo i firmatari di cui hai verificato la bruciatura, e contando una garanzia solo da persone già tra i tuoi contatti. Un solo salto, nessun grafo, nulla pubblicato da nessuna parte. Una reputazione che costa denaro anziché privacy.

E si comporta come un'app

Uno strumento per la privacy sgradevole da usare viene usato una volta sola. Questo dice quanto ti costano le cose, parla venti lingue e ha un tema scuro che non è un ripensamento.

Profilo: il costo di collegabilità che comporta lasciarsi pagare direttamente dai contatti, dichiarato dove lo si sceglie
Costi dichiarati nel momento in cui scegli
La stessa schermata iniziale nel tema scuro Mocha
Mocha — il tema scuro, fatto per bene
La stessa schermata iniziale in arabo: uno specchio completo da destra a sinistra, con i numeri arabo-orientali
Arabo — uno specchio completo da destra a sinistra
La metà commerciale delle impostazioni: regione tariffaria, aliquota, privacy, backup
La metà commerciale delle impostazioni

La comodità ha un prezzo in un sistema per la privacy, e l'app lo dichiara nel momento in cui scegli, non in una policy che nessuno legge. Lasciare che i contatti ti paghino direttamente significa riusare un indirizzo — quindi dice che chiunque osservi la catena può capire che ogni volta è stata pagata la stessa persona, comprese persone che ti hanno pagato una volta soltanto, e indica l'alternativa. La stessa abitudine attraversa tutto: un avvistamento nella mempool è mostrato come visto, mai regolato; un profilo è sempre presentato per l'affermazione che è.

Parla venti lingue — ogni schermata legge dalle risorse, i plurali sono composti anziché concatenati, e l'arabo e il farsi dimostrano lo specchio. Le ricevute sono registri, non messaggi: ogni ricevuta vive nel proprio archivio, sopravvive all'eliminazione della conversazione e del contatto, e viaggia nel backup cifrato — che porta con sé le persone tanto quanto il denaro.

La stessa applicazione su una scrivania

Una finestra nativa sopra lo stesso Rust che gira sul telefono — così la cassa di un negozio, un chiosco, la sala stampa, il mercato e il feed sono una sola implementazione, non un porting.

La pagina Chat della scrivania: gruppi su bacheche sopra le conversazioni a due, con un riquadro di conversazione
Chat — gruppi su bacheche, sopra le conversazioni a due
La cassa della scrivania: una vendita battuta e conti aperti
La cassa — una vendita battuta e i conti aperti
La pagina Mercato della scrivania: annunci vicini a una cella con le loro miniature
Il mercato — annunci vicini a una cella, con le miniature
La pagina Stato della scrivania: il nodo, la sua tabella di routing, Riconnetti, il registro
Stato — il nodo, la sua tabella di routing, Riconnetti

Parla le venti lingue del telefono dalle stesse risorse, ed è provata contro il telefono in ogni rito: chat, gruppi su bacheche, fatture e ricevute, un ordine da chiosco pagato da un telefono che non aveva mai incontrato la scrivania, file e siti serviti e recuperati, e chiamate con suono vero.

Cosa è dimostrato e cosa no

Il README tiene il conto di ciò che ha davvero funzionato end-to-end sulla rete vera e sullo stagenet vero — e dichiara le lacune invece di sotterrarle.

Dimostrato end-to-end
  • Due corse complete smistate telefono↔desktop — dalla chiamata per geocella al regolamento sulla catena, mancia e ricevuta — e la corsa con cauzione ormai portata fino in fondo anche su due telefoni
  • L'arco completo del deposito a garanzia — due telefoni e un arbitro alla scrivania hanno derivato in modo indipendente un indirizzo 2-su-3; versare → sbloccare → autista pagato
  • Una prenotazione — proprietario e ospite versano ciascuno la garanzia, il pot confermato dalla scansione dell'ospite stesso, divisione proposta, firmata, entrambe le parti integre; è ripresa invece di ricominciare quando a metà strada un nodo Monero è andato in timeout
  • Conto aperto da telefono a desktop, dalla fattura alla ricevuta; dieci attacchi respinti
  • Un telefono azzerato del tutto è stato accompagnato per la configurazione: primo biglietto, primo pagamento, una vendita da chiosco pagata da capo a fondo — poi azzerato di nuovo e ripristinato dal proprio backup
  • Ogni binario di deposito passato dall'interfaccia in un solo giorno — una vendita al mercato, una chiamata al volo con la posizione dal vivo che attraversa i telefoni, un noleggio di attrezzatura, e un incarico di aiuto la cui prima esecuzione ha fatto emergere e corretto una vera corsa critica
  • Lo strato della fiducia, percorso anziché argomentato — una bruciatura provata e verificata in 12 s contro il nodo di uno sconosciuto, una ricevuta valutata pesata correttamente a zero, quattro desktop che concludono «2 dei tuoi contatti li conoscono», e un biglietto di chiamata senza nome a cui hanno dato un nome i dati condivisi subito dopo
Dichiarato, non sepolto
  • Nessuna revisione da parte di chi è fuori dal progetto — il §2.5 è l'argomento del perché questo conti; una passata interna su cinque superfici d'attacco ha trovato una quarantina di cose e ne ha corrette la maggior parte, che è cosa minore
  • Nessun implementatore che non abbia mai letto core/
  • NFC verificato in compilazione, mai provato sul campo fra due telefoni — e il tocco mai misurato su un cellulare
  • Latenze misurate su un desktop con un nodo collegato, non su un telefono a batteria
  • Due radio, due batterie, due orologi indipendenti — la giornata sul campo è ancora dovuta
  • Il desktop non ha un secondo fattore — nessun blocco del dispositivo e nessun segreto proprio, quindi il controllo che il telefono impone prima di ogni spesa lì non può girare
!

Pre-alfa. Stagenet. Non per denaro vero.

Ogni build è firmata in debug e regola sullo stagenet di Monero — monete senza valore, per scelta. La specifica è la bozza 1.1.0-dev13 e dice di sé: nulla qui è definitivo, e il §14 è la vera agenda. Provala, rompila, leggila — solo non finanziarla.

La specifica è il prodotto.
Tutto il resto la tiene onesta.

ducat-protocol.md è l'artefatto principale — cinque parti, un registro delle modifiche in testa, e una suite di conformità che una seconda implementazione esegue, così il documento non può allontanarsi dal codice in silenzio.

★ ducat-protocol.md   la specifica — bozza 1.1.0-dev13, modifiche in testa
  core/               implementazione di riferimento (Rust)
  vectors/            406 casi di conformità + schema
  conformance/        quattro verificatori, a ogni push
  harness/            end-to-end su rotte Veilid reali
  sim/                simulatore offline, scenari di mercato
  applications/       android/ + desktop/ (stesse sorgenti)
  mobile/             il ponte Rust: portafoglio · casella · nodo
  research/           prove, non prodotto

Quattro verificatori, a ogni push

  • Ogni vettore validato contro schema.json
  • Una seconda implementazione esegue tutti i 406 e deve concordare
  • Il documento verificato contro il codice — ha già scovato una sezione normativa citata tre volte e mai scritta, un intervallo di valori che il registro non dichiarava, e sei tipi di vettore che il documento non ha mai nominato
  • Nulla di importato resta non dichiarato

La responsabilità è normativa, non velleitaria: il §18.7 rende l'etica di Veilid un requisito di conformità — nessuna commissione di protocollo, nessun pagamento ai nodi, mai. Costruisci ciò che vuoi con questo codice, ma un client che monetizza il trasporto non è DUCAT.

Installalo su un telefono,
o su una scrivania

Niente da installare prima — ogni build porta con sé la propria libreria Rust e la JVM. Android sul telefono, e la stessa applicazione come finestra nativa su Linux, Windows e macOS. Non esiste una build per iOS; avrà una cartella quando se la sarà guadagnata.

🤖 Android

Browser del telefono, build più recente, nessuna pagina di release da attraversare. armeabi-v7a solo per telefoni più vecchi del 2016 circa; x86_64 è per gli emulatori.

🐧 Linux

Il .deb e l'.rpm si installano come pacchetti; l'AppImage si avvia e basta.

🪟 Windows

Non firmato — Windows avviserà alla prima apertura.

🍎 macOS

Build per Apple Silicon e Intel. Non firmate — macOS avviserà alla prima apertura.

Firmato in debug, solo stagenet — non per denaro vero.