El maneki-neko de DUCAT, sosteniendo una moneda Monero
comercio de proximidad entre pares · especificación borrador 1.1.0-dev13

DUCAT

Veilid para el transporte. Monero para la liquidación. Ningún operador en medio.

No hay ningún servidor de DUCAT en ninguna parte — los contactos, mensajes, facturas y recibos son registros en la DHT y cargas selladas de extremo a extremo, y cada teléfono ejecuta un nodo Veilid completo, devolviendo el enrutamiento y el almacenamiento que consume.

0 vectores de conformidad 0 modos de operación 0 idiomas 0 servidores

Firmado en depuración, solo stagenet. Todavía no es para dinero real.

Apoyado en

Comercio sin nadie en medio

Un ducado fue una moneda de oro aceptada desde Venecia hasta Viena y el Levante durante seis siglos — sin relación con un emisor, sin una cuenta detrás, sin permiso de por medio. DUCAT es eso, para cuando estás frente a alguien haciendo negocios.

🐱

Ningún servidor en ninguna parte

Contactos, facturas, pagos y recibos viajan como cargas selladas de extremo a extremo sobre la DHT de Veilid. No hay nada que citar judicialmente, limitar, desplataformar ni apagar, porque no hay nada en marcha. Cada teléfono es un nodo completo y devuelve el enrutamiento y el almacenamiento que consume.

🔑

La identidad es un par de claves

Creada en el teléfono. Sin correo, sin número de teléfono, sin nadie con quien registrarse — razón por la cual tampoco nadie puede restaurártela, y la app lo dice en voz alta en lugar de enterrarlo.

🎫

Tarjetas de un solo uso

Le das a alguien una tarjeta — QR, enlace ducat: o un toque NFC — y sirve para una sola persona. Una vez reclamada deja de funcionar, así que una captura de pantalla que acabe en otro sitio no es una vía de entrada.

🔒

Conversaciones selladas

Cifrado con forma de X3DH, con preclaves de un solo uso y secreto hacia adelante. Cuando la app tiene que recurrir a la preclave firmada, te muestra un candado abierto en lugar de ocultarlo.

💬

Conversaciones que llevan dinero

Hilos basados en buzón que funcionan aunque una de las partes esté desconectada — llevan facturas detalladas cuyas líneas deben sumar su total o el mensaje se rechaza, pagos, y recibos emitidos por quien cobra que apuntan a la transacción que reconocen. Los grupos pequeños se reparten en esos mismos hilos por pares: sin clave de grupo, sin registro compartido, con todas las propiedades del hilo intactas.

Seis pasos, sin cuenta,
alrededor de un minuto

Cada captura de esta página es la app funcionando en un teléfono, no una maqueta. Nada de esto te pide registrarte, porque no hay nadie con quien registrarse.

Paso 1 de 6: crea tu identidad — un par de claves hecho en este teléfono, sin cuenta
1 · Identidad — un par de claves, no un registro
Paso 4 de 6: elige un PIN, con el aviso de que no hay forma de restablecerlo dicho claramente
4 · Un PIN — y ninguna forma de restablecerlo, dicho claramente
Paso 5 de 6: cómo confían los desconocidos entre sí — ambas partes ponen garantía, terminar la devuelve
5 · Confianza — explicada antes de tu primer trato
Paso 6 de 6: la copia de seguridad, que honestamente aún no lo es hasta que sale del teléfono
6 · Copia de seguridad — «aún no es una copia» hasta que sale del teléfono

Tu identidad es un par de claves creado en el dispositivo — sin correo, sin número de teléfono, sin nadie con quien registrarse, razón por la cual tampoco nadie puede restaurártela. El último paso es la copia de seguridad, porque una billetera que no puedes restaurar es la única forma en que aquí alguien pierde dinero de verdad.

Dinero que es tuyo

Una billetera Monero autocustodiada con conversión a moneda local en todo momento, escaneada y gastada por un motor monero-oxide integrado — sin ningún demonio de billetera en el teléfono.

