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:
- Llama a
getPublicKey() para obtener la direccion Stellar del dispositivo.
- Hace
fetch a Horizon con esa direccion.
- Filtra el balance de MXNe usando
VITE_MXNE_ISSUER_ADDRESS.
- Maneja el caso de cuenta no fondeada (Horizon 404) mostrando "0.00 MXNe" sin crash.
- 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
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.
Que esta roto
GET /account/balancedevuelve 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:
La llave publica ya esta disponible en el dispositivo via
getPublicKey()(lib/keystore.ts).VITE_MXNE_ISSUER_ADDRESSya esta en.envy.env.testnet.El backend no cambia.
GET /account/balancequeda deprecado.Que construir
Un hook
useWalletBalanceenmicopay/frontend/src/hooks/que:getPublicKey()para obtener la direccion Stellar del dispositivo.fetcha Horizon con esa direccion.VITE_MXNE_ISSUER_ADDRESS.Reemplazar la llamada a
getAccountBalance()enHome.tsxcon este hook.Archivos a tocar
micopay/frontend/src/hooks/useWalletBalance.tsmicopay/frontend/src/pages/Home.tsxuseWalletBalanceen lugar degetAccountBalance()Criterio de aceptacion
tsc --noEmitpasa sin errores.Notas
getAccountBalance()deservices/api.ts— ese endpoint devuelve el saldo de la plataforma.asset_code === 'MXNe'yasset_issuer === import.meta.env.VITE_MXNE_ISSUER_ADDRESSal filtrar.balances[].https://horizon-testnet.stellar.org/accounts/<address>