Skip to content

P0-3 · Saldo real de wallet del usuario (consulta Horizon directo desde frontend) #193

Description

@ericmt-98

Que esta roto

GET /account/balance devuelve el saldo de la wallet de plataforma (PLATFORM_SECRET_KEY), no la del usuario. Todos los usuarios ven el mismo numero. El keypair real del usuario (lib/keystore.ts) nunca se consulta para mostrar saldo.

Decision de implementacion

MicoPay es no-custodial. El saldo de una cuenta Stellar es informacion publica — no debe proxearse por el backend. El frontend consulta Horizon directamente con la llave publica del dispositivo:

GET https://horizon-testnet.stellar.org/accounts/<stellar_address>
→ .balances[] → filtrar por asset_code === 'MXNe' && asset_issuer === VITE_MXNE_ISSUER_ADDRESS

La llave publica ya esta disponible en el dispositivo via getPublicKey() (lib/keystore.ts).
VITE_MXNE_ISSUER_ADDRESS ya esta en .env y .env.testnet.

El backend no cambia. GET /account/balance queda deprecado.

Que construir

Un hook useWalletBalance en micopay/frontend/src/hooks/ que:

  1. Llama a getPublicKey() para obtener la direccion Stellar del dispositivo.
  2. Hace fetch a Horizon con esa direccion.
  3. Filtra el balance de MXNe usando VITE_MXNE_ISSUER_ADDRESS.
  4. Maneja el caso de cuenta no fondeada (Horizon 404) mostrando "0.00 MXNe" sin crash.
  5. Maneja el caso de Horizon inaccesible con un fallback de carga.

Reemplazar la llamada a getAccountBalance() en Home.tsx con este hook.

Archivos a tocar

Archivo Que cambia
micopay/frontend/src/hooks/useWalletBalance.ts Nuevo hook (Horizon directo)
micopay/frontend/src/pages/Home.tsx Usar useWalletBalance en lugar de getAccountBalance()

Criterio de aceptacion

  • La pantalla principal muestra el saldo MXNe real de la direccion Stellar del usuario actual.
  • Si la cuenta no esta fondeada (Horizon 404), muestra "0.00 MXNe" sin crash.
  • Si Horizon no responde, muestra un estado de carga o "--" — no un error que rompe la pantalla.
  • No se modifica ningun archivo del backend.
  • tsc --noEmit pasa sin errores.

Notas

  • No usar getAccountBalance() de services/api.ts — ese endpoint devuelve el saldo de la plataforma.
  • El asset a mostrar es MXNe. Verificar asset_code === 'MXNe' y asset_issuer === import.meta.env.VITE_MXNE_ISSUER_ADDRESS al filtrar .balances[].
  • Horizon testnet: https://horizon-testnet.stellar.org/accounts/<address>

Delivery: abre un PR que modifique los archivos listados. El maintainer revisara y mergeara.

Metadata

Metadata

Assignees

Labels

Stellar WaveEligible for Stellar Drips Wave rewardscomplexity: mediumRequiere cuenta, interceptor de tráfico, o conocimiento del protocolowave:frontendmicopay/frontend surfacewave:retailMicoPay retail mobile app work (micopay/frontend + micopay/backend)

Type

No type

Fields

No fields configured for issues without a type.

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions