Zivoe dApp · Vault page · Earn box · Redeem tab

zSMB Redeem Tab States

Every state an investor with a connected wallet can land in on the Redeem tab, what they see, and what is happening behind it. Loading and refreshing states are left out on purpose.

Source of truth: apps/dapp/src/app/(dashboard)/vaults/[slug]/deposit/redeem-flow.tsx on main as of 2026-09-09. Examples use zSMB / USDC; the same rules apply to any vault and deposit asset.

1. The four zones of the tab

DepositRedeem
250.00 zSMB returned from cancellationClaim zSMB
1,020.55 USDC ready to claimClaim USDC
1,000.00 zSMB processing · ≈ 1,018.20 USDCCancel request
Redeem500MAX · zSMB ▾ Ethereum≈ $509.10Balance 4,000.00
Estimated receive509.10USDC≈ $509.10Balance 12.00
Add to redemption
Redemptions are processed periodically. Your final USDC amount is determined using the Token Price when your request is processed.
A

Position strips

Zero to four strips describing money already in motion for this wallet on the selected chain. Each strip appears only when its on-chain bucket is non-zero, always in this order: Returned zSMB → Claimable USDC → Unfunded USDC → Processing (redemption or cancellation). Claimable and Unfunded never show together.

B

Request form

Amount of zSMB to redeem, MAX, the chain selector, and the read-only Estimated receive row. Editable in almost every state; the three lock cases are in section 4.

C

Main action

One button whose label is picked by a strict priority ladder (section 5). It is the only way to submit a request. Reads "Request redemption" normally and "Add to redemption" when this wallet already has pending, claimable or unfunded USDC on this chain.

D

Callouts

The price warning is always shown. A second warning explains the block whenever the wallet is not admitted to the vault (frozen or not whitelisted).

2. What decides the state

Five independent inputs. Every state on this tab is a combination of these.

InputPossible valuesWhere it comes fromScope
Wallet accessWhitelisted · Not whitelisted (never added, membership expired, or an unexplained refusal) · FrozenThe zSMB share token's transfer hook on-chain (Centrifuge "FullRestrictions"). Three yes/no verdicts are read: may receive shares, may send shares to escrow, may claim proceeds. Freeze is checked before membership, so a frozen wallet is frozen no matter its whitelist status.Per wallet, per chain. A wallet can be whitelisted on Ethereum and not on Base.
Chainalysis riskLow / Medium (fine) · High / Severe (risky)Zivoe API calling Chainalysis, cached one hour. Only High and Severe change anything.Per wallet, all chains.
Wallet chain vs selected chainMatch · MismatchThe chain the wallet is connected to compared with the chain picked in the form's selector. Picking a chain prompts a wallet switch immediately.Per session.
Redemption positionAny combination of: Pending zSMB · Claimable USDC · Unfunded USDC · Returned zSMB · Cancellation processing flagCentrifuge SDK investment read plus a direct read of the request manager and the chain's pool escrow (the SDK hides an unfunded claim).Per wallet, per chain. The tab only shows the selected chain's position.
Chain supports cancellationYes (Ethereum only) · No (Pharos, Base, Arbitrum, Avalanche, Optimism, HyperEVM, X Layer, BNB)Product flag in the chain catalog. Cancelling needs a hub-side unwind that is only automated where hub and spoke are the same chain.Per chain.

3. Wallet status × what each control does

Rows are the wallet's status on the selected chain. Columns are the controls. Strips still only appear when their bucket is non-zero; the cell says what the control does when the strip is there.

