To ensure that
PublicVaults always have sufficient funds to cover new loan originations, liquidity providers must signal that they wish to withdraw funds at least one epoch in advance. When the first liquidity provider signals a withdraw for the next epoch, a
WithdrawProxy is deployed for that epoch. The liquidity provider then burns their
VaultTokens with the
WithdrawProxy and receives an equal amount of
WithdrawTokens for that WithdrawProxy. Any other withdrawing liquidity providers for the next epoch may burn their
VaultTokens with that same
WithdrawProxy to receive
At the next epoch boundary, the
PublicVault records the value of the burned
VaultTokens for each withdrawing liquidity provider in withdrawReserve. For example, if an LP had burned 10
VaultTokens halfway through the previous epoch, and each
VaultTokens is now worth 1.5 WETH, the
PublicVault would add 15 WETH to the withdrawReserve. If there are any active liquidations at the epoch boundary,
WithdrawProxy will have been set as the liquidated liens' payee to collect auction funds. In this scenario, the
PublicVault would record the ratio between withdrawing and remaining funds as the liquidationWithdrawRatio. If 100 WETH is being withdrawn (a withdrawReserve of 100) and 400 WETH remains in the vault, auctioned funds will be split between the
PublicVault and the
WithdrawProxy in a 1:5 ratio.
Liquidations which are paid out after a scheduled withdraw will be split between LPs and the Vault in a 1:5 ratio.
The PublicVault pauses all loan originations until the withdrawReserve is met, either from loan repayments or recovered auction funds. The
PublicVault then begins sending funds to the
WithdrawProxy for that epoch.
WithdrawToken holders can burn their tokens in exchange for the funds held by the
WithdrawProxy. Since loans in the previous epoch had been capped to end before the end of the next epoch, the withdrawReserve should be met if no liquidations are triggered near the end of the epoch.
If a loan is liquidated and the auction end is scheduled after the epoch boundary when the
WithdrawProxy begins accumulating funds for LPs to withdraw, then the payee for the liquidated
LienToken is permanently set to the address of the
WithdrawProxy to collect all auction funds. If any other
LienTokens are liquidated before the end of the current epoch, the payee for those
LienTokens are also set to the
WithdrawProxy. The reserve value for all auctioned liens is tracked by the
WithdrawProxy. Once all auctioned funds are recovered, the funds collected from auctions into the
WithdrawProxy are proportionally split between withdrawing and remaining LPs (the
WithdrawProxy and the
PublicVault). This withdraw ratio is determined at the epoch boundary, when the funds owed to all withdrawing LPs is calculated.