Fast Exits via Market Makers

In situations where users seek to exit more quickly than the native vPool liquidity allows, a fast exit flow can be enabled through the use of market makers. This allows users to liquidate their positions (either the tokens or the exit tickets) without waiting for queue fulfillment.

There are two primary mechanisms available for fast exits:

  1. Selling the liquid token directly

  2. Selling the exit queue ticket (NFT)

1. Selling the Liquid Token

This is the most straight forward way but not the most efficient

If the receipt token representing staked ETH is liquid, it can be sold on secondary markets or through OTC trades. The user can initiate this action at any time to receive ETH (or another asset) instantly.

Considerations:

  • This method bypasses the unstaking process.

  • Token price may trade below intrinsic value, especially in volatile or illiquid conditions.

  • User does not interact with the exit queues.


2. Selling the Exit Queue Ticket (NFT)

When a user initiates an exit, they receive one or more exit queue tickets (NFTs), which represent a claim to ETH once liquidity becomes available. These tickets can be transferred or sold, allowing for:

  • Instant liquidity for the seller

  • Yield opportunity or arbitrage for the buyer

Flow for Ticket Transfer

  1. User initiates exit request

    send $INTEGRATION_CONTRACT_ADDRESS "requestExit(uint256)" $AMOUNT_OF_TOKENS_TO_EXIT
    • User receives exit queue ticket(s) (ERC-721).

  2. User lists or negotiates sale of ticket

    • An integration with one or multiple market maker can allow user to sell the exit tickets.

    • Pricing may depend on ticket status (unfulfillable, partially fulfillable, or fulfillable), size, and estimated time to fulfillment.

  3. Transfer ticket

    • Execute an ERC-721 safeTransferFrom to move ticket ownership to buyer: This can be done by the buyer after approval from the user, through a smart contract for example.

      send $TICKET_CONTRACT_ADDRESS \
          "safeTransferFrom(address,address,uint256)" \
          $FROM_ADDRESS $TO_ADDRESS $TICKET_ID
  4. Buyer eventually claims ETH

    • When ticket becomes fulfillable, the new owner (market maker) submits a claim:

      send $EXIT_HELPER_CONTRACT_ADDRESS \
          "multiClaim(address[],uint256[][],uint32[][])" \
          $ARRAY_OF_EXIT_QUEUE_ADDRESSES \
          $ARRAY_OF_ARRAYS_OF_TICKET_IDS \
          $ARRAY_OF_ARRAYS_OF_CASK_IDS

Last updated

Was this helpful?