EkuboProtocol / EkuboProtocol/wallet

Portfolio counts only token balances, so opening an LP position reads as money that vanished

Open
#117 1 comment 0 reactions 0 assignees View on GitHub
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

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.