# Holdings & Actions

Zidee is a multi-network wallet. Your home screen lists every token you hold across Hyperliquid, Solana, and Arbitrum, with a USD value next to each row. Tapping a row drops you into that token's detail screen, sparkline, action buttons, recent activity.

## What you can hold

| Row                    | Network  | Always visible? | Purpose                                     |
| ---------------------- | -------- | --------------- | ------------------------------------------- |
| **USDC · Hyperliquid** | HL L1    | Yes             | The earnings venue. Autopilot's collateral. |
| **USDC · Solana**      | Solana   | Yes             | Fundable + bridgeable stablecoin.           |
| **USDC · Arbitrum**    | Arbitrum | Only when > 0   | Transient. Auto-forwards to HL.             |
| **ZDLT · Solana**      | Solana   | Yes             | Tier token. Determines Autopilot caps.      |
| **SOL · Solana**       | Solana   | Yes             | Network gas + swappable into ZDLT.          |
| **ETH · Arbitrum**     | Arbitrum | Only when > 0   | Network gas.                                |

Display order is fixed: HL USDC at the top (because that's what earns), then the Solana side (USDC, ZDLT, SOL), then Arbitrum gas tokens at the bottom.

USD values come from live Jupiter prices for SOL and ZDLT, CoinGecko for ETH, and a hard $1 peg for stablecoins. Holdings refresh on pull-to-refresh and on a 30-second cache server-side.

***

## Detail screens

Each token row opens a detail screen with the same shape: gradient summary card on top, sparkline + 24h change below, action row, recent activity.

### ZDLT · Solana

**Summary card** shows your ZDLT balance and current tier badge (Mintaka / Alnitak / Alnilam / Bellatrix / Betelgeuse / Saiph / No tier).

**Action row:**

* **Receive**: QR code (Solana Pay URI with the SPL mint) plus your address with a copy button. Includes a disclaimer reminding you to send ZDLT only, sending another SPL to this address won't fail, but Zidee won't index it.
* **Send**: three-step flow (amount → review → complete). Signed by Privy on-device. Disabled at zero balance.
* **Swap**: opens the Jupiter Ultra swap into ZDLT (single-page, live-quoting).
* **Burn**: irreversible token burn. Behind a friction confirmation. Disabled at zero.

### USDC · Solana

**Action row:**

* **Receive**: same QR/address pattern as ZDLT, scoped to USDC's mint.
* **Send**: three-step flow signed by Privy.
* **Swap**: converts USDC-Sol → ZDLT via Jupiter Ultra. The headline use case for this token: the "fast lane" into the tier ladder.
* **Bridge**: coming soon. Will move USDC from Solana to Arbitrum so it can join the funding-rate farm. The button is always enabled (even at zero balance) because the coming-soon copy itself is the lesson.

### SOL · Solana (native)

**Action row:**

* **Receive**: `solana:<address>` QR (no SPL mint param since native SOL doesn't ride a mint).
* **Send**: `SystemProgram.transfer` flow (no Associated Token Account preflight needed). Three-step, signed by Privy.
* **Swap**: into ZDLT via Jupiter.
* **Buy**: opens a destination picker (USDC-Sol, USDC-Arb, SOL, ETH) and routes you through Privy's onramp (Meld). Buy lands directly in your Privy embedded wallet on the matching chain. To get ZDLT, buy USDC-Sol then use Swap.

There's a hint card under the action row reminding you to keep \~0.0022 SOL on hand for gas, so Send and Swap don't bounce.

### Hyperliquid Positions

Tapping the HL USDC row goes to a positions view, not a transfer screen, Hyperliquid is the *earnings* venue, not a token you transfer manually.

The screen shows:

* **Summary stats**: account value, total open positions, total unrealized PnL, and a **Utilization tile** (how much of your account value is currently deployed in Autopilot positions vs. sitting idle). Tap any stat label to open an InfoSheet (bottom-sheet modal) with the precise definition and computation, Esc / backdrop / focus-restore handled the same way across every modal in the app.
* Each open Autopilot position (perp + spot leg).
* Hedge status and notional size.
* Funding paid / received so far for this position.
* Unrealized PnL across both legs.

There's no Send button on this screen because withdrawing requires a different ceremony, see **Withdrawals** below.

***

## Sparkline + 24h change

Every token detail screen has a one-line price chart above the action row:

* **Resolution**: daily. One snapshot per UTC day, written by a cron at 00:00 UTC.
* **Window**: last 30 days by default.
* **24h change**: colored teal when positive, red when negative, gray when neutral or unknown. Only computed when the two latest snapshots are exactly one calendar day apart (so a worker downtime gap reads as instead of mis-labeling a 48h move as 24h).
* **Bootstrap**: the table starts empty after deploy. First day = 1 point (flat midline). Day 30 = full chart.

USDC is always pegged to $1 in the chart. A real depeg won't render; a follow-up will pull live USDC pricing.

***

## Activity feed

**Per-token preview**: every token detail screen has a *Recent Activity* card showing the last 5 on-chain transfers (newest-first). Each row has the direction (sent/received), the counterparty, the amount, and a Solscan link.

**Full per-token view**: tapping *View all* opens the activity screen, which lists up to 20 transfers and lets you switch between ZDLT / USDC-Sol / SOL with chips at the top.

The feed comes from on-chain Solana data only (signatures + parsed pre/post balances). It does not include Hyperliquid trades, those live in Autopilot's positions view since they're managed positions, not user-initiated transfers.

***

## Withdrawals

Hyperliquid withdrawals require a fresh user signature. The flow is:

1. **Pick an amount.** The Withdraw screen shows two ceilings: **Idle now** (USDC sitting free on perp + spot, withdraws immediately) and **Total** (everything you have, requires unwinding open positions). Max defaults to **Idle now** so a one-tap Max never accidentally triggers an unwind.
2. **Pre-flight checks.** Before asking you to sign, the server confirms idle balance, runs a perp/spot consolidation if needed, and verifies the Hyperliquid settle state hasn't lagged behind the recent activity. This kills the multi-submit failure cascade that used to happen when Hyperliquid's `/info` settle was slow.
3. **Server prepares an EIP-712 payload** for the `withdraw3` action.
4. **You sign in the Privy modal**: same UX as approving the agent.
5. **Server submits** the signed action to Hyperliquid.

If you withdraw an amount above **Idle now**, the wallet first runs an *unwind* (closes lowest-trailing-APR Autopilot positions to free idle USDC). During the unwind you sit on a locked **Withdraw pending** screen, Back / amount edit / Max are all disabled so the on-chain state machine can't race with another submit. The screen survives a tab refresh: closing the app and reopening drops you right back on the pending screen with the same unwind job still progressing.

No part of the signing or withdrawal is server-signed. Even if Zirodelta's backend were compromised, an attacker could not push a withdrawal through your account because they don't hold the master key.

Withdrawals settle on Arbitrum after Hyperliquid's withdraw window. The wallet sends a push notification when the withdrawal lands.

***

## Pull-to-refresh

Every screen with live data (home, holdings detail, HL positions) supports pull-to-refresh. It re-runs the holdings aggregator, the tier check, and the user-status fetch in parallel.

***

> **See also:** [Custody](/zidee-wallet/custody.md) · [Tiers](/zidee-wallet/tiers.md) · [Getting Started](/zidee-wallet/getting-started.md)


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.zirodelta.com/zidee-wallet/holdings-and-actions.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