OPEN works as normal BLOCKED visible, disabled, reason shown SWAPPED replaced by a different button N/A control not offered
Wallet statusRequest form (B)Main action (C)Cancel requestClaim zSMB (returned)Claim USDCUnfunded USDC stripCallout (D)
Whitelistedall verdicts pass OPEN OPENRequest redemption or Add to redemption OPENEthereum only OPEN OPENWaits while Returned zSMB exists: Claim your returned zSMB first. Amount only, no button1,020.55 USDC approved, awaiting liquidity on Arbitrum Price warning only
Not whitelistednever added / expired / unexplained LOCKEDInput, MAX disabled. Chain selector stays open so the user can switch to a chain where they are whitelisted. BLOCKEDWallet Not Whitelisted BLOCKEDRequires a whitelisted wallet. BLOCKEDRequires a whitelisted wallet. OPENProceeds already owed are exempt from the whitelist. Headline still reads ready to claim. Exception: if Returned zSMB also exists the USDC claim is stuck behind it and the hint says Requires a whitelisted wallet. Amount only, no extra hint Price warning + You must be whitelisted to interact with this vault. Contact us at inquire@zivoe.com to request access.
Frozenoperator suspended wallet on this chain LOCKEDSame as above; chain selector open. BLOCKEDWallet Frozen BLOCKEDThis wallet is frozen. BLOCKEDThis wallet is frozen. BLOCKEDHeadline changes to 1,020.55 USDC approved + This wallet is frozen. Amount + This wallet is frozen.Two things stand between the wallet and its USDC; both are named. Price warning + This wallet is frozen on this chain and cannot transact in this vault. Contact us at inquire@zivoe.com if you believe this is a mistake.
Chainalysis High / Severeany whitelist status OPENEditable, but there is no way to submit. SWAPPEDDisconnect SWAPPEDDisconnect SWAPPEDDisconnect SWAPPEDDisconnect Amount only Price warning (+ access callout if also not admitted)
Wallet on another chainselected Base, wallet on Ethereum OPENShows the selected chain's balance and position. SWAPPEDSwitch to Base; wins over every other label. BLOCKEDNo hint; the main button says what to do. BLOCKED BLOCKED Amount only Price warning (+ access callout if not admitted on the selected chain)

Fail-open rule. If the access check itself fails (RPC error), nothing is blocked: the tab shows a toast Error checking wallet access, every control stays open, and a transaction that would revert is caught by the pre-sign simulation instead, with copy such as This redemption request can't be submitted from this wallet right now. A failed read is treated as a fetch problem, never as a verdict.

4. When the request form is locked

Outside of loading and refreshing, the amount input and MAX are disabled in exactly three situations. The chain selector is only locked by the third.

SituationWhat the user seesWhyHow it clears
Wallet not admittednot whitelisted or frozen on this chainGreyed input and MAX, main button Wallet Not Whitelisted / Wallet Frozen, callout D. Chain selector still works.The vault would revert the request on-chain; there is no amount worth entering.Operator whitelists or unfreezes the wallet, or the user selects a chain where they are admitted.
Cancellation processingGreyed input and MAX, strip Cancelling redemption request for 1,000.00 zSMB, main button Cancellation in progress. Cancel control hidden.A new request reverts on-chain until the hub finishes unwinding the cancellation.Automatically. The tab polls the position every 10 seconds; when the unwind lands, the zSMB shows up as a Returned zSMB strip.
A transaction is in flightrequest, cancel, either claimForm and chain selector greyed; the active button shows Signing Transaction... then Requesting redemption... / Cancelling... / Claiming USDC... / Claiming zSMB.... Every other button is disabled.All four writes share one transaction path, so they take turns.When the transaction confirms or fails. Data refetches, then the form unlocks.

Not a lock: a failed price estimate. The Estimated receive row shows Unable to estimate USDC. Retry but the request can still be submitted, because the estimate is indicative anyway. The final amount uses the price at processing time.

5. Main action label, in priority order

The first matching rule wins. This is why a wallet on the wrong chain never sees "Wallet Frozen": the switch comes first.

  1. Connect WalletNo wallet connected (out of scope here, listed for completeness).
  2. DisconnectChainalysis says High or Severe risk.
  3. Switch to BaseWallet is on a different chain than the one selected in the form.
  4. Loading...Prerequisites still loading (excluded from this doc).
  5. Cancellation in progressA cancellation is being unwound on the hub.
  6. Wallet Frozen / Wallet Not WhitelistedVault refuses a redemption request from this wallet on this chain.
  7. Add to redemptionWallet already has pending, claimable or unfunded USDC on this chain.
  8. Request redemptionEverything else.

6. The position strips, one by one

What each strip means, what the user can do, and what is going on underneath. Rendered top to bottom in the order listed.

