EkuboProtocol / EkuboProtocol/wallet
Portfolio counts only token balances, so opening an LP position reads as money that vanished
- Dominant language
- Rust
- Stars
- 4
- Forks
- 2
- Avg merge
- 13h 29m
- Merged PRs (30d)
- 33
Description
Observed during a live demo of the wallet (sendmoodz stream, 2026-08-19), where a first-time user drove the wallet while narrating what they saw.
## What happened
The owner added liquidity through an agent, then opened Portfolio and read it as a loss:
> "So my portfolio went way down. I must have a liquidity position here, but it's not [showing]"
> "Is there something I do to get that?"
The money had not gone anywhere — it had moved from token balances into an LP position, and Portfolio only counts the former. The position was recoverable only by asking the agent in prose, and separately on a web page.
## Why it happens
`OwnerPortfolioSnapshot` (`src/authority.rs:111`) is a list of accounts and their token balances. `PORTFOLIO_REFRESH_INTERVAL` (`src/desktop.rs:111`) reads every network the account holds, but what it reads are balances. There is no notion of a position held inside a protocol, so any value deployed into one reads as value that left the wallet.
This is a deliberate scope decision — from the same conversation:
> "I don't want to have to have to index all the data in the world … because of that we have a relatively limited portfolio tab."
The problem is not that Portfolio lacks a DeFi indexer. It is that the screen presents an incomplete number as if it were the whole picture, and the owner has no way to tell the difference between "this moved into a position" and "this is gone."
## Suggested direction
Two options, and they are not exclusive:
1. Say what the number covers. If Portfolio is token balances only, label it that way, so a drop after deploying capital is legible instead of alarming.
2. Let positions come from the same place everything else does — an MCP server. The wallet does not need to index protocols itself if a position source can contribute rows to this screen the way an agent already answers the question in prose today.
Related: the owner's follow-up was "well this guy should tell me what it's actually at" — the agent, not a web page, is where they expected the answer to live.
Contributor guide
No contributing guide indexed for this repository
Research direction
Start with OwnerPortfolioSnapshot in src/authority.rs:111 and PORTFOLIO_REFRESH_INTERVAL in src/desktop.rs:111 to trace how token balances reach Portfolio. Clarify whether the change is a scope label or MCP-sourced position rows before implementing. Done means an LP position is no longer presented as unexplained missing value, with coverage for the chosen behavior.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- rust
- Domain
- desktop
- Issue type
- Feature
- Difficulty
- 5/5
- Estimated time
- Over a week
- Activity status
- Active
- Clarity
- Mostly clear
- Newbie friendliness
- 45/100