Priority Pool
Last updated
Last updated
The PriorityPool
allows users to queue asset tokens which are eventually deposited into a StakingPool
when deposit room becomes available. The liquid staking tokens (LSTs) minted by the StakingPool
are then distributed using a merkle tree.
Each user will continuously receive LSTs as more depositd are made into the StakingPool
until they have received an amount equal to the amount of asset tokens they deposited into the PriorityPool
. The rate at which each user receives LSTs is dependent on the user's reSDL balance in the SDLPool
. A higher reSDL balance entitles the user to receive LSTs at a faster rate than a user with a smaller reSDL balance. Users that hold no reSDL can also deposit into the PriorityPool
but they will receive no LSTs as long as there are users with deposits in the PriorityPool
that also hold reSDL.
The secondary function of the PriorityPool
is to act as a liquidity buffer for the StakingPool
it deposits into. When a user redeems LSTs for the underlying asset token, these LSTs will be swapped with queued asset tokens from the PriorityPool
if possible before queuing tokens in the WithdrawalPool
. This both reduces gas costs for the user and ensures that the StakingPool
earns the most yield possible as yield earning asset tokens remain in the pool instead of being withdrawn.
Returns the address of the token this pool handles
Name | Type | Description |
---|---|---|
Returns the address of the staking pool that this pool deposits into
Name | Type | Description |
---|---|---|
Returns the address of the SDL pool
Returns the address of the oracle that handles distribution of liquid staking tokens
Returns the address of the rebase controller
Returns the address of the withdrawal pool
Returns the minimum amount of tokens required to execute a deposit
Returns the maximum amount of tokens that can be deposited in a single deposit
Returns the current status of the pool
0 - OPEN (nothing disabled) 1 - DRAINING (deposits disabled) 2 - CLOSED (deposits/withdrawals disabled)
Returns the merkle root for the latest distribution tree
Returns the ipfs hash of the balance data for the latest distribution tree
Returns the number of unique addresses contained in the latest distribution tree
Returns the total amount of token deposits in the pool waiting to be deposited into the staking pool
Returns a list of all accounts that have deposited into the pool in the order that they appear in the distribution tree
Returns the index of an account representing it's position in the distribution tree
Returns an account's current amount of deposits in the pool (_distributionAmount
is stored on IPFS)
Returns an account's current amount of withdrawable liquid staking tokens (_distributionShareAmount
is stored on IPFS)
Returns the total amount of asset tokens that an account can withdraw (includes account's queued tokens and stLINK balance and takes into account both priority pool and staking pool liquidity)
Returns whether a call should be made to performUpkeep to deposit queued/unused tokens into staking pool strategies
Returns the amount of new deposits into the staking pool since the last call to updateDistribution and the amount of shares received for those deposits
Returns account data used for calculating a new merkle tree
A new merkle tree is calculated based on users' reSDL balance and the number of tokens they have queued Accounts are returned in the same order as they are in the merkle tree
ERC677 implementation to receive a token deposit or withdrawal
Can receive both asset tokens (deposit) and liquid staking tokens (withdrawal)
Deposits asset tokens into the staking pool and/or queues them
Withdraws asset tokens
Will unqueue sender's asset tokens before swapping liquid staking tokens if there is sufficient liquidity and _shouldUnqueue is set to true
Withdraws queued deposits from the priority pool
Claims withdrawable liquid staking tokens
Deposits queued tokens and/or unused tokens sitting in staking pool
Deposits queued and/or unused tokens
Distributes a new batch of liquid staking tokens to users that have queued deposits
Executes a batch of withdrawals that have been queued in the withdrawal pool
Withdraws tokens from the staking pool and sends them to the withdrawal pool
Pauses queueing and unqueueing so a new merkle tree can be generated
Sets the pool's status
Sets the pool's status to CLOSED
Sets the minimum and maximum amount that can be deposited into strategies at once
Sets the distribution oracle
Sets the rebase controller
This address has authorization to close the pool in case of emergency
Sets the withdrawal pool
Name | Type | Description |
---|---|---|
Name | Type | Description |
---|---|---|
Name | Type | Description |
---|---|---|
Name | Type | Description |
---|---|---|
Name | Type | Description |
---|---|---|
Name | Type | Description |
---|---|---|
Name | Type | Description |
---|---|---|
Name | Type | Description |
---|---|---|
Name | Type | Description |
---|---|---|
Name | Type | Description |
---|---|---|
Name | Type | Description |
---|---|---|
Name | Type | Description |
---|---|---|
Name | Type | Description |
---|---|---|
Name | Type | Description |
---|---|---|
Name | Type | Description |
---|---|---|
Name | Type | Description |
---|---|---|
Name | Type | Description |
---|---|---|
Name | Type | Description |
---|---|---|
Name | Type | Description |
---|---|---|
Name | Type | Description |
---|---|---|
Name | Type | Description |
---|---|---|
Name | Type | Description |
---|---|---|
Name | Type | Description |
---|---|---|
Name | Type | Description |
---|---|---|
Name | Type | Description |
---|---|---|
Name | Type | Description |
---|---|---|
Name | Type | Description |
---|---|---|
Name | Type | Description |
---|---|---|
Name | Type | Description |
---|---|---|
Name | Type | Description |
---|---|---|
Name | Type | Description |
---|---|---|
Name | Type | Description |
---|---|---|
Name | Type | Description |
---|---|---|
Name | Type | Description |
---|---|---|
Name | Type | Description |
---|---|---|
Name | Type | Description |
---|---|---|
Name | Type | Description |
---|---|---|
token
address
address of token
stakingPool
address
address of staking pool
sdlPool
address
address of SDL pool
distributionOracle
address
address of distribution oracle
rebaseController
address
address of rebase controller
withdrawalPool
address
address of withdrawal pool
depositMin
uint256
queue deposit minimum
depositMax
uint256
queue deposit maximum
poolStatus
PoolStatus
current status of the pool
merkleRoot
bytes32
current merkle root
ipfsHash
bytes32
current ipfsHash
merkleTreeSize
uint256
current merkle tree size
totalQueued
uint256
total deposits in the pool
accounts
address[]
list of accounts
_account
address
account address
index
uint256
account index
_account
address
account address
_distributionAmount
uint256
account's distribution amount from the latest distribution tree
queuedTokens
uint256
amount of queued tokens for account
_account
address
account address
_distributionShareAmount
uint256
account's distribution share amounts from the latest distribution tree
lsdTokens
uint256
withdrawable LSD tokens for account
_account
address
account address
_distributionAmount
uint256
account's distribution amount from the latest distribution tree
canWithdraw
uint256
amount of withrawable tokens
upkeepNeeded
bool
whether a call should be made to performUpkeep
upkeepNeeded
bytes
encoded amount of tokens to be deposited
deposits
uint256
amount of deposits
shares
uint256
amount of shares
accounts
address[]
list of all accounts that have ever queued tokens
sdlBalances
uint256[]
list of SDL balances for each account
queuedBalances
uint256[]
list of queued token amounts for each account (ignores distributed LSD tokens)
_sender
address
sender of the transfer
_value
uint256
value of the transfer
_calldata
bytes
encoded shouldQueue (bool) and deposit data to pass to staking pool strategies (bytes[])
_amount
uint256
amount to deposit
_shouldQueue
bool
whether tokens should be queued if there's no room in the staking pool
_data
bytes
deposit data passed to staking pool strategies
_amountToWithdraw
uint256
amount of tokens to withdraw
_amount
uint256
amount as recorded in sender's merkle tree (stored on IPFS)entry
_sharesAmount
uint256
shares amount as recorded in sender's merkle tree (stored on IPFS)entry
_merkleProof
bytes32[]
merkle proof for sender's merkle tree entry (generated from IPFS data)
_shouldUnqueue
bool
whether tokens should be unqueued before taking LSD tokens
_shouldQueueWithdrawal
bool
whether a withdrawal should be queued if the full withdrawal amountcannot be satisfied
_amountToUnqueue
uint256
amount of tokens to unqueue
_amount
uint256
amount as recorded in sender's merkle tree entry (stored on IPFS)
_sharesAmount
uint256
shares amount as recorded in sender's merkle tree entry (stored on IPFS)
_merkleProof
bytes32[]
merkle proof for sender's merkle tree entry (generated from IPFS data)
_amount
uint256
amount as recorded in sender's merkle tree entry
_sharesAmount
uint256
shares amount as recorded in sender's merkle tree entry
_merkleProof
bytes32[]
merkle proof for sender's merkle tree entry
_queueDepositMin
uint256
min amount of tokens required for deposit into staking pool strategies
_queueDepositMax
uint256
max amount of tokens that can be deposited into staking pool strategies at once
_data
bytes[]
list of deposit data passed to staking pool strategies
_performData
bytes[]
encoded list of deposit data to be passed to staking pool strategies (bytes[])
_merkleRoot
bytes32
new merkle root for the distribution tree
_ipfsHash
bytes32
new ipfs hash for the distribution tree (CIDv0, no prefix - only hash)
_amountDistributed
uint256
amount of LSD tokens distributed in this distribution
_sharesAmountDistributed
uint256
amount of LSD shares distributed in this distribution
_amount_
uint256
total amount to withdraw
_data_
bytes
list of withdrawal data passed to staking pool strategies
_status
PoolStatus
pool status
_queueDepositMin
uint128
minimum amount of tokens required for deposit into staking pool strategies
_queueDepositMax
uint128
maximum amount of tokens that can be deposited into staking pool strategies at once
_distributionOracle
address
address of oracle
_rebaseController
address
address of rebase controller
_withdrawalPool
address
address of withdrawal pool