Skip to content

Withdrawal Pool

The WithdrawalPool allows users to queue LST withdrawals if there is insufficient liquidity in the PriorityPool to satisfy the withdrawal amount. LST withdrawals will be added to a FIFO queue and will be fulfilled as the PriorityPool receives new deposits and/or as funds become available for withdrawal within the StakingPool.

Returns the address of the token this pool handles

function token() external view returns (address)
Name Type Description
token address address of token

Returns the address of the liquid staking token this pool handles

function lst() external view returns (address)
Name Type Description
lst address address of lst

Returns the address of the priority pool

function priorityPool() external view returns (address)
Name Type Description
priorityPool address address of Priority Pool

Returns the index of the withdrawal that’s at the front of the queue

function indexOfNextWithdrawal() external view returns (uint256)
Name Type Description
indexOfNextwithdrawal uint256 index of withdrawal at front of queue

Returns the index where all batches before have had all withdrawal requests fully withdrawn

function withdrawalBatchIdCutoff() external view returns (uint128)
Name Type Description
withdrawalBatchIdCutoff uint128 batch id cutoff

Returns the index where all requests before have been fully withdrawn

function withdrawalIdCutoff() external view returns (uint128)
Name Type Description
withdrawalIdCutoff uint128 withdrawal id cutoff

Returns the min amount of LSTs that can be queued for withdrawal

function minWithdrawalAmount() external view returns (uint256)
Name Type Description
minWithdrawalAmount uint256 min withdrawal amount

Returns the min amount of time between execution of withdrawals

function minTimeBetweenWithdrawals() external view returns (uint64)
Name Type Description
minTimeBetweenwithdrawals uint64 min time between withdrawals

Returns the time of last execution of withdrawals

function timeOfLastWithdrawal() external view returns (uint64)
Name Type Description
timeOfLastWithdrawal uint64 time of last withdrawal

Returns the total amount of liquid staking tokens queued for withdrawal

function getTotalQueuedWithdrawals() external view returns (uint256)
Name Type Description
totalQueuedWithdrawals uint256 total amount queued for withdrawal

Returns the total amount of liquid staking tokens queued for withdrawal by an account

function getAccountTotalQueuedWithdrawals(address _account) external view returns (uint256)
Name Type Description
_account address address of account
Name Type Description
accountTotalQueuedWithdrawals uint256 total amount queued across all withdrawals

Returns a list of withdrawals

function getWithdrawals(uint256[] _withdrawalIds) external view returns (struct WithdrawalPool.Withdrawal[])
Name Type Description
_withdrawalIds uint256[] list of withdrawal ids
Name Type Description
withdrawals struct WithdrawalPool.Withdrawal[] list of withdrawals corresponding to withdrawal ids

Returns batch ids for a list of withdrawals

function getBatchIds(uint256[] _withdrawalIds) public view returns (uint256[])
Name Type Description
_withdrawalIds uint256[] list of withrawal ids
Name Type Description
batchIds uint256[] list of batch ids corresponding to withdrawal ids

Returns a list of withdrawal ids owned by an account

function getWithdrawalIdsByOwner(address _account) public view returns (uint256[])
Name Type Description
_account address address of account
Name Type Description
withdrawalIds uint256[] list of withdrawal ids

Returns a list of finalized and partially finalized withdrawal ids owned by an account

These withdrawals have funds available for the owner to withdraw

function getFinalizedWithdrawalIdsByOwner(address _account) external view returns (uint256[], uint256)
Name Type Description
_account address address of account
Name Type Description
withdrawalIds uint256[] list of withdrawal ids
withdrawable uint256 total withdrawable across all account’s withdrawals

Returns whether withdrawals should be executed based on available withdrawal space

function checkUpkeep(bytes) external view returns (bool, bytes)
Name Type Description
upkeepNeeded bool true if withdrawal should be executed, false otherwise
bytes

Executes a group of fully and/or partially finalized withdrawals owned by the sender

function withdraw(uint256[] _withdrawalIds, uint256[] _batchIds) external
Name Type Description
_withdrawalIds uint256[] list of withdrawal ids to execute
_batchIds uint256[] list of batch ids corresponding to withdrawal ids

Executes a group of fully finalized withdrawals (owner-only)

function forceWithdraw(uint256[] _withdrawalIds, uint256[] _batchIds) external
Name Type Description
_withdrawalIds uint256[] list of withdrawal ids to execute
_batchIds uint256[] list of batch ids corresponding to withdrawal ids

Queues a withdrawal of liquid staking tokens for an account

function queueWithdrawal(address _account, uint256 _amount) external
Name Type Description
_account address address of account
_amount uint256 amount of LST

Deposits asset tokens in exchange for liquid staking tokens, finalizing withdrawals
starting from the front of the queue

function deposit(uint256 _amount) external
Name Type Description
_amount uint256 amount of tokens to deposit

Executes withdrawals if there is sufficient available withdrawal space

function performUpkeep(bytes _performData) external
Name Type Description
_performData bytes encoded list of withdrawal data passed to staking pool strategies

Updates the withdrawalBatchIdCutoff

This value is used to more efficiently return data in getBatchIds by skipping old withdrawal batches

function updateWithdrawalBatchIdCutoff() external

Sets the minimum amount of liquid staking tokens that can be queued for withdrawal

function setMinWithdrawalAmount(uint256 _minWithdrawalAmount) external
Name Type Description
_minWithdrawalAmount uint256 minimum token amount

Sets the minimum amount of of time between calls to performUpkeep to finalize withdrawals

function setMinTimeBetweenWithdrawals(uint64 _minTimeBetweenWithdrawals) external
Name Type Description
_minTimeBetweenWithdrawals uint64 minimum time