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.checkRedeem → RiskManager 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().