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
Order
messagesOracle-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
redeem
function redeem(Order calldata order, IConsensus.Signature[] calldata signatures) external payable nonReentrant
Parameters:
order
: A signed redemptionOrder
struct specifying asset amount and recipientsignatures
: 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 registered
Consensus
contractPrice computed from
ordered
andrequested
values 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
Reverts with
InsufficientAssets
if funds are lacking
Redemption Processing:
Burns
order.ordered
shares from the user viashareManager
Calls
vault.callHook(...)
for any strategy exit logicTransfers
order.requested
assets to the userUpdates internal vault balance via the
RiskManager
Event Emitted:
OrderExecuted(order, signatures)
confirms successful execution
Error: InsufficientAssets
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.