Staking screen map · mobile

Phantom Wallet · PR #24615 · screenshots from PR #23967
Non-liquid (native) Liquid (PSOL) Bridge: Convert Money-mover (this PR) Real review / broadcast Status / spinner Native unstake (kill candidate)
Non-liquid native SOL · delegated stake accounts
SOL goes in / out via on-chain delegation. Stake accounts are owned-by-user, deactivated per-epoch. Crosses into the liquid domain via Convert to PSOL only.
A — Stake-in SOL → delegated stake account
SOL detail → More → Stake SOL → Native Staking card.
SOL Detail
→ More menu
testID: unifiedFungibleDetail-stakeSol-cta
StakingMethodSelection
picker
ValidatorList
picker
StakeAmount
money-mover · this PR
StakeReview
real broadcast
CreateAndDelegateStatus
status
D — Native unstake kill candidate
From a delegated stake account. Deactivates the whole account (no amount picker). Withdraw is a separate return trip after the epoch boundary.
StakeAccountsList
picker
StakeAccountDetail
Unstake btnConvert btn ↘
StakeAccountDeactivateStatus
broadcasts deactivate ix · no PR #23967 screenshot
native unstake
StakeAccountWithdrawStatus
return trip after epoch · withdraw raw SOL
status
Kill tradeoff for the PM. Convert (bridge below) already absorbs the deactivate step for active accounts, so removing the standalone Unstake + Withdraw buttons is functionally covered — but a user who wants raw SOL back goes from one epoch wait (deactivate → withdraw) to two epoch waits (Convert deactivate → wait → Convert mint PSOL → liquid unstake → wait).
Bridge — Convert to PSOL non-liquid → liquid
The only way for SOL inside a native delegated stake account to enter the liquid domain. Same Convert review page branches on the source account's activation state — see useConvertStakeAccountReviewPageProps.ts.
StakeAccountDetail → Convert
entry from non-liquid
ConvertToPSOLInfo
info · first run
ConvertStakeAccountList
picker
ConvertStakeAccountReview (branches)
real broadcasttwo-mode

Source = active / activating

Broadcasts deactivate ix only. User waits until the next epoch boundary (~1–2 days), then re-enters Convert to finish. Same on-chain effect as Journey D's standalone Unstake — this is why Convert can subsume Journey D.

ConvertStakeAccountStatus
deactivate only
Re-enter Convert
after epoch ends
deep link supported

Source = inactive (already deactivated)

Broadcasts the stake-pool depositStake ix. The deactivated SOL is consumed by the pool and PSOL is minted to the user's wallet immediately. The user now sits in the liquid domain below.

ConvertStakeAccountStatus
mints PSOL
PSOL in wallet
crosses into liquid domain
Deep link entry: DeepLinkDestination.ConvertStakeAccountConvertStakeAccountDeepLinkPage:
DeepLinkPage
deep link
DeepLinkPage · error
deep link · error
Liquid PSOL · Phantom LST pool
Tokenized stake position — PSOL is a fungible token in the wallet. Entry is direct (Mint PSOL from SOL detail) or via the Bridge above. Exit back to raw SOL goes through liquid unstake.
B — Mint PSOL SOL → PSOL
SOL detail → Mint PSOL CTA, or Stake SOL → Liquid Staking card. Stakes SOL with the Phantom LST pool; mints PSOL in return.
SOL Detail
→ Mint PSOL
testID: unifiedFungibleDetail-mintLST-cta
MintPSOLInfo
info · first run
MintLiquidStakeAmount
money-mover · this PR
MintLiquidStakeReview
real broadcast
MintLiquidStakeStatus
status
Info-page variants by region / poolMintPSOLInfoPage shown; alternates are MintPSOLUKInfoPage, MintJitoSOLInfoPage, PSOLMarketingPage. All funnel into MintLiquidStakeAmountPage.
C — Liquid unstake PSOL → SOL
PSOL detail → More → Unstake. Burns PSOL, queues SOL withdrawal. Only path back to raw SOL from the liquid domain.
PSOL Detail
→ More menu
→ Unstake
testID: unifiedFungibleDetail-unstake-cta
UnstakeLiquidStakeAmount
money-mover · this PR
UnstakeLiquidStakeReview
real broadcast
UnstakeLiquidStakeStatus
status
Money-mover review disclaimer: "Your unstaked PSOL can take up to 2 days to become available in your wallet" (commit 46e30f8).
Feature flag controlling A/B/C amount pages: enable-money-mover-staking · devDefaultValue: true · prod default false.
Real review pages (green) own broadcast; money-mover Confirm (purple) routes to them via navigation.navigate() after commit 96f2622.
Screenshots from PR #23967 · downloaded and self-hosted to avoid GitHub user-attachments JWT expiry.