Skip to content

Redemption & Withdrawal Flows

Every investor position has three actions:

  • Hold
  • Redeem behavior (exercise principal protection)
  • Withdraw behavior (claim FT and release protection)

In the current FT codebase, positions are ERC-721 pFT NFTs with per-position accounting. Flows in this document map directly to current behavior while preserving the product framing.

ActionInvestor gives upInvestor receivesCapital outcomePosition status
HoldNothingNothingCapital stays in strategyActive
Redeem behavior (divest)Position FT amount (burned from position)Collateral backCollateral leaves active backingExercised for that amount
Withdraw behavior (withdrawFT)Position FT amount (burned from position)FT tokensCollateral moves to capitalDivestingForfeited for that amount

All three actions are available without discretionary approval. Partial amounts are supported for redeem and withdraw behavior.

Hold is the default state.

While holding:

  • Collateral remains deployed in yield strategy via wrapper
  • pFT remains in wallet and is transferable as ERC-721
  • Position retains both upside exposure and principal-protection behavior
  • Yield continues to accrue in strategy and follows configured distribution

The investor exits to collateral by using divest or divestUnderlying.

  1. Investor calls redeem path on a position with id and FT amount.
  2. Collateral out is computed with on-chain conversion math from position parameters.
  3. Position FT amount is reduced (and position burns if fully exhausted).
  4. Wrapper withdraws collateral from strategy path.
  5. Collateral is sent to investor.
  6. FT allocation for that position amount is released back to the available pool (can be allocated to future investors or reclaimed by the project).
  7. Global accounting updates (ftAllocated, collateralSupply).

Current conversion formula (implementation)

Section titled “Current conversion formula (implementation)”

From PutManager.collateralFromFT:

collateralOut = ftAmount * (1e8^2 * 10^tokenDecimals) / (strike * ftPerUSD * 1e18)

Where strike and ftPerUSD are position/oracle context values used by contract logic.

Alternative path: underlying protocol shares

Section titled “Alternative path: underlying protocol shares”

divestUnderlying can return strategy position tokens (for example Aave aToken form) instead of underlying collateral, depending on strategy support.

  • Always available — even if the raise is paused, even if the project token price is zero, even if the project team disappears. Redemption is permissionless and on-chain.
  • Partial redemption supported
  • Oracle is not consulted during execute step in current formula path
  • Circuit breaker can throttle outflow velocity through wrapper checks

Redemption is proportional, not fixed-dollar. You get back your share of the pool in deposit asset terms. For stablecoin raises (USDC), this is effectively identical to getting your dollars back. For volatile asset raises (WETH), you get back WETH — which may be worth more or less in USD than when you deposited.

The investor takes project FT exposure and gives up principal protection for that withdrawn amount.

transferable must be enabled on PutManager.

  1. Investor calls withdrawFT(id, amount).
  2. Collateral equivalent is computed with same collateralFromFT formula.
  3. Position FT amount is reduced by requested amount.
  4. FT tokens are transferred to investor wallet.
  5. Equivalent collateral is tracked under capitalDivesting[token].
  6. Admin can later pull divested capital for buyback/burn operations.
  • Freely held FT tokens for the withdrawn amount
  • Principal protection on the withdrawn amount
  • Ability to redeem that same amount later
  • Gated by transferable
  • Irreversible for withdrawn amount
  • Partial withdraw supported
  • Feeds buyback pathway via released capital accounting
  • ftAllocated decreases by redeemed FT amount
  • collateralSupply[token] decreases by converted collateral amount
  • ftOfferingSupply and ftAllocated decrease by withdrawn FT amount
  • capitalDivesting[token] increases by converted collateral amount

The redemption rate remains stable through normal operations. The only scenario where it could deviate is if yield strategy losses reduce the backing collateral.

  • Increase ftAllocated
  • Increase collateralSupply[token]
  • Mint new pFT positions

Since positions are ERC-721, transferability is per position token:

  • Position owner can transfer pFT
  • New owner inherits all action rights for remaining amount in that position
  • Market liquidity for positions is naturally NFT/OTC style in the current model

Wrapper withdraw calls can check rate limits through CircuitBreaker.checkAndRecordOutflow.

If limits are exceeded, withdrawals may revert or be delayed by retry behavior depending on caller flow.

HoldRedeem behaviorWithdraw behavior
ActionNo txdivest / divestUnderlyingwithdrawFT
AvailableAlwaysAlways (subject to liquidity/rate limits)After transferable enabled
Partial supportN/AYesYes
Position token after full amountUnchangedBurned when exhaustedBurned when exhausted
Capital effectStays deployedReturned to userMoved to capitalDivesting
ReversibleN/ANo for redeemed amountNo for withdrawn amount