Noxtr Hoja de Especificaciones

Un cliente Nostr web integrado en el framework ExtFW. Resumen de funcionalidades, soporte de NIPs y comparativa con otros clientes.

Cliente Web · Arquitectura Abierta · Self-hosted
Volver a Noxtr · ExtFW Framework · Versión en inglés

¿Qué es Noxtr?

Noxtr es un cliente Nostr web integrado en el framework PHP ExtFW. Funciona como un módulo dentro de un sitio web auto-alojado, combinando el acceso al protocolo Nostr con funcionalidades del servidor como cuentas de usuario, hosting de direcciones Lightning y verificación de identidad NIP-05.

Está diseñado como una aplicación de página única sin frameworks JavaScript externos — vanilla JS con un helper DOM ligero (wquery).

Características Clave

Auto-alojado

Se ejecuta en tu propio servidor (Apache/nginx, PHP, MySQL/SQLite). Tú controlas tus datos, tu lista de relays y tus endpoints Lightning.

Cero Dependencias

Sin React, sin Vue, sin npm, sin paso de compilación. JavaScript vanilla puro en un solo archivo. Criptografía vía noble-secp256k1 y noble-ciphers.

Identidad Integrada

La verificación NIP-05 y las direcciones Lightning LNURL-pay se auto-configuran desde las cuentas de usuario del servidor.

Multi-autenticación

Soporta extensiones de navegador NIP-07, clave privada nsec, NIP-46 Nostr Connect (firma remota con QR) y modo sólo lectura con npub.

Soporte de NIPs

Posibilidades de Implementación de Nostr (NIPs) soportadas por Noxtr:

NIP-01Protocolo básico
NIP-02Lista de contactos
NIP-04DMs cifrados
NIP-05Identidad DNS
NIP-07Firmante del navegador
NIP-09Eliminación de eventos
NIP-10Hilos de respuesta
NIP-23Contenido largo
NIP-19Entidades Bech32
NIP-25Reacciones
NIP-28Canales públicos
NIP-44Cifrado versionado
NIP-46Nostr Connect
NIP-50Búsqueda
NIP-56Reportes
NIP-57Zaps Lightning
NIP-65Metadatos de relays
NIP-69₿rdenes P2P (Mostro)

Tipos de Evento (Kinds)

KindDescripciónUso
0Metadatos de perfilNombre, avatar, banner, bio, nip05, lud16
1Nota de textoContenido principal del feed, hashtags, menciones
3Lista de contactosSeguir/dejar de seguir, petnames, hints de relay
4DM cifradoAES-CBC con IV, descifrado vía NIP-07 o privkey
5EliminaciónBorrar notas propias y mensajes de canal propios (kind 42)
6RepostCompartir notas
7ReacciónLike/unlike en notas
40Crear canalCanal de chat público NIP-28
41Metadatos de canalNombre, descripción, imagen del canal
42Mensaje de canalMensajes en canales públicos (eliminación propia vía kind 5)
1984ReporteReportes de spam NIP-56
30023Artículo (NIP-23)Contenido largo: mezclado en el feed con badge “Read”, vista completa con Markdown, composición de artículos
38383Orden P2P (NIP-69)Órdenes de compraventa Bitcoin de robots Mostro. Tab P2P ₿ con listado de órdenes, explicación didáctica y flujo de compra guiado
9734Solicitud de ZapMetadatos de pago Lightning
9735Recibo de ZapConfirmación de pago desde el servidor
24133Nostr ConnectFirma remota NIP-46

Resumen de Funcionalidades

Modos de Feed

Global, Siguiendo, Seguidores, Temas (suscripciones por hashtag) y Tendencias (ranking por engagement).

Mensajes Directos

DMs cifrados con NIP-04 con hilos de conversación, caché en base de datos local y descifrado vía extensión.

Canales Públicos (NIP-28)

Crear, unirse y chatear en canales públicos. Metadatos de canal, fijar canales, enlaces de invitación y configuración exclusiva del creador. Eliminación de mensajes propios (NIP-09).

Artículos (NIP-23)

Contenido largo (kind 30023) mezclado en el feed con badge “Read” y deduplicación. Vista completa con renderizado Markdown. Compositor con campos de título, resumen, imagen y etiquetas.

Hilos (NIP-10)

Vista completa de hilos con marcadores root/reply, conteo de respuestas, orden cronológico y enlaces permanentes.

Zaps Lightning

Zaps NIP-57 con transferencias internas entre usuarios registrados y facturas externas vía BTCPay y LNURL-pay.

Integración con BTCPay Server

Infraestructura Lightning auto-alojada vía BTCPay Server. El endpoint LNURL-pay sirve facturas, crea solicitudes de pago BOLT11 y procesa recibos de zap (kind 9735) con firmas Schnorr del servidor. Los sats recibidos se acumulan en el balance del usuario para transferencias internas o retiro.

