SignatureRedeemQueue
Purpose​
SignatureRedeemQueue extends SignatureQueue to enable instant share redemption from a vault without the usual delay of on-chain oracle processing. It leverages off-chain consensus signatures conforming to EIP-712 or EIP-1271 to authorize redemptions, allowing trusted users to convert shares to assets in a fast and secure manner.
This module provides a low latency redemption path under stronger trust assumptions, useful in environments where responsiveness is critical and participants are whitelisted by a governance consensus.
Key Features​
- Off-chain authorized redemptions using signed
Ordermessages. - Oracle bound price validation to prevent manipulation.
- EIP-712 structured data signature verification.
- Direct burning of shares and asset pulling from the vault and payout.
- Nonce based replay protection.
- Vault hook execution and balance tracking.
- No redeem fee applied (unlike possible fees in
RedeemQueue).
Function: redeem​
function redeem(Order calldata order, IConsensus.Signature[] calldata signatures) external payable nonReentrant
Parameters​
order: A signed redemptionOrderstruct specifying asset amount and recipient.signatures: Validator signatures from the consensus group.
Workflow​
- Validation via
validateOrder(...): signature freshness (deadline), queue and asset correctness, caller authenticity and correct nonce, signatures validated by registeredConsensuscontract, and price computed fromorderedandrequestedvalues and verified via oracle. - Nonce incremented for the caller to prevent signature reuse.
- Vault liquid asset check. Ensures enough liquidity is available for the redemption and reverts with
InsufficientAssetsif funds are lacking. - Redemption Processing: burns
order.orderedshares from the user viashareManager, callsvault.callHook(...)for any strategy exit logic, transfersorder.requestedassets to the user, and updates internal vault balance via theRiskManager. - Event emitted:
OrderExecuted(order, signatures)confirms successful execution.
Error: InsufficientAssets​
error InsufficientAssets(uint256 requested, uint256 available);
Thrown when the vault does not have enough liquid assets to fulfill the request. Ensures safety during instantaneous exits.