Inicio personal: saldo en XMR y moneda local, estado de sincronización, contador de notas gastables, mosaicos de modo y movimientos recientes
El saldo y las notas que hay detrás
Pagar o solicitar: importe en moneda local o XMR, aritmética de comisiones, lo que queda después
Toda la aritmética antes de confirmar
El extracto: saldo acumulado, búsqueda de recibos, exportación a CSV
Un extracto reconstruido desde la cadena
Elegir a quién pagar: contactos con sus huellas de clave
A quién le pagas, por huella de clave

Al pagar se muestra el importe, la comisión de red estimada, el total, lo que te queda después, cuántas notas gasta y aproximadamente cuánto tardará — y te deja elegir la velocidad. El historial se reconstruye desde la cadena: los envíos se identifican por imagen de clave, el cambio nunca aparece como ingreso, cada fila lleva el saldo acumulado, y todo el extracto se exporta como CSV.

Monero gasta notas discretas en lugar de un saldo, así que una billetera con una nota grande puede no poder pagar dos veces seguidas. La app cuenta las notas que puede gastar y te dice que partas una antes de que estés en el mostrador, en lugar de fallar allí.

Conversaciones que llevan dinero

Un contacto es un par de claves, no un identificador. Un escaneo abre una conversación basada en buzón que funciona aunque una de las partes esté desconectada — y esos hilos llevan comercio, no solo texto.

Tu tarjeta: un QR de un solo uso que abre una conversación, válido para una persona
Tu tarjeta — sirve para una persona
Una conversación que lleva dinero: factura detallada con línea de impuestos, el recibo, un aviso de depósito liquidado
Factura, pago y recibo — en el hilo
Un grupo de tres en un tablón compartido: un registro por generación, una pregunta y su respuesta desde otro teléfono
Grupos — un registro compartido por generación
Buscar lo que la gente dijo, con las coincidencias de nombre por delante de las de mensajes
Busca lo que la gente dijo realmente

Le das a alguien una tarjeta — por QR, enlace ducat: o un toque NFC — y sirve para una sola persona: una vez reclamada deja de funcionar, así que una captura que acabe en otro sitio no es una vía de entrada.

Un grupo es una lista que solo crece, y sus palabras viajan en un único registro de tablón por generación (§16.24): cada miembro escribe sus propias páginas bajo una clave de grupo que la lista lleva consigo, así que un mensaje para cinco personas es una escritura en vez de cinco, y la red no puede distinguir ese registro de ningún otro. Nadie puede hacerse pasar por otro, y salirse es local. Un grupo puede repartir una cuenta: un total se convierte en una petición individual a cada persona más una frase con la que todos pueden comprobar la aritmética, y cada petición pasa a pagada en cuanto llega su referencia.

Tu teléfono es todo el negocio

Elige uno de nueve modos y la app entera se transforma — con sus propias pestañas, nada de las de la billetera. Casi nada de esto necesitó un objeto de protocolo nuevo, que es la frase de la que más se enorgullece la especificación.

Modos de operación: personal, punto de venta, cuenta de bar, taxi, donaciones, mercado, alquiler, contratar ayuda, quiosco
Nueve modos, un protocolo
Punto de venta: artículos registrados con una línea de impuesto calculada
Punto de venta — con el impuesto calculado
Un código para que la clientela escanee; la factura detallada llega a su teléfono
Un código — la factura llega al escanear
Cuentas de bar: abiertas, facturadas y en espera, cerradas con una sola factura
Cuentas de bar — se saldan desde el autobús de vuelta
Modo quiosco, lado de la clientela: toca lo que quieras, el impuesto se muestra antes de confirmar
Quiosco — la clientela pide por sí misma
Panel del personal del quiosco tras un PIN: pedidos, menú y el tipo impositivo
Panel del personal tras un PIN
Un código de donación permanente, con su coste de vinculabilidad dicho en pantalla
Donaciones — con el coste nombrado

