Staking Pool
StakingPool
is one of the most important pieces of the protocol as it handles the liquid staking of tokens. When a user stakes some amount of tokens (such as LINK), they receive liquid staking tokens (such as stLINK) at a 1:1 ratio. These liquid staking tokens represent a userโs staked balance and must be burned to withdraw the underlying tokens they represent.
Once tokens have been staked into the pool, they are deposited into one or more strategy contracts controlled by the pool. These strategies then take the deposited tokens and use them to earn rewards which are distributed to stakers.
In the case of LINK staking, the tokens are deposited into the Chainlink staking contracts.
The liquid staking token issued by StakingPool
is a rebasing token so rewards will be automatically distributed to stakers without any action on their part. This is possible by using a โsharesโ accounting model where a share represents a certain percentage ownership of the pool. When a user stakes, they receive a number of shares determined by the ratio of total shares to total tokens in the pool. The amount of shares a user owns remains constant unless they stake or withdraw but the ratio of total shares to total tokens changes with each rebase so their shares will be worth more tokens after each rebase. The new token value of their shares will be automatically reflected in their token balance.
While unlikely, it is also possible for a rebase to be negative if strategies earned net negative rewards since the last rebase due to slashing penalties. In this case, each share will be worth less tokens so a userโs token balance will decrease.
ERC20 Functions
All standard ERC20 functions are implemented for StakingPool
View Functions
token
Returns the staking token for the pool
Return Values
priorityPool
Returns the address of the priority pool for this pool
Return Values
totalShares
Returns the total amount of shares in the pool
Return Values
sharesOf
Returns the amount of shares owned by an account
Parameters
Return Values
getSharesByStake
Returns the amount of shares that corresponds to an amount of stake
Parameters
Return Values
getStakeByShares
Returns the amount of stake that corresponds to an amount of shares
Parameters
Return Values
totalStaked
Returns the total amount of tokens in the pool
Return Values
getStrategies
Returns a list of all active strategies
Return Values
getFees
Returns a list of all fees
Return Values
getMaxDeposits
Returns the maximum amount that can be deposited into the pool
Return Values
getMinDeposits
Returns the minimum amount that must remain the pool
Return Values
getUnusedDeposits
Returns the amount of tokens in the pool that are not deposited into a strategy
Return Values
getStrategyDepositRoom
Returns the available deposit room for this pool's strategies
Return Values
canDeposit
Returns the available deposit room in the pool
Return Values
canWithdraw
Returns the available withdrawal room in the pool
Return Values
getStrategyRewards
Returns the amount of rewards earned since the last update and the amount of fees that will be paid on the rewards
Parameters
Return Values
Write Functions
deposit
Deposits staking tokens and mints liquid staking tokens
Parameters
withdraw
Withdraws staking tokens and burns liquid staking tokens
Parameters
transferAndCall
Transfers tokens to an address and calls onTokenTransfer
with additional data if the recipient is a contract
Parameters
strategyDeposit
Deposits tokens into a strategy
Parameters
strategyWithdraw
Withdraws tokens from a strategy
Parameters
addStrategy
Adds a new strategy
Parameters
removeStrategy
Removes a strategy
Parameters
reorderStrategies
Reorders strategies
Parameters
addFee
Adds a new fee
Parameters
updateFee
Updates an existing fee
Parameters
updateStrategyRewards
Updates and distributes rewards based on balance changes in strategies
Parameters
depositLiquidity
Deposits available liquidity into strategies by order of priority
Deposits into strategies[0] until its limit is reached, then strategies[1], and so on
transferShares
Transfers shares from the sender to another account
Parameters
transferShares
Transfers shares between accounts
Parameters
setPriorityPool
Sets the address of the priority pool
Parameters
Last updated