Portfolio¶
Address-centric mini-app that unifies an address's presence across Circles, Gnosis Pay, Safe, DeFi, and yields.
What it is¶
Portfolio gives a single address a five-section profile:
- Overview — summary card with role flags (is_safe, is_gpay_wallet, is_circles_avatar, …).
- Relationships — graph-like neighborhood (Safe owners, GPay owner events, trust relations).
- Yields — active LP and lending positions.
- GPay — Gnosis Pay Safe events, modules, spender history.
- Circles — avatar profile, trust relations, CRC balances, wrappers.
Resource URI: ui://cerebro/portfolio. Built on int_execution_address_roles_current (the same auto-detection Graph Explorer uses).
When to use it¶
- Investigating a specific address: "who is
0xabc…and what do they do on-chain?" - Verifying multisig ownership before a security review.
- Triaging a customer support ticket where the user supplied an address.
- Composing reports about specific accounts (validators, treasury, partner addresses).
Step-by-step tutorial¶
1. Open with an address¶
The auto-detector classifies the address (Safe / GPay / Circles avatar / EOA / …) and seeds the relevant tabs.
2. Lazy-load a specific section¶
Sections load on demand to keep the initial render fast:
3. Navigate to a related address¶
navigate_portfolio_relation(target_address="0xdef…", relation="safe_owner")
# Reseeds the panel on the new address, preserving the active tab.
4. Update focus¶
Worked example¶
# A customer reported a missing GPay payment.
> open_portfolio(address="0xabc…")
< INITIAL_LOAD: roles=[gpay_wallet], gpay events: 142
> load_portfolio_section(section="gpay")
< [GPay events table renders]
# Their controlling EOA via the GA Delay Module
> navigate_portfolio_relation(target_address="0xeoa…", relation="ga_user_controls_gpay")
< [Panel reseeds on the EOA]
> load_portfolio_section(section="circles")
< [Circles trust relations + CRC balances]
Tool reference¶
| Tool | Purpose |
|---|---|
open_portfolio(address) | Open the panel; auto-detect roles |
load_portfolio_address(address) | Reseed the open panel on a new address |
load_portfolio_section(section) | Lazy-load Overview / Relationships / Yields / GPay / Circles |
update_portfolio_focus(...) | Change tab, window, threshold |
navigate_portfolio_relation(target_address, relation) | Follow a graph edge to another address |
Best practices¶
- Always resolve labels first with
resolve_address(...)if the user gave you a name (ENS, Safe, label). - Use
navigate_portfolio_relation, notload_portfolio_address, when following a relationship — it preserves audit trail in the resume hint. - Pair with Graph Explorer for visual context — Portfolio shows the address; Graph Explorer shows its network.
Pitfalls¶
- Querying
safes_current_owners.ownerfor GPay control. Returns the sentinel0x…0002. Usega_user_controls_gpay(Delay Module-based) instead — Graph Explorer encodes this canonically. - Treating the Yields tab as historical. It shows current open positions only. For history, query
fct_execution_yields_user_lending_positionsdirectly.
See also¶
- Mini-Apps overview
- Graph Explorer — visual network view
- Contract Explorer — single-contract RPC view
- Tools §6