StripShown whenCopy and controlBehind the scenesResolves when
Returned zSMB A cancellation has finished unwinding and zSMB sits in the vault waiting to be claimed back. 250.00 zSMB returned from cancellation + Claim zSMB Claiming is a share transfer into the wallet, so it needs the whitelist and no freeze. The SDK's claim call empties this bucket before it pays USDC, which is why this strip is first and the USDC claim waits for it. User claims. zSMB returns to the wallet balance.
Claimable USDC Zivoe has processed (fully or partially) this wallet's request and the chain's escrow holds the USDC. 1,020.55 USDC ready to claim + Claim USDC. Blocked wallets read approved instead of ready to claim. One claim pays out every processed portion at once. Whitelist is not required (proceeds already owed), a freeze blocks it. If Returned zSMB exists, the button waits: Claim your returned zSMB first. (a Split Outcome). User claims. USDC lands in the wallet.
Unfunded USDC The request was processed but this chain's pool escrow holds less than it owes. Only on spoke chains; the SDK reports zero, so the dApp reads the amount directly. 1,020.55 USDC approved, awaiting liquidity on Arbitrum. No button at all. Frozen wallets get an extra This wallet is frozen. An operations gap: liquidity has not been moved to that chain. A Sentry error is raised for every read that sees it. This strip does not poll. Operations fund the escrow. On the next load or transaction refetch it turns into a Claimable USDC strip.
Redemption processing Pending zSMB exists and no cancellation is in progress. 1,000.00 zSMB processing · ≈ 1,018.20 USDC + Cancel request (Ethereum only; other chains show the text alone). zSMB is in escrow waiting for Zivoe to process the request on the hub, periodically. Partial processing moves value from this strip into Claimable USDC. The ≈ amount uses the current price; the real amount is fixed at processing. Zivoe processes the whole request, or the user cancels (Ethereum).
Cancellation processing The user (or someone on their behalf, on any chain) cancelled and the hub has not finished unwinding. Cancelling redemption request for 1,000.00 zSMB + Your zSMB will be available to claim once the cancellation is processed. Any portion already approved still executes as USDC. Replaces the Redemption processing strip; locks the form. Polled every 10 seconds. A portion processed before the cancellation landed still pays out as USDC, so this can end in a Split Outcome (Returned zSMB + Claimable USDC). Hub finishes the unwind. Strip becomes Returned zSMB.

7. Worked examples

The combinations most likely to generate a support question, read top to bottom as the user sees them.

Happy path, first request

Whitelisted · Ethereum · no position
  • No strips.
  • Form open, estimate live.
  • Request redemption.

Waiting on Base

Whitelisted · Base · 1,000 zSMB pending
  • 1,000.00 zSMB processing · ≈ 1,018.20 USDC, no cancel link.
  • Form open.
  • Add to redemption.

Partially processed, then cancelled

Whitelisted · Ethereum · Split Outcome
  • 250.00 zSMB returned from cancellation + Claim zSMB.
  • 765.40 USDC ready to claim, button disabled, Claim your returned zSMB first.
  • Form open, Add to redemption.

Whitelist removed after a request

Not whitelisted · Ethereum · 1,020 USDC claimable
  • 1,020.55 USDC ready to claim + Claim USDC still works.
  • Form locked, Wallet Not Whitelisted.
  • Whitelist callout at the bottom.

Frozen with money owed

Frozen · Ethereum · 1,020 USDC claimable
  • 1,020.55 USDC approved, button disabled, This wallet is frozen.
  • Form locked, Wallet Frozen.
  • Frozen callout at the bottom.

Liquidity not on the spoke yet

Whitelisted · Arbitrum · unfunded claim
  • 1,020.55 USDC approved, awaiting liquidity on Arbitrum, nothing to press.
  • Form open, Add to redemption.
  • Ops are alerted through Sentry; the user waits.

Wrong network

Whitelisted · selected Base, wallet on Ethereum · USDC claimable on Base
  • 1,020.55 USDC ready to claim, button disabled, no hint.
  • Form open, showing Base balances.
  • Switch to Base.

Flagged by Chainalysis

High risk · any chain · pending + claimable
  • Strips show amounts; every strip button reads Disconnect.
  • Form open but cannot be submitted.
  • Main action Disconnect.

Cancellation in flight

Whitelisted · Ethereum · cancel sent
  • Cancelling redemption request for 1,000.00 zSMB + explainer.
  • Form locked.
  • Cancellation in progress; clears by itself.

8. Facts worth remembering