Zentto Pay
This content is not available in your language yet.
Zentto Pay es la plataforma de finanzas digitales del ecosistema Zentto: una app móvil (iOS/Android vía Capacitor) que permite a los usuarios mantener saldos en stablecoins (USDT/USDC), transferir dinero a otros usuarios de Zentto de forma instantánea y sin comisión de red, recibir depósitos on-chain desde redes EVM, retirar fondos hacia direcciones externas, participar en un mercado P2P con escrow, y gestionar su seguridad con PIN/huella local, verificación en dos pasos (2FA) y verificación KYC.
Qué es Zentto Pay
Sección titulada «Qué es Zentto Pay»Zentto Pay es una plataforma de finanzas digitales custodial en fase de desarrollo — hoy tiene todas las características operativas principales funcionando en producción, con algunos componentes de seguridad y cumplimiento todavía en hoja de ruta. No es, por sí misma, una entidad bancaria, casa de cambio ni institución financiera regulada; así lo indican sus propios Términos y Condiciones.
| Característica | Estado |
|---|---|
| Saldo custodial en stablecoins (USDT/USDC) | ✅ Producción |
| Transferencia interna instantánea P2P | ✅ Producción |
| Depósitos on-chain desde Ethereum/Polygon/BSC | ✅ Producción |
| Retiros on-chain (con 2FA obligatorio) | ✅ Producción |
| Mercado P2P con escrow + banda anti-especulación | ✅ Producción |
| KYC/AML inicial (OCR+MRZ+liveness) | ✅ Producción |
| Screening OFAC | ✅ Parcial (lista reducida; hoja de ruta: lista completa + refresco automático) |
| PIN/huella local + 2FA (TOTP) | ✅ Producción |
| Custodia con clave privada en Vault | ✅ Producción (hoja de ruta: KMS/HSM/MPC) |
Flujo del usuario
Sección titulada «Flujo del usuario»Vista no técnica del proceso. La plataforma permite a usuarios finales gestionar dinero digital sin entender blockchain — todo se abstrae en una interfaz móvil familiar.
1. Autenticación y verificación de identidad
Sección titulada «1. Autenticación y verificación de identidad»
Acceso con correo y contraseña; el candado local de la app (PIN de 4–6 dígitos o huella) protege además el acceso desde el propio teléfono.

El usuario puede activar la verificación en dos pasos (TOTP, compatible con Google Authenticator) desde la sección de Seguridad. Una vez activa, el login la exige siempre — como se ve en esta captura real, sin el código de 6 dígitos no hay acceso a la cuenta — y es obligatoria en todo caso para retirar a wallets externas.
2. Inicio y gestión de saldo
Sección titulada «2. Inicio y gestión de saldo»
Panel principal mostrando saldo total en stablecoins (USDT o USDC, actualizado en tiempo real). El saldo es custodial: lo mantiene Zentto en una dirección HD derivada del usuario, no en una wallet privada del usuario.
3. Recibir dinero
Sección titulada «3. Recibir dinero»Depósito on-chain
Sección titulada «Depósito on-chain»
El usuario toca “Recibir” y ve su dirección de depósito (una sola dirección EVM compartida entre Ethereum, Polygon y BSC). Puede enviar USDT o USDC desde cualquiera de esas tres redes. Tras N confirmaciones de blockchain, el indexer detecta la transacción, el saldo se acredita automáticamente en el ledger de Zentto y aparece en la app instantáneamente.
Transferencia P2P interna
Sección titulada «Transferencia P2P interna»
El usuario puede buscar a otro usuario de Zentto por correo, teléfono o nombre y enviarle dinero. La transferencia es instantánea (asiento doble entrada en el ledger interno), sin comisión de red.
4. Enviar dinero
Sección titulada «4. Enviar dinero»Transferencia interna
Sección titulada «Transferencia interna»
Búsqueda de contacto y especificación de monto. La transferencia se procesa en milisegundos.
Mercado P2P
Sección titulada «Mercado P2P»
Tabla con ofertas de compra/venta de otros usuarios. Cada oferta muestra la cantidad, el precio (en Bs o moneda local), y un rango de banda anti-especulación que respeta ±15% sobre el precio de referencia en tiempo real. Ejemplo en la captura: precio de mercado Bs 840.95 → rango permitido Bs 714.81–967.09.