Búsqueda

Búsqueda de texto NIP-50 con fallback multi-relay. Búsqueda de perfiles con @usuario. Detección de entidades npub/note/nevent.

Suscripción a Temas

Suscríbete a hashtags (#bitcoin, #nostr, etc.) y filtra tu feed. Temas sugeridos, activación masiva, filtro de tendencias.

Favoritos y Silenciados

Guarda notas como favoritos localmente. Silencia usuarios con reporte de spam NIP-56 opcional. Gestión de silenciados en ajustes.

Manejo de Media

Imágenes embebidas (carga diferida), reproductores de vídeo, embeds de YouTube/Vimeo. Detección de dominios caídos con reintento a las 24h.

Gestión de Perfil

Editar nombre, bio, avatar, banner. NIP-05 y dirección Lightning auto-configurados desde la cuenta del servidor.

Gestión de Relays

Añadir/eliminar/activar relays. Estado de conexión en tiempo real. Reconexión con backoff exponencial. Rebalanceo de suscripciones.

₿itcoin P2P (Mostro)

Tab dedicado para comprar Bitcoin sin inter/mediarios usando el protocolo Mostro sobre Nostr. Muestra órdenes de venta (kind 38383, NIP-69) con explicación didáctica en lenguaje llano. Flujo guiado: tomar orden → DM cifrado al robot → enviar factura Lightning de cobro → recibir sats. Sin nodo Lightning propio; compatible con Phoenix, Breez, Zeus.

Tarjetas de Perfil AR

Parsea y renderiza broadcasts de perfiles de redes mesh AR (ar_profile, ar_collaboration) como tarjetas visuales con avatar, ubicación y acciones sociales.

Comparativa de Clientes

Una comparación imparcial de Noxtr frente a clientes Nostr establecidos. Cada cliente tiene fortalezas diferentes — esta tabla pretende ser factual, no promocional.

Soportado ~ Parcial No soportado n/a No aplica

General

Noxtr Damus Amethyst Primal Snort Iris Coracle Nostur
Plataforma Web iOS Android Web/iOS/Android Web Web/Multi Web (PWA) iOS/macOS
Código abierto
Auto-alojado
Sin paso de compilación n/a n/a n/a
NIPs documentados 18 ~15 60+ ~20 42 ~15 ~15 ~15

Soporte de NIPs Principales

NIP Noxtr Damus Amethyst Primal Snort Iris Coracle Nostur
01Protocolo básico
02Lista de contactos
04DMs cifrados (legacy) lectura
05Identidad DNS
07Firmante del navegador n/a n/a n/a
09Eliminación de eventos ~
10Hilos de respuesta
19Entidades Bech32
23Contenido largo (artículos)
25Reacciones
28Canales públicos
44Cifrado versionado ~
46Nostr Connect ~
50Búsqueda ~
57Zaps Lightning
65Metadatos de relays ~

Funcionalidades

Funcionalidad Noxtr Damus Amethyst Primal Snort Iris Coracle Nostur
DMs modernos (NIP-17/44) ~
Wallet integrado balance Coinos Cashu
Búsqueda de perfiles (@user)
Canales públicos (NIP-28)
Feed de tendencias
Suscripción a temas/hashtags ~ ~ ~
Hosting NIP-05 premium pago
Hosting dirección Lightning pago
Múltiples cuentas logout/login
Contenido largo (NIP-23)
Comunidades (NIP-72)
Subida de archivos (NIP-96)
Integración BTCPay Server
Compra Bitcoin P2P (Mostro) único
Renderizado de perfiles AR único
Nota de imparcialidad: Amethyst lidera el ecosistema en número de NIPs (60+). Primal ofrece la mejor experiencia de onboarding e infraestructura de búsqueda. Coracle destaca en gestión de relays. Iris fue pionero en cifrado de DMs con double ratchet. Nostur tiene la mejor integración con el ecosistema Apple. El diferenciador de Noxtr es la infraestructura de identidad auto-alojada (NIP-05 + dirección Lightning) y la arquitectura sin dependencias — no la amplitud de NIPs.

Limitaciones Conocidas (no por mucho tiempo)

Áreas donde Noxtr está por detrás de otros clientes:

Fortalezas Distintivas

₿itcoin P2P — Mostro

Noxtr incluye soporte nativo para Mostro, un protocolo de intercambio de Bitcoin entre pares (P2P) que funciona sobre Nostr. Puedes comprar o vender Bitcoin directamente con otras personas, sin inter/mediarios ni custodios, pagando con transferencia bancaria, Bizum, efectivo o cualquier otro método acordado.

El tab P2P ₿ en la barra de navegación te da acceso al order book en tiempo real con todas las ofertas disponibles.

¿Qué es Mostro? Un robot (programa automático) que actúa como árbitro de confianza entre comprador y vendedor. El robot retiene los Bitcoin del vendedor en depósito hasta que el comprador confirma haber enviado el dinero fiat, momento en que los libera automáticamente. Nadie puede robar: ni el comprador (porque los sats están bloqueados), ni el vendedor (porque el robot no los libera hasta recibir la confirmación).

Cómo comprar Bitcoin (paso a paso)

No necesitas ninguna experiencia previa con Bitcoin. Solo necesitas una wallet Lightning en el móvil (Phoenix, Breez, Zeus, Wallet of Satoshi…).

  1. Abre el tab P2P ₿ — Verás una lista de ofertas de venta con importe, moneda y método de pago.
  2. Elige una oferta que se adapte a ti (importe, método de pago) y pulsa Comprar.
  3. Introduce tu Lightning Address (ej. usuario@wallet.com) o una factura bolt11 generada desde tu wallet — ahí es donde recibirás los sats.
  4. El robot entra en acción: bloquea los Bitcoin del vendedor y te notifica cuánto debes pagar en fiat y cómo.
  5. Envía el dinero al vendedor por el método indicado (transferencia, Bizum, etc.) y pulsa Fiat enviado.
  6. El vendedor confirma que ha recibido el pago fiat y pulsa Liberar sats.
  7. ¡Listo! Los sats llegan a tu wallet Lightning. El trade aparece como completado en la ficha.

Si la wallet del vendedor o el nodo del robot no puede enrutar el pago a tu dirección, la ficha del trade mostrará un campo para introducir otra dirección Lightning alternativa. Tus sats están siempre a salvo con el robot.

Cómo vender Bitcoin

  1. Pulsa Nueva orden en el tab P2P ₿ y elige Vender BTC.
  2. Configura la oferta: importe en fiat, moneda, método de pago aceptado y tipo de importe (fijo o rango).
  3. Publica la orden. Aparecerá en el order book para que otros la tomen.
  4. Cuando alguien la toma, el robot te envía una hold invoice (factura retenida). Págala desde tu wallet Lightning — los sats quedarán bloqueados, no cobrados, hasta finalizar el trade.
  5. Da al comprador los datos de pago y espera a recibir el dinero fiat por el método acordado.
  6. Cuando llegue el dinero fiat, pulsa Liberar sats. El robot los enviará al comprador.

Importar identidad desde Mostro Mobile

Si ya usas la app Mostro Mobile, puedes importar tu identidad en Noxtr sin crear una cuenta nueva:

  1. En la pantalla de login de Noxtr, pulsa 📲 Mostro Mobile.
  2. Introduce tus 12 palabras semilla (la misma frase que usas en Mostro Mobile).
  3. Noxtr derivará tu clave privada Nostr usando el mismo estándar que Mostro Mobile (BIP39 + BIP32, ruta m/44'/1237'/38383'/0/0).
  4. Tus trades activos se recuperarán automáticamente enviando un mensaje restore al robot.

Los trades terminados (cancelados o completados) no se recuperan porque el robot no los rastrea. El historial pasado solo está disponible si las 12 palabras y la interfaz son las mismas que iniciaron esos trades.

Reputación y valoraciones

Al completar un trade puedes valorar a la contraparte de 1 a 5 estrellas. Las valoraciones recibidas aparecen en tu ficha de reputación (⭐ promedio · número de trades). Los robots Mostro publican la reputación acumulada de cada usuario en sus órdenes del order book.

Para administradores — Mostro P2P

Relay obligatorio

Para enviar mensajes al robot es necesario que wss://relay.mostro.network esté activo en la lista de relays del usuario. El order book funciona con cualquier relay general, pero la comunicación con el robot requiere ese relay específico. Noxtr lo añade automáticamente como relay por defecto en las nuevas instalaciones.

Sin nodo Lightning propio

Noxtr no requiere que el servidor tenga un nodo Lightning para el flujo Mostro. La wallet Lightning es del usuario final (Phoenix, Breez, Zeus, etc.). BTCPay Server solo es necesario para el sistema de zaps y direcciones Lightning de perfil, no para Mostro.

Datos almacenados

Los trades activos se guardan en NSTR_MOSTRO_TRADES y los eventos Mostro en NSTR_MOSTRO_EVENTS. Ambas tablas se crean automáticamente. Los datos de reputación se calculan a partir de NSTR_MOSTRO_EVENTS sin tabla adicional.

Auto-take (opcional)

El Monitor del servidor puede configurarse para tomar órdenes automáticamente cuando coincidan con reglas predefinidas (importe, moneda, antigüedad del robot). Ver sección Monitor más abajo.

Monitor del Servidor — Notificaciones y Auto-take

El Monitor es un proceso PHP que corre en el servidor en segundo plano y vigila los trades Mostro activos aunque ningún usuario tenga la web abierta. Escucha los relays Nostr continuamente y actúa cuando recibe eventos relevantes.

Para usuarios — ¿Qué hace el Monitor por ti?

Si el administrador del sitio tiene el Monitor activo, recibirás avisos automáticos cuando ocurra algo en tus trades:

EventoNotificación recibida
Alguien toma tu orden publicadaEmail: “Han tomado tu orden #XXXXXXXX”
El robot te pide pagar la hold invoice (vendes BTC)Email: “Debes pagar la hold invoice”
El comprador confirma que envió el fiat (vendes BTC)Email: “El comprador ha enviado el pago”
El trade se completaEmail: “Trade completado”
Mensaje privado nuevo en tu buzónTelegram (si tienes el bot vinculado)

Cada notificación se envía una sola vez por trade y tipo de evento — no hay spam.

Vincular Telegram para recibir avisos

  1. Ve a la sección Telegram de la web.
  2. Pulsa Vincular Telegram.
  3. Desde el móvil: pulsa el enlace “Abrir bot en Telegram” — se abre directamente el chat del bot y basta con pulsar Iniciar.
  4. Desde el ordenador: copia el comando /start CODIGO que aparece en pantalla y pégalo en el chat del bot en Telegram.
  5. El bot confirmará la vinculación. A partir de ese momento recibirás avisos de mensajes privados nuevos en Noxtr.

Para administradores — Arrancar y parar el Monitor

El Monitor se gestiona desde el panel de administración web (/noxtr/server_admin) con los botones Start / Stop / Status, o directamente desde la consola del servidor:

php /ruta/index.php noxtr/server/action=monitor --verbose

Para dejarlo corriendo en background:

nohup php /ruta/index.php noxtr/server/action=monitor > /var/log/monitor.log 2>&1 &

Para administradores — Comandos de control por DM Nostr

El Monitor tiene su propia identidad Nostr. Los administradores autorizados pueden enviarle DMs con comandos de texto plano desde cualquier cliente Nostr (incluyendo Noxtr). Su npub aparece en el mensaje de arranque y en el panel web.

ComandoAcción
pingComprueba que el canal responde. Devuelve pong.
statusVersión, trades vigilados, filtros activos, uptime, relays.
tradesOrder book en tiempo real (opciones: age 4h, amount 50 EUR, status pending).
relaysRelays conectados en la sesión actual.
filter_trade listReglas de auto-take activas.
filter_trade amount 50 EURAñade regla: tomar órdenes de exactamente 50 EUR.
filter_trade days 0Añade regla: tomar órdenes de robots con 0 días de antigüedad.
filter_trade remove amount 50Elimina la regla de 50 EUR.
filter_trade clearElimina todas las reglas de auto-take.
emailEnvía un email de prueba al admin.
reloadReconecta a los relays sin reiniciar el proceso.
stopPara el proceso limpiamente.
helpAyuda contextual completa.

Para administradores — Notificaciones de nuevas órdenes

Además de vigilar trades propios, el Monitor notifica al administrador cada nueva orden que aparece en el order book Mostro:

Para recibir notificaciones de nuevas órdenes por Telegram, el administrador debe tener el bot vinculado y su pubkey Nostr añadida a admin_pubkeys en la configuración del Monitor.

Para administradores — Auto-take

El Monitor puede tomar órdenes automáticamente cuando coincidan con reglas configuradas. Es útil para situaciones como “tomar siempre órdenes de robots de 0 días” o “tomar siempre órdenes de exactamente 88 EUR”.

El auto-take es efímero: el Monitor genera un keypair temporal, toma la orden y notifica al admin, pero no crea un trade persistente en la base de datos. El seguimiento posterior del trade debe hacerse manualmente desde otro cliente Mostro.

Seguridad del canal de control: Solo los administradores con pubkey en admin_pubkeys pueden enviar comandos. Los eventos se verifican criptográficamente con firma Schnorr. Los comandos con más de 5 minutos de antigüedad se ignoran automáticamente.

Arquitectura Técnica

ComponenteTecnología
FrontendJavaScript vanilla (IIFE único), helper DOM wquery
BackendPHP (módulo del framework ExtFW)
Base de datosMySQL o SQLite (SQL dual-compatible)
Servidor webApache (mod_rewrite) o nginx
Criptografíanoble-secp256k1 (BIP-340 Schnorr), noble-ciphers (XChaCha20-Poly1305), Web Crypto API (AES-CBC, HKDF)
LightningBTCPay Server (LNURL-pay, facturas BOLT11)
AlmacenamientoBD del servidor (contactos, temas, favoritos, DMs, relays, silenciados, canales) + localStorage/IndexedDB (claves, estado UI)