Un punto de venta registra artículos o acepta un total escrito a mano, calcula el impuesto sobre las ventas de su región y muestra un código; la factura llega al teléfono de la clientela en cuanto lo escanea, y un recibo vuelve cuando paga. Una cuenta de bar avisa de cada consumición y se cierra con una sola factura. Un quiosco entrega el teléfono por completo a la clientela, con un panel del personal tras un PIN. Una caja de donaciones ofrece las dos vías: un código DUCAT que abre una conversación y envía un recibo en cuanto llega el dinero, y una dirección permanente a la que puede dar cualquier billetera Monero, con su coste de vinculabilidad dicho en la pantalla y no en una política.

Un viaje que nadie despacha

Escribe adónde vas. Tu teléfono convierte una posición GPS en una geocelda — un tablón público cuya dirección es el lugar mismo — y publica una petición: una tarjeta de un solo uso, una zona aproximada y una oferta calculada desde la ruta real. Ningún nombre llega al tablón — ni en la tarjeta ni en el registro que hay detrás. Quienes conducen vigilan su celda y las vecinas y la aceptan; la DHT arbitra la carrera, y no existe ningún intermediario.

La línea verde es lo importante: las tarifas de DUCAT quedan un 15 % por debajo de lo que cobra una plataforma de viajes al pasajero, y quien conduce se queda con todo — la comisión ausente, devuelta a ambos. La aceptación llega con una cara: nombre, coche, color, placa y hora de llegada — sellada hacia el pasajero, sin aparecer nunca en el tablón. Tu propio nombre y el portal en el que esperas van en sentido contrario en ese mismo instante, al único conductor que la aceptó.

Una concesión, dicha claramente en pantalla: la búsqueda de direcciones, el enrutamiento y los mosaicos del mapa consultan OpenStreetMap — el único punto donde DUCAT envía la ubicación fuera del dispositivo. Los tablones nunca llevan mejor precisión que ~1,2 km.

Pedir un viaje: ruta, distancia, tiempo y la tarifa frente a lo que cobraría una plataforma
La petición, comparada con la plataforma
El taxímetro: tarifa escrita una vez, un código de recogida, las condiciones llegan al chat al empezar
El taxímetro, con las condiciones en el hilo

Véndelo, alquílalo u ofrece una hora de tu tiempo

La misma maquinaria de tablones lleva algo más que viajes. Un anuncio del mercado, un alquiler o una hora de ayuda cualificada se publican en un tablón cuya dirección es el barrio, y alguien desconocido que esté cerca lo lee sin que ninguno de los dos toque una plataforma.

Los anuncios viven en tablones más gruesos que las peticiones — unos cinco kilómetros de ancho, porque la gente se desplaza para recoger unas llaves. La búsqueda lee tu tablón y el anillo que lo rodea, y va dibujando resultados según responden, de modo que algo aparcado cerca aparece en pantalla en menos de seis segundos, mientras que «no hay nada por aquí» tarda unos cuarenta e indica las zonas que va descartando.

Explorar el mercado: un anuncio encontrado en el tablón, con precio, garantías y un botón para preguntar
Mercado
Explorar ayuda: una habilidad ofrecida cerca, con precio por hora
Contratar ayuda
Anunciar un vehículo en alquiler: la mitad pública que va al tablón
La mitad pública — lo que el tablón puede leer
Solo para quien reserve: la dirección y los detalles de entrega nunca van al tablón
La mitad privada — nunca en el tablón
Encontrar equipo cerca: un anuncio activo con precio por día y la garantía
Encontrarlo — precio, garantía y una forma de preguntar

El formulario del anuncio está partido en dos y la app te dice cuál es cuál: todo lo de la primera parte va a un tablón público que cualquiera cerca puede leer, y la dirección, dónde están las llaves y la matrícula van en la segunda, que no sale de tu teléfono hasta que hay una reserva real.

Un hogar, un feed
y un estante propio

Los registros que llevan una factura llevan igual de bien una página. Tu clave ya es una dirección, así que lo que escribes tiene dónde vivir sin pedirle sitio a nadie.

El Feed: publicaciones de la gente que conservas, y tu propio hogar
El feed — publicaciones de la gente que conservas
La Biblioteca: números archivados por editor, guardados fuera en vez de abiertos
La biblioteca — números archivados por editor
Mundial: publicaciones en tablones por tema, con «Todo» leyendo cada estante a la vez
Mundial — tablones por tema, todos los estantes a la vez
Un anuncio abierto: las fotos de su paquete, la descripción de quien vende, el precio que escribió junto a la conversión de hoy
Un anuncio abierto — sus fotos y el precio que escribieron

