Why
Blend cross-margins ALL positions in a pool into one account — there is exactly one liquidation HF per pool. The per-asset "Loop HF" is only accurate when it's your sole position; with multiple strategies in one pool (e.g. a USDC loop + an EURC-collateral/XLM-borrow) it's misleading. Reframe the position view around the POOL/account.
Design (approved: always-visible table + full reframe)
Position panel = one card per pool:
┌─ YieldBlox ─────────────── Account Health 1.42 ✓ Safe ─┐
│ Equity $4,120 · Net APY +8.3% · Effective leverage 2.7× │
│ ▓▓▓▓▓▓▓▓▓░░░ HF 1.42 · ~62 days to liquidation │
│ What's in this pool │
│ Asset Supplied Borrowed Role │
│ USDC 9,000 6,000 Loop · 3× on $3,000 │
│ EURC 2,300 — Collateral │
│ XLM — 1,850 Borrow │
│ ⓘ one HF liquidates the whole pool; rows are a breakdown│
│ [Add] [Remove] [Adjust ▾] [Close pool] │
└──────────────────────────────────────────────────────────┘
- One health (Pool HF), one HF bar/gauge, one days-to-liquidation, one warning — per pool.
- No per-asset HF. Each asset row: supplied / borrowed / role (Loop / Collateral / Borrow).
- Single clean loop → one row, health == loop HF → identical to today's simple case (no regression).
- Overview → one card per pool (collapses per-asset cards).
- Open/adjust/add/remove flows stay asset-scoped (you loop a specific asset) — only display + health become pool-centric.
Data
PoolAccount { poolId, poolHF, equityUsd, netApy, effLeverage, liqDays, rows:[{asset,supplied,borrowed,role}] }. Reuses computePoolHF().
Why
Blend cross-margins ALL positions in a pool into one account — there is exactly one liquidation HF per pool. The per-asset "Loop HF" is only accurate when it's your sole position; with multiple strategies in one pool (e.g. a USDC loop + an EURC-collateral/XLM-borrow) it's misleading. Reframe the position view around the POOL/account.
Design (approved: always-visible table + full reframe)
Position panel = one card per pool:
Data
PoolAccount { poolId, poolHF, equityUsd, netApy, effLeverage, liqDays, rows:[{asset,supplied,borrowed,role}] }. ReusescomputePoolHF().