Exit & Withdrawal

User can exit their pooled position anytime by joining the operator pools exit queues and wait for the pool to have enough liquidity to pay for their exit.

Unstaking and Exit

The exit process is more intricate compared to staking. It's crucial to note that all vPool shares are consistently 100% collateralized. The collateral primarily resides within active validators on the consensus layer, though some funds might still be within the vPool, awaiting deposit to new validators.

Retrieving funds from a validator is not instantaneous; it involves the validator going through the protocol's exit process and entering an exit queue. Only after completing these steps do the funds return to the execution layer. Exiting shares, therefore, is a two-step process.

First users will "signal" their need for exiting ETH by locking their vPool shares inside the vPool's exit queue contract. From the perspective of an integration contract, it is the responsibility of the integration contract to efficiently dispatch the shares on behalf of users across various potential exit queues (each vPool has its dedicated exit queue, and an integration contract may involve multiple vPools). Once funds are deposited into the exit queue contract, a ticket, symbolizing the user's position in the exit queue, is minted. This ticket takes the form of an NFT.

Depending on the exit queue demand, the vPool may notify the node operator through a smart contract event, indicating the need to exit certain validators to fulfill the exit queue. Upon receiving funds, the vPool provisions the exit queue, creating a cask that aligns with the received liquidity and the prevailing exit queue demand.

Under usual conditions, with the pool earning rewards and incoming liquidity from deposits, it will take approximately 1-4 days for the user's exited ETH to become available for withdrawal. In extreme cases, where exit demand significantly surpasses available ETH, the time it takes depends on the Ethereum validator exit and withdrawal queue. Typically, this process takes a minimum of 7 days but may extend much longer.

You can see the exit queue as an ever growing queue where users get a ticket in line to retrieve some liquidity, and this liquidity is periodically sent to the exit queue in the form of casks of liquidity.

Claiming tickets

When casks arrive, funds still need to be claimed by the ticket holder. The reason behind this is that solidity creates some limitations on the number of actions you can perform in a transaction. Keeping that in mind, you need to understand that a cask can fulfill one or many tickets at once, so it wouldn't be possible for the smart contract to iterate on all the tickets and send the funds as their count is not constant and can be a high number of tickets.

What are ticket statuses ?

Tickets can have several statuses:

  • unfulfillable: the ticket is waiting for a cask to arrive and fulfill its exit request.

  • partially fulfillable: the ticket has one or several casks partially fulfilling its exit request, this means that the ticket can be claimed, but this action will result in getting an updated ticket with the remaining amount yet to be claimed.

  • fulfillable: the ticket has one or several casks completely fulfilling its exit request. Claiming this ticket will retrieve the funds and burn the ticket.

In the example above, we can see that:

  • Tickets #0 and #1 are currently fulfillable by cask #0.

  • Ticket #2 is currently partially fulfillable by cask #1

  • Ticket #3 is unfulfillable.

Keep in mind that both of these queues can grow independently, and the goal of the vPool is to provide casks to make the cask queue grow and reach the same height as the ticket queue, making all ticket fulfillable

Last updated