El hogar de un perfil está en la dirección que nombra su propia clave, y el feed es la cronología de la gente que conservas — una publicación puede llevar una foto y un archivo, y los corazones vuelven. Los sitios los sirve desde su disco quien los publicó y se abren en una sala sellada, de modo que leer uno no trae nada de ningún otro sitio.

Las publicaciones — un periódico, una serie, un programa — se venden mundialmente en tablones por tema en lugar de por barrio: una entrada aparece en el tablón del tema y también en el de su idioma, y «Todo» lee los seis estantes a la vez. Un anuncio trae su paquete desde el teléfono de quien vende — hasta 24 fotos a tamaño completo, una descripción, especificaciones y archivos adjuntos — y se rechaza entero ante cualquier clave que no nombre, para que un documento malo no pueda esconder fotos buenas.

Ambos ponéis una garantía.
Terminar os la devuelve.

No hay ninguna empresa en medio que pueda tomar partido, así que DUCAT hace algo más sencillo. El dinero queda en una dirección que solo vosotros dos podéis abrir, y la liberación devuelve a cada parte su propia garantía, nombrada. Nadie puede quedarse con una garantía — nosotros incluidos, porque no hay ningún nosotros a quien pagar.

~10 % un viaje corto, poca exposición a daños
~20 % un alojamiento las llaves de la casa de alguien
~30 % un vehículo el daño puede superar el precio

Esas cifras están argumentadas, no adivinadas — el modelo 2-de-2 sin custodio de Bisq es el precedente en funcionamiento más cercano, y la literatura sobre doble depósito demuestra que el arreglo es a prueba de trampas en equilibrio. De ahí salen dos límites: una garantía que vale menos que la comisión de devolverla se vuelve cero en lugar de adorno, y ninguna supera la mitad del precio. La parte más expuesta deposita en segundo lugar, para que su dinero nunca esté solo en una dirección compartida.

⅔

Depósito en garantía sin ninguna empresa detrás

Cuando un trato pide más que una fianza: pasajero, conductora y un contacto árbitro de confianza mutua ejecutan una generación distribuida de claves sobre el hilo sellado — tres dispositivos derivan una dirección Monero, cada uno con solo una parte, dos cualesquiera pueden firmar, y no hay repartidor en ningún sitio. El camino feliz son dos toques.

Cualquier otra cosa es un acuerdo: una parte propone un reparto, la otra firma o contraofrece. Quien se queda atrapado acude al árbitro, cuya cofirma es el fallo — un árbitro comprometido puede, como mucho, elegir entre las partes nombradas, nunca pagarse a sí mismo. Demostrado en cadena sobre stagenet en todas sus formas, incluida una liberación FROST con dos entradas.

∅

Lo que costó un nombre

Antes de que haya trato hay un desconocido, y la pregunta es qué le costó su nombre. Una persona puede quemar Monero — enviarlo a una dirección de la que nadie tiene las claves, derivada de un hash que cualquiera puede recalcular — y llevar consigo la propia prueba de pago de Monero. Tu cliente comprueba esa prueba contra su propio nodo, pregunta a un segundo nodo si la transacción está en un bloque y, desde entonces, muestra a esa persona con palabras allí donde decides algo: quemó 0,01 XMR, desde el bloque N. Nunca una puntuación. La regla que importa es el aviso: cuando lo que vas a arriesgar vale más que lo que quemaron, la app lo dice, porque un nombre que no costó nada no pierde nada al desaparecer.

Tras un trato cerrado, cualquiera de las partes puede firmar un recibo valorado, y quien te haya conocido en persona puede firmar un aval. Ambos viajan por un hilo sellado y a ambos los pondera solo quien los lee — una voz por firmante, contando solo a los firmantes cuya quema hayas comprobado, y contando un aval solo de gente que ya está en tus contactos. Un salto, sin grafo, sin publicar nada en ninguna parte. Reputación que cuesta dinero en lugar de privacidad.

