The user submits a transaction that moves their funds to the buffer (MasterWallet.sol). Submitting such a transaction is relatively cheap because tokens are only being sent from X to Y.
Funds are held in the buffer, waiting to be deployed into the Spool Protocol.
2. DoHardWork() function is called
The funds either match with a user that withdraws an equal- or bigger share (again, to optimize capital efficiency) OR the funds are deposited into the selected strategies according to the Spool Smart Vault its current portfolio weighting.
Yield starts generating after steps 1 and 2 are executed.
The user makes a request for the withdrawal which gets buffered up.
After DoHardWork() is executed, the respective user can claim the amount they just requested to withdraw.
This is done to achieve higher capital efficiency and lower gas costs.
Yield stops generating the moment a withdrawal request is submitted and subsequently a DoHardWork has happened after the withdrawal request.
After a withdrawal is in the claim stage, funds remain available to claim until the user claims them. No time constraints are in place for claiming a withdrawal.