Skip to main content
Source: src/RedeemQueue.sol

Responsibility

RedeemQueue is the user entrypoint for redeeming fund shares back into assets. Like deposits, redemptions are batched: users lock shares into the current batch, the batch is priced when the oracle report is accepted, and payouts become claimable once the Fund funds the batch with assets. Redemption has one more stage than deposits because the fund’s assets may be deployed in strategies at settlement — settling fixes how much is owed, while funding (a separate, role-gated Fund action) actually delivers the assets. Admin functions authorize against the Fund’s access control.

Redeem lifecycle

1

Request

The user calls redeem, choosing which allowed asset to be paid in. Shares are transferred into the queue (requires prior approval). Fund.checkRedeemRiskManager enforces minimums and batch caps. One request per (asset, batch, user).
2

Cancel

The user can cancel their current-batch request before settlement and get shares back. An admin (CANCEL_REDEEM_REQUEST_ROLE) can cancel any request in any unsettled batch.
3

Settle

During Fund.acceptReport, settleRedeem transfers the batch’s shares to the Fund (which burns them) and snapshots the payout (batchAssetTotals) at the accepted price minus exit fee. The batch is tracked as settled-but-unfunded.
4

Fund

The operator brings assets back to the Fund (pulled from strategies, or transferred back by external wallets / bridges), then FUND_REDEEM_ROLE calls Fund.fundRedeem(asset, batchId), which delivers the snapshotted amount and marks the batch claimable.
5

Claim

The user calls claimRedeem and receives shares × batchAssetTotals / batchRedeemTotals.

Function reference

User actions

Fund actions

Admin (roles checked on the Fund)

Views

getAllowedAssets(), getAssetStatuses(), getRedeemRequest(asset, batchId, investor), getPendingRedeems(investor), getClaimableRedeems(investor), getUnfundedBatches() (the operator’s to-do list), batchRedeemTotals(asset, batchId), batchAssetTotals(asset, batchId), isBatchFunded(asset, batchId), isAssetPaused(asset), fund(). DepositQueue · Oracle · Fund