Y se comporta como una app

Una herramienta de privacidad que resulta desagradable de usar se usa una sola vez. Esta nombra lo que las cosas te cuestan, habla veinte idiomas y tiene un tema oscuro que no es una ocurrencia tardía.

Perfil: el coste de vinculabilidad de dejar que los contactos te paguen directamente, dicho donde se elige
Costes nombrados en el momento de elegir
La misma pantalla de inicio en el tema oscuro Mocha
Mocha — el tema oscuro, bien hecho
La misma pantalla de inicio en árabe: un espejo completo de derecha a izquierda con números arábigos orientales
Árabe — un espejo completo de derecha a izquierda
La mitad de negocio de los ajustes: región de tarifas, tipo impositivo, privacidad, copia de seguridad
La mitad de negocio de los ajustes

La comodidad tiene un precio en un sistema de privacidad, y la app lo nombra en el momento en que eliges, no en una política que nadie lee. Dejar que tus contactos te paguen directamente significa reutilizar una dirección — así que dice que cualquiera que observe la cadena puede ver que se pagó a la misma persona cada vez, incluida gente que solo te pagó una vez, y señala la alternativa. La misma costumbre recorre todo: una aparición en la mempool se muestra como vista, nunca liquidada; un perfil se presenta siempre como la afirmación que es.

Habla veinte idiomas — cada pantalla lee de recursos, los plurales se componen en lugar de concatenarse, y el árabe y el farsi demuestran el espejo. Los recibos son registros, no mensajes: cada recibo vive en su propio almacén, sobrevive al borrado del hilo y del contacto, y viaja en la copia de seguridad cifrada — que lleva a las personas tanto como el dinero.

La misma aplicación en un escritorio

Una ventana nativa sobre el mismo Rust que ejecuta el teléfono — así la caja de un comercio, un quiosco, la sala de prensa, el mercado y el feed son una implementación, no una adaptación.

La página de Chat del escritorio: grupos en tablones sobre los hilos por pares, con un panel de conversación
Chat — grupos en tablones, sobre los hilos por pares
La caja del escritorio: una venta registrada y cuentas de bar
La caja — una venta registrada y las cuentas de bar
La página de Mercado del escritorio: anuncios cerca de una celda con sus miniaturas
El mercado — anuncios cerca de una celda, con miniaturas
La página de Estado del escritorio: el nodo, su tabla de rutas, Reconectar, el registro
Estado — el nodo, su tabla de rutas, Reconectar

Habla los veinte idiomas del teléfono desde los mismos recursos, y está probada contra el teléfono en cada rito: chat, grupos en tablones, facturas y recibos, un pedido de quiosco pagado desde un teléfono que nunca se había encontrado con el escritorio, archivos y sitios servidos y traídos, y llamadas con sonido de verdad.

Qué está probado y qué no

El README lleva un registro de lo que realmente ha funcionado de extremo a extremo en la red real y en el stagenet real — y enuncia las carencias en lugar de enterrarlas.

Demostrado de extremo a extremo
  • Dos viajes completos despachados teléfono↔escritorio — de la petición por geocelda a la liquidación en cadena, propina y recibo — y el viaje con garantía llevado ya hasta el final entre dos teléfonos
  • El arco completo del depósito en garantía — dos teléfonos y un árbitro de escritorio derivaron una dirección 2-de-3 de forma independiente; financiar → liberar → conductora cobrada
  • Una reserva — propietario y huésped aportando cada uno su garantía, el bote confirmado por el propio escaneo del huésped, reparto propuesto, firmado, ambas partes enteras; se reanudó en vez de empezar de nuevo cuando a mitad de camino se agotó el tiempo de un nodo Monero
  • Cuenta de bar de teléfono a escritorio, de la factura al recibo; diez ataques rechazados
  • Un teléfono borrado del todo recorrió la configuración: primera tarjeta, primer pago, una venta de quiosco pagada de principio a fin — y después se borró otra vez y se restauró desde su propia copia
  • Todas las vías de depósito por la interfaz en un solo día — una venta de mercado, un viaje pedido en la calle con la posición en directo cruzando entre teléfonos, un alquiler de equipo, y un encargo de ayuda cuya primera ejecución sacó a la luz y corrigió una condición de carrera real
  • La capa de confianza, recorrida en vez de argumentada — una quema probada y comprobada contra el propio nodo de un desconocido en 12 s, un recibo valorado ponderado correctamente a cero, cuatro escritorios concluyendo «2 de tus contactos los conocen», y una tarjeta de petición sin nombre a la que dieron nombre los datos compartidos justo después
Dicho, no enterrado
  • Sin revisión de nadie de fuera del proyecto — §2.5 es el argumento de por qué eso importa; una pasada interna por cinco superficies de ataque encontró cuarenta y tantas cosas y arregló la mayoría, que es algo menor
  • Sin ningún implementador que nunca haya leído core/
  • NFC verificado en compilación, nunca probado en campo entre dos teléfonos — y el toque nunca medido en un móvil
  • Cifras de latencia medidas en un escritorio con un nodo conectado, no en un móvil con batería
  • Dos radios, dos baterías, dos relojes independientes — la jornada de campo sigue pendiente
  • El escritorio no tiene segundo factor — ni bloqueo de dispositivo ni secreto propio, así que el control que el teléfono impone antes de que salga dinero no puede correr ahí
!

Pre-alfa. Stagenet. No es para dinero real.

Cada compilación está firmada en depuración y liquida en el stagenet de Monero — monedas sin valor, por diseño. La especificación es el borrador 1.1.0-dev13 y dice de sí misma: nada aquí es definitivo, y el §14 es la agenda de verdad. Pruébala, rómpela, léela — pero no la financies.

La especificación es el producto.
Todo lo demás la mantiene honesta.

ducat-protocol.md es el artefacto principal — cinco partes, un registro de cambios al principio, y un conjunto de conformidad que ejecuta una segunda implementación para que el documento no pueda alejarse del código en silencio.

★ ducat-protocol.md   la especificación — borrador 1.1.0-dev13, cambios primero
  core/               implementación de referencia (Rust)
  vectors/            406 casos de conformidad + esquema
  conformance/        cuatro verificadores, en cada push
  harness/            de extremo a extremo sobre rutas Veilid reales
  sim/                simulador sin conexión, escenarios de mercado
  applications/       android/ + desktop/ (mismas fuentes)
  mobile/             el puente Rust: billetera · buzón · nodo
  research/           pruebas, no producto

Cuatro verificadores, en cada push

  • Cada vector validado contra schema.json
  • Una segunda implementación ejecuta los 406 y debe coincidir
  • El documento auditado contra el código — así se detectó una sección normativa referenciada tres veces y jamás escrita, un rango de valores que el registro no declaraba, y seis tipos de vector que el documento nunca nombró
  • Nada de lo importado queda sin declarar

La custodia es normativa, no aspiracional: el §18.7 convierte la ética de Veilid en un requisito de conformidad — sin comisiones de protocolo, sin pago a los nodos, nunca. Construye lo que quieras con este código, pero un cliente que monetiza el transporte no es DUCAT.

Instálalo en un teléfono,
o en un escritorio

Nada que instalar antes: cada compilación lleva su propia biblioteca de Rust y su JVM. Android en el teléfono, y la misma aplicación como ventana nativa en Linux, Windows y macOS. No hay compilación para iOS; tendrá su carpeta cuando se la gane.

🤖 Android

Navegador del teléfono, compilación más reciente, sin página de versiones que recorrer. armeabi-v7a solo para teléfonos anteriores a 2016 aproximadamente; x86_64 es para emuladores.

🐧 Linux

El .deb y el .rpm se instalan como paquetes; el AppImage simplemente se ejecuta.

🪟 Windows

Sin firmar — Windows avisará al abrirlo por primera vez.

🍎 macOS

Compilaciones para Apple Silicon e Intel. Sin firmar — macOS avisará al abrirlo por primera vez.

Firmado en depuración, solo stagenet — no es para dinero real.