Al publicar una oferta, el usuario especifica cantidad, precio unitario y término de pago (transferencia bancaria, Pago Móvil, C2P, etc.). Una vez publicada, la banda anti-especulación valida automáticamente que el precio esté dentro del ±15%. Los datos de cobro (número de cuenta, teléfono para Pago Móvil) se ocultan en el anuncio público; solo se revelan cuando la contraparte acepta.

Historial de ofertas publicadas y en negociación, con estado (activa, cancelada, completada).
5. Seguridad de la cuenta
Sección titulada «5. Seguridad de la cuenta»
Menú de cuenta con el estado real de verificación: Verificación KYC: Verificada y Seguridad · 2FA: Activa, además de acceso a métodos de cobro, idioma y bloqueo de la app.
6. Términos legales
Sección titulada «6. Términos legales»
Términos y Condiciones, Política de Privacidad y Aviso de Responsabilidad, accesibles desde la propia app, identificando a ZENTTO GLOBAL TECHNOLOGY, C.A. (RIF J-50849797-0) como operador.
Arquitectura
Sección titulada «Arquitectura»Componentes principales de la plataforma, capa por capa desde el cliente hasta blockchain.
Capas de Zentto Pay:
- Cliente móvil — App Ionic + Capacitor (React). Gestiona PIN/huella local, enrutamiento CSRF, JWT en httpOnly cookie. Nunca expone la clave privada del usuario.
- API Gateway — NestJS + Swagger (27 módulos de dominio). Auth, KYC, validación de transacciones, anti-especulación, anti-lavado.
- Ledger de doble entrada — Base de datos PostgreSQL. Registro único de verdad de balances. Rechaza cualquier asiento donde débitos ≠ créditos.
- Motor de custodia — Derivación HD (BIP-39). Dos ramas: depósitos de usuario + hot wallet de tesorería. Hoy la clave se inyecta desde Vault; hoja de ruta: KMS/HSM/MPC.
- Blockchain — Ethereum, Polygon, BSC mainnet. Smart contracts estándar (USDT, USDC). Retiros y depósitos son transacciones reales on-chain.
Flujo de fondos
Sección titulada «Flujo de fondos»Cómo circula el dinero a través de Zentto Pay: depósitos, retiros y transferencias internas.
Tres rutas de movimiento:
- Depósito on-chain: Usuario envía cripto real a dirección de depósito → blockchain (12 conf Ethereum, 30 Polygon, 6 BSC) → indexer detecta → ledger acredita → hot wallet barrida periódicamente.
- Retiro on-chain: Usuario solicita retiro → hold contable en ledger → 2FA obligatorio → firma desde hot wallet → blockchain → espera conf → completa o reembolsa automáticamente.
- Transferencia interna: Búsqueda de usuario → asiento doble entrada instantáneo en ledger → sin blockchain, sin comisión.
Seguridad
Sección titulada «Seguridad»La seguridad de Zentto Pay se construye en múltiples capas, priorizando la privacidad de datos de cobro en P2P y la resiliencia ante cambios de contraseña.
Autenticación y acceso
Sección titulada «Autenticación y acceso»| Componente | Implementación |
|---|---|
| Contraseña | Hash con bcrypt (rounds configurables). Nunca se transmite ni se guarda en texto plano. |
| Sesión (JWT) | Access token de 15 min + refresh token de 7 días, en cookie httpOnly + Secure — nunca en el cuerpo de la respuesta ni en localStorage. El guard de la API solo acepta la cookie, nunca un header Authorization: Bearer. |
| CSRF | Double-submit: cookie zw3_csrf + header x-csrf-token, exigidos en toda operación de escritura (POST/PUT/PATCH/DELETE). |
| 2FA (TOTP) | Activable por el usuario (compatible con Google Authenticator). Una vez activa, se exige en cada login y siempre en retiros a wallets externas — confirmado en la captura 2 de este documento. |
| Bloqueo de cuenta | 5 intentos fallidos de contraseña → bloqueo temporal de 15 minutos. |
Seguridad del dispositivo
Sección titulada «Seguridad del dispositivo»| Componente | Implementación |
|---|---|
| PIN/Huella local | PIN de 4–6 dígitos (capacitor-secure-storage-plugin) + huella (capacitor-native-biometric). Se procesan y guardan solo en el teléfono; nunca viajan al servidor. |
KYC / AML
Sección titulada «KYC / AML»| Componente | Estado |
|---|---|
| OCR + MRZ | ✅ Producción. Lectura y validación de dígitos de control del documento (MRZ), servicio propio zentto-kyc. |
| Liveness / Prueba de vida | ✅ Producción. Captura de imagen validada por un modelo de detección de vida (anti-spoofing) + comparación facial contra el documento. |
| Screening OFAC | ⚠️ Parcial. El motor de comparación (normalización de nombres, coincidencia por tokens) está implementado, pero hoy corre contra una lista de prueba muy reducida (unos pocos nombres de ejemplo), no la lista completa del Tesoro de EE. UU. Ningún hit se auto-aprueba: siempre pasa a revisión manual. Conectar la fuente de datos completa está en la hoja de ruta. |
P2P — Privacidad de datos de cobro
Sección titulada «P2P — Privacidad de datos de cobro»Ningún dato de cobro (número de cuenta, teléfono para Pago Móvil, nombre del banco) aparece en el anuncio público. Solo se revelan cuando la contraparte acepta la oferta y ambas partes están de acuerdo en proceder. Esto evita scraping y phishing de datos financieros.
Custodia de fondos
Sección titulada «Custodia de fondos»| Componente | Implementación |
|---|---|
| Derivación de direcciones | BIP-39 HD (viem), dos ramas separadas por diseño: una para direcciones de depósito por usuario, otra distinta para la wallet de tesorería que firma retiros. Nunca se mezclan. |
| Almacenamiento de clave | Hoy: inyectada desde HashiCorp Vault (AppRole) al proceso que firma. En fortalecimiento: migrar a un proveedor de custodia institucional (KMS/HSM) o firma distribuida (MPC), para que la clave nunca resida en la memoria de un único servidor. |
| Monitoreo de solvencia | ⚠️ No implementado todavía. Hoy no existe un chequeo automático que compare el pasivo del ledger (lo que se debe a usuarios) contra el saldo real en custodia on-chain — es el punto más importante de la hoja de ruta de custodia. |
Redes blockchain operadas
Sección titulada «Redes blockchain operadas»Zentto Pay soporta depósitos y retiros en tres redes EVM mainnet. La dirección de depósito de un usuario es la misma en las tres redes (compatibilidad EVM — mismo espacio de direcciones).
| Red | USDT | USDC | Confirmaciones | Estado |
|---|---|---|---|---|
| Ethereum | ✅ | ✅ | 12 | Activa (producción) |
| Polygon (Matic) | ✅ | ✅ | 30 | Activa (producción) |
| BSC (Binance Smart Chain) | ✅ | ✅ | 6 | Activa (producción) |
| Tron | ✅ | ✅ | N/A | 🔧 Cableada (código listo, deshabilitada por defecto) |
| Solana | ✅ | ✅ | N/A | 🔧 Cableada (código listo, deshabilitada por defecto) |
| Stellar | ✅ | ✅ | N/A | 🔧 Cableada (código listo, deshabilitada por defecto) |
Nota sobre redes cableadas pero deshabilitadas: Tron, Solana y Stellar tienen derivación de direcciones y custodia implementadas en código, pero están deshabilitadas por defecto en la app y API. Se activarán cuando el equipo complete las pruebas de indexación de depósitos y barrido automático de fondos en esas redes, para evitar riesgo de fondos de usuarios. Hoy se usa solo Ethereum/Polygon/BSC donde el sistema está más maduro.
Backend y módulos
Sección titulada «Backend y módulos»Backend: NestJS + PostgreSQL
El backend de Zentto Pay es una aplicación NestJS con 27 módulos de dominio:
| Módulo | Responsabilidad |
|---|---|
auth | Autenticación (password bcrypt, JWT, 2FA TOTP), cookies httpOnly, CSRF |
wallets | Derivación HD de direcciones, lectura de saldos públicos desde blockchain |
transactions | Procesamiento de transferencias (internas y on-chain), idempotencia |
deposits | Indexación de depósitos, acreditación de ledger, notificaciones |
withdrawals | Procesamiento de retiros, validación 2FA, firma, broadcasting on-chain |
kyc | Integración con zentto-kyc, OCR, MRZ, liveness, almacenamiento de resultados |
compliance | Screening OFAC, patrones de riesgo, banderas de transacción |
p2p | Mercado P2P, ofertas, escrow, banda anti-especulación, privacidad de datos |
custody | Gestión de claves privadas (Vault), firma de transacciones |
ledger | Motor de doble entrada, persistencia de balances, auditoría |
indexer | Suscripción a eventos blockchain (Ethereum, Polygon, BSC), detección de depósitos |
analytics | Métricas de uso, reportes de transacciones |
| … | 16 módulos adicionales de soporte |
API REST + Swagger
- Documentación OpenAPI generada con
@nestjs/swagger(tags: auth, wallets, transactions, compliance, analytics, health). - Kill-switch de seguridad:
DOCS_ENABLEDesfalsepor defecto en producción — el Swagger interactivo no queda expuesto públicamente salvo activación explícita. - Autenticación: solo cookie httpOnly + CSRF de doble envío. El guard de la API no acepta
Authorization: Bearerdesde el navegador/app — evita exponer el token a JavaScript.
Persistencia
- PostgreSQL. El ledger de doble entrada es la fuente de verdad del saldo (nunca un contador que se edita); todo asiento donde débitos ≠ créditos es rechazado.
Integración con servicios externos:
zentto-kyc: OCR, MRZ, liveness y comparación facial.- Vault HashiCorp: inyección de la clave de custodia al proceso que firma retiros.
- Proveedores de RPC de blockchain para lectura de saldos y difusión de transacciones en Ethereum, Polygon y BSC.
Hoja de ruta de cumplimiento
Sección titulada «Hoja de ruta de cumplimiento»Preferimos documentar el estado real del sistema, incluyendo lo que todavía estamos madurando, en vez de mostrar solo lo que ya funciona. Estos son los compromisos concretos en curso, sin fechas comprometidas todavía:
-
Lista OFAC completa con refresco automático — El mecanismo de comparación ya existe; falta conectar la fuente de datos completa del Tesoro de EE. UU. en lugar de la lista de prueba reducida actual. Ningún hit se auto-aprueba hoy ni se auto-aprobará después.
-
Firma de retiros vía KMS/HSM o custodia distribuida (MPC) — Hoy la clave de tesorería se inyecta desde Vault al proceso que firma. El objetivo es que la clave nunca resida en la memoria de un único servidor, usando un proveedor de custodia institucional.
-
Invariante de solvencia automatizado — Job periódico que verifique que la suma de saldos del ledger (lo que se debe a los usuarios) nunca supere los fondos reales en custodia on-chain. Hoy no existe este chequeo automatizado.
-
Política formal de retención y borrado de datos KYC — Definir y automatizar el tiempo de conservación de documentos e imágenes de verificación de identidad, alineado a la normativa aplicable.
-
Rate limiting a nivel de API/IP — Hoy existe bloqueo de cuenta tras intentos fallidos de login; falta un límite general por IP para mitigar abuso distribuido de la API.
-
Registro de auditoría administrativa formal — Tabla dedicada a acciones de operadores/administradores (aprobaciones KYC, arbitrajes P2P, cambios de configuración), complementando la trazabilidad que ya existe en el ledger.
Flujo del usuario (sintético)
Sección titulada «Flujo del usuario (sintético)»Resumen visual de los procesos de dinero en Zentto Pay: cómo entra (depósito), cómo se usa (transferencias) y cómo sale (retiro). Vista centrada en operaciones, sin detalles de backend.
Editable en draw.io: descarga el SVG → en draw.io: File → Import from → Device → selecciona el SVG. Cada nodo queda editable.
Flujo técnico
Sección titulada «Flujo técnico»Vista técnica para desarrolladores: capas de la arquitectura (cliente → API → ledger → custodia → blockchain), endpoints principales, servicios y almacenamiento involucrados.
Componentes principales:
| Componente | Tipo | Repo |
|---|---|---|
AuthService / TokenService | Módulo NestJS (login, 2FA, sesión) | zentto-web3/src/auth/ |
LedgerService | Módulo NestJS (doble entrada, balances) | zentto-web3/src/ledger/ |
IndexerService | Módulo NestJS (detección de depósitos on-chain) | zentto-web3/src/indexer/ |
CustodyService / SweepService | Módulo NestJS (derivación HD, barrido) | zentto-web3/src/custody/ |
WithdrawalsService | Módulo NestJS (máquina de estados de retiro) | zentto-web3/src/withdrawals/ |
KycService / AmlScreeningService | Módulo NestJS (verificación de identidad, OFAC) | zentto-web3/src/kyc/ |
| App móvil | Ionic React + Capacitor | zentto-web3-mobile/src/ |
| Vault HashiCorp | Almacén de secretos | Inyección de la clave de custodia al arrancar |
Editable en draw.io: descarga el SVG → File → Import from → Device.
Contacto: para soporte, dudas de seguridad o solicitudes regulatorias, [email protected] (privacidad de datos: [email protected]).