SDL Pool Primary
The SDLPoolPrimary
allows users to stake and/or lock SDL tokens and receive reSDL (Reward Escrowed SDL) in return. SDL stakers will receive a portion of protocol rewards proportional to the amount of reSDL they hold. They will also receieve priority staking access in the PriorityPool
over non reSDL holders. A user's reSDL balance is represented by one or multiple NFTs which are minted when SDL is staked/locked in the pool.
If a user stakes but does not lock their SDL, they will receive an NFT representing reSDL at a 1:1 ratio to the SDL they staked. If a user locks their SDL, they will receive an additional boosted amount of reSDL depending on the duration they have chosen to lock for, resulting in a ratio greater than 1:1. The calculation for the amount of boost received for a specific amount of SDL and locking duration is handled by the LinearBoostController
.
If an reSDL position is not locked, the underlying SDL can be withdrawn at any time. If a position is locked, the withdrawal period must be initiated before SDL can be withdrawn. The withdrawal period can only be initiated after at least half of the total locking duration has elapsed and the withdrawal period itself will have a duration of exactly half the total locking duration. For the duration of the withdrawal period, the boost amount for the position will be set to 0 and only after this period has elapsed, the underlying SDL can be withdrawn.
A user can hold any number of reSDL NFTs and NFTs are transferrable in all states but by transferring an NFT, the ownership of the underlying SDL is also transferred.
This contract is deployed only on the primary chain.
ERC721 Functions
All standard IERC721 and IERC721Metadata functions are implemented for SDLPoolPrimary
View Functions
tokenPools
Returns the rewards pool for a token
Parameters
_token
address
address of token
Return Values
rewardsPool
address
address of rewards pool
supportedTokens
Returns a list of supported tokens
Return Values
tokens
address[]
list of token addresses
isTokenSupported
Returns true/false to whether a given token is supported
Parameters
_token
address
address of token
Return Values
isSupported
bool
is token supported
tokenBalances
Returns balances of supported tokens within the controller
Return Values
tokens
address[]
list of supported tokens
balances
uint256[]
list of token balances
staked
Returns an account's staked amount for use by reward pools controlled by this contract
Parameters
_account
address
address of account
Return Values
staked
uint256
account's staked amount
totalStaked
Returns the total staked amount for use by reward pools controlled by this contract
Return Values
totalStaked
uint256
total staked amount
withdrawableRewards
Returns a list of withdrawable rewards for an account
Parameters
_account
address
address of account
Return Values
withdrawableRewards
uint256[]
list of withdrawable reward amounts for each token
sdlToken
Returns the address of the SDL token
Return Values
sdlToken
address
address of SDL token
boostController
Returns the address of the boost controller
Return Values
boostController
address
address of boost controller
lastLockId
Returns the id of the most recently minted lock
Return Values
lastLockId
uint256
latest lock id
ccipController
Returns the address of the CCIP controller for this contract
Return Values
ccipController
address
address of CCIP controller
effectiveBalanceOf
Returns the effective stake balance of an account (the effective stake balance includes the actual amount of tokens an account has staked across all locks plus any applicable boost gained by locking)
Parameters
_account
address
address of account
Return Values
effectiveBalance
uint256
effective stake balance
totalEffectiveBalance
Returns the sum of effective balances across all accounts
Return Values
totalEffectiveBalance
uint256
total effective balance
getLocks
Returns the list of locks that corresponds to _lockIds
Parameters
_lockIds
uint256[]
list of lock ids
Return Values
locks
Lock[]
list of locks
getLockIdsByOwner
Returns a list of lockIds owned by an account
Parameters
_owner
address
address of account
Return Values
lockIds
uint256[]
list of lockIds
delegatorPool
Returns the address of the delegator pool
Return Values
delegatorPool
address
address of delegator pool
Write Functions
distributeTokens
Distributes token balances to their respective rewards pools
Parameters
_tokens
address[]
list of token addresses
distributeToken
Distributes a token to its respective rewards pool
Parameters
_token
address
address of token
withdrawRewards
Withdraws an account's earned rewards for a list of tokens
Parameters
_tokens
address[]
list of token addresses to withdraw rewards from
addToken
Adds a new token
Parameters
_token
address
address of token to add
_rewardsPool
address
address of token rewards pool to add
removeToken
Removes a supported token
Parameters
_token
address
address of token
setBaseURI
Sets the base URI for all tokens
Parameters
_baseURI_
string
base URI
setBoostController
Sets the boost controller
Parameters
_boostController
address
address of boost controller
setCCIPController
Sets the CCIP controller
Parameters
_ccipController
address
address of CCIP controller
onTokenTransfer
ERC677 implementation to stake/lock SDL tokens or distribute rewards
Parameters
_sender
address
sender of the stake
_value
uint256
value of the token transfer
_calldata
bytes
encoded lockId (uint256) and lockingDuration (uint64)
extendLockDuration
Extends the locking duration of a lock
Parameters
_lockId
uint256
id of lock
_lockingDuration
uint64
new locking duration to set
initiateUnlock
Initiates the unlock period for a lock
Parameters
_lockId
uint256
id of lock
withdraw
Withdraws unlocked SDL
Parameters
_lockId
uint256
id of the lock
_amount
uint256
amount to withdraw from the lock
handleOutgoingRESDL
Handles an outgoing transfer of an reSDL lock to another chain
Parameters
_sender
address
sender of lock
_lockId
uint256
id of lock
_sdlReceiver
address
address to receive underlying SDL on this chain
handleIncomingRESDL
Handles an incoming transfer of an reSDL lock from another chain
Parameters
_receiver
address
receiver of lock
_lockId
uint256
id of lock
_lock
Lock
lock
handleIncomingUpdate
Handles an incoming update from a secondary chain
Parameters
_numNewRESDLTokens
uint256
number of new reSDL locks to be minted on other chain
_totalRESDLSupplyChange
int256
total reSDL supply change on other chain
migrate
Used by the delegator pool to migrate user stakes to this contract
Parameters
_sender
address
owner of lock
_amount
uint256
amount to stake
_lockingDuration
uint64
duration of lock
Last updated