saberistic Insights

Founders and engineering leaders building digital-asset products

Why empty wallets sometimes show active positions

· AmirSaber Sharifi

Users report a funded position while the wallet UI shows zero balance — a trust-breaking mismatch that is usually an architecture problem, not a single bad RPC call.

When a user sees an open position but an empty wallet balance, support tickets blame the RPC provider. Engineering often finds three different answers: the indexer, the custody service, and a direct chain read each report a different state. The UI picked one path and rendered it as truth.

This is not a cosmetic bug. In digital-asset products, balance and position are separate concepts that only align when your read model, write model, and display layer share explicit freshness rules and reconciliation.

Competing read paths

A wallet screen may call a backend portfolio API while position detail comes from an indexer or subgraph. If those systems ingest blocks at different cadences, the user sees a position opened two minutes ago against a balance snapshot from ten minutes ago.

Architecture fix: define one authoritative read surface per user-facing screen, or label derived fields with provenance and as-of timestamps. Never merge responses from unrelated services without a reconciliation step.

Custody and signing boundaries

Self-custody, MPC, and exchange-custodied assets often live behind different APIs. A position may be recorded on-chain while spendable balance sits in a pending settlement queue the UI does not query.

Treat custody tier as part of your domain model. The interface should say which layer each number comes from — especially when regulatory or insurance boundaries split assets across systems.

What to verify first

Compare block height and ingestion lag across every service feeding the wallet screen. Reproduce with a single wallet address across direct RPC, indexer, and backend API in one script.

If the mismatch disappears when you force a single source, you have a source-of-truth problem — not a networking problem.

Request architecture review