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
token
address
Address of staking token
priorityPool
Returns the address of the priority pool for this pool
Return Values
priorityPool
address
address of priority pool
totalShares
Returns the total amount of shares in the pool
Return Values
sharesAmount
uint256
Total shares in the pool
sharesOf
Returns the amount of shares owned by an account
Parameters
_account
address
Address of account
Return Values
sharesBalance
uint256
Total shares owned by account
getSharesByStake
Returns the amount of shares that corresponds to an amount of stake
Parameters
_amount
uint256
Amount of stake
Return Values
sharesAmount
uint256
Corresponding amount of shares
getStakeByShares
Returns the amount of stake that corresponds to an amount of shares
Parameters
_amount
uint256
Amount of shares
Return Values
stakeAmount
uint256
Corresponding amount of stake
totalStaked
Returns the total amount of tokens in the pool
Return Values
stakedAmount
uint256
Total tokens in the pool
getStrategies
Returns a list of all active strategies
Return Values
strategies
address[]
List of strategy contract addresses
getFees
Returns a list of all fees
Return Values
fees
struct Fee[]
list of fees
getMaxDeposits
Returns the maximum amount of tokens that the pool can hold
Return Values
maxDeposits
uint256
maximum deposit limit
getMinDeposits
Returns the minimum amount of tokens that must remain in the pool
Return Values
minDeposits
uint256
minimum deposit limit
getUnusedDeposits
Returns the amount of unused asset tokens sitting in this pool outside a strategy
These tokens earn no yield and will be deposited ASAP on the next call to _depositLiquidity
Return Values
unusedDeposits
uint256
amount of unused tokens
getStrategyDepositRoom
Returns the sum of available deposit room across all strategies
Does not account for unused deposits sitting in pool
Return Values
strategyDepositRoom
uint256
available deposit room in strategies
canDeposit
Returns the total available deposit room for this pool
Accounts for unused deposits sitting in pool
Return Values
canDeposit
uint256
available deposit room
canWithdraw
Returns the total available withdrawal room for this pool
Return Values
canWithdraw
uint256
available withdrawal room
getStrategyRewards
Returns the amount of rewards earned since the last call to updateStrategyRewards and the amount of fees that will be paid on the rewards
Parameters
_strategyIdxs
uint256[]
Indexes of strategies to sum rewards/fees for
Return Values
rewards
int256
Total rewards
fees
uint256
Total fees
Write Functions
deposit
Deposits staking tokens and mints liquid staking tokens
Parameters
_account
address
address of account to stake for
_amount
uint256
amount to stake
_data
bytes
list of deposit data passed to strategies
withdraw
Withdraws staking tokens and burns liquid staking tokens
Parameters
_account
address
Address of account to withdraw for
_receiver
address
Address to receive withdrawal
_amount
uint256
Amount to withdraw
_data
bytes
list of withdrawal data passed to strategies
transferAndCall
Transfers tokens to an address and calls onTokenTransfer
with additional data if the recipient is a contract
Parameters
_to
address
Address to send the tokens to
_value
uint256
Value of token transfer
_data
bytes
Calldata included in the transfer
strategyDeposit
Manually deposits asset tokens into a specific strategy
Parameters
_index
uint256
Index of strategy
_amount
uint256
Amount to deposit
strategyWithdraw
Manually withdraws asset tokens from a strategy
Parameters
_index
uint256
Index of strategy
_amount
uint256
Amount to withdraw
addStrategy
Adds a new strategy
Parameters
_strategy
address
Address of strategy contract
removeStrategy
Removes a strategy
Parameters
_index
uint256
Index of strategy
_strategyUpdateData
bytes
update data passed to strategy
_strategyWithdrawalData
bytes
withdrawal data passed to strategy
reorderStrategies
Reorders strategies
Parameters
_newOrder
uint256[]
List containing strategy indexes in a new order
addFee
Adds a new fee
Parameters
_receiver
address
Address of fee receiver
_feeBasisPoints
uint256
Fee in basis points
updateFee
Updates an existing fee
Parameters
_index
uint256
Index of fee
_receiver
address
Address of fee receiver
_feeBasisPoints
uint256
Fee in basis points
updateStrategyRewards
Distributes rewards/fees based on balance changes in strategies since the last update
Parameters
_strategyIdxs
uint256[]
Indexes of strategies to update rewards for
_data
bytes
update data passed to each strategy
transferShares
Transfers shares from the sender to another account
Parameters
_receipient
address
account to transfer shares to
_sharesAmount
uint256
amount of shares to transfer
transferShares
Transfers shares between accounts
Parameters
_sender
address
account to transfer shares from
_receipient
address
account to transfer shares to
_sharesAmount
uint256
amount of shares to transfer
setPriorityPool
Sets the address of the priority pool
Parameters
_priorityPool
address
address of priority pool
setUnusedDepositLimit
Sets the maximum amount of unused deposits that can sit in the pool
Parameters
_unusedDepositLimit
uint256
maximum amount of unused deposits
Last updated