StakePrizePool
The Stake Prize Pool is a prize pool in which users can deposit an ERC-20 token. These tokens are simply held by the Stake Prize Pool and become eligible for prizes. Prizes are added manually by anyone (in our case they are added by the Lido protocol every 24 hours (at 12AM UTC)) and are distributed to users at the end of the prize period.
Write methods description
initialize()
Allows to initialize the contract during the deployment.
Parameters:
Name | Type | Description |
---|---|---|
_owner | address | An address of the Stake Prize Pool owner. |
_stakeToken | address | An address of the stake token. |
_rewardToken | address | The ASX token address. |
_rewardPerSecond | uint256 | The reward per second that will be used in time of distribution of ASX tokens. Can be updated by the admin after deployment of smart-contract. |
_claimInterval | uint32 | The reward claim interval, in seconds. Can be updated by the admin after deployment of smart-contract. |
_freeExitDuration | uint32 | A duration (in seconds) that will take place after each finished draw when all users are able to withdraw their stETH without paying an exit fee. An exit fee is calculated using Lido APR. Can be updated by the admin after deployment of smart-contract. |
_firstLidoRebaseTimestamp | uint32 | The closest 12 PM UTC timestamp in the future from now. |
_lidoAPR | uint16 | Annual percentage rate of Lido protocol. Should be specified with 2 decimal places (ex. 500 - 5.00%, 6000 - 60.00%). Maximum possible value is equal to 10000 - 100.00%. Can be updated by the admin after deployment of smart-contract. |
award()
Called by the prize flush to award prizes. The amount awarded must be less than the awardBalance()
.
Parameters:
Name | Type | Description |
---|---|---|
_to | address | The address of the winner that receives the award. |
_amount | uint256 | The amount of assets to be awarded. |
awardExternalERC20()
Called by the Prize Flush to award external ERC-20 prizes. Used to award any arbitrary tokens held by the Prize Pool.
Parameters:
Name | Type | Description |
---|---|---|
_to | address | The address of the winner that receives the award. |
_externalToken | address | The address of the external asset token being awarded. |
_amount | uint256 | The amount of external assets to be awarded. |
awardExternalERC721()
Called by the Prize Flush to award external ERC-721 prizes. Used to award any arbitrary NFTs held by the Prize Pool.
Parameters:
Name | Type | Description |
---|---|---|
_to | address | The address of the winner that receives the award. |
_externalToken | address | The address of the external NFT token being awarded. |
_tokenIds | uint256[] | An array of NFT token IDs to be transferred. |
balance()
Returns the total underlying balance of all assets. This includes both principal and interest.
captureAwardBalance()
Captures any available interest as reward balance. This function also captures the reserve fees.
claim()
Claims reward in ASX tokens that distributes on users’ deposits.
Parameters:
Name | Type | Description |
---|---|---|
_user | address | The user for whom to claim reward. |
compLikeDelegate()
Delegate the votes for a Compound COMP-like token held by the prize pool.
Parameters:
Name | Type | Description |
---|---|---|
_compLike | address | The COMP-like token held by the prize pool that should be delegated. |
_to | address | The address to delegate to. |
depositTo()
Deposit assets into the Prize Pool in exchange for tokens.
Parameters:
Name | Type | Description |
---|---|---|
_to | address | The address receiving the newly minted tokens. |
_amount | uin256 | The amount of assets to deposit. |
depositToAndDelegate()
Deposit assets into the Prize Pool in exchange for tokens, then sets the delegate on behalf of the caller.
Parameters:
Name | Type | Description |
---|---|---|
_to | address | The address receiving the newly minted tokens. |
_amount | uint256 | The amount of assets to deposit. |
_delegate | address | The address to delegate to for the caller. |
setBalanceCap()
Allows the owner to set a balance cap per token
for the pool. If a user wins, his balance can go over the cap. He will be able to withdraw the excess but not deposit. Needs to be called after deploying a prize pool to be able to deposit into it.
Parameters:
Name | Type | Description |
---|---|---|
_balanceCap | uint256 | New balance cap. |
Return:
Name | Type | Description |
---|---|---|
_success | bool |
|
setClaimInterval()
Sets the claim interval for the prize pool that will be used in time of claiming of ASX tokens. Only callable by the owner.
Parameters:
Name | Type | Description |
---|---|---|
_claimInterval | uint32 | The new claim interval, in seconds. |
setFreeExitDuration()
Sets a new duration (in seconds) that will take place after each finished draw when all users are able to withdraw their stETH without paying an exit fee. Only callable by the owner.
Parameters:
Name | Type | Description |
---|---|---|
_freeExitDuration | uint32 | A new free exit duration (in seconds). |
setLidoAPR()
Sets a new annual percentage rate of Lido protocol. Should be specified with 2 decimal places (ex. 500 - 5.00%, 6000 - 60.00%). Maximum possible value is equal to 10000 - 100.00%. Only callable by the owner.
Parameters:
Name | Type | Description |
---|---|---|
_lidoAPR | uint16 | A new Lido APR. |
setDrawBeacon()
Sets the DrawBeacon contract address. Only callable by the owner.
Parameters:
Name | Type | Description |
---|---|---|
_drawBeacon | address | DrawBeacon contract address to set. |
setLiquidityCap()
Allows the Governor to set a cap on the amount of liquidity that the pool can hold. Only callable by the owner.
Parameters:
Name | Type | Description |
---|---|---|
_liquidityCap | uint256 | The new liquidity cap for the prize pool. |
setPrizeFlush()
Sets the PrizeFlush contract address. Only callable by the owner.
Parameters:
Name | Type | Description |
---|---|---|
_prizeFlush | address | PrizeFlush contract address to set. |
setRewardPerSecond()
Sets the reward per second for the prize pool that will be used for ASX tokens distribution. Only callable by the owner.
Parameters:
Name | Type | Description |
---|---|---|
_rewardPerSecond | uint256 | The new reward per second. |
setTicket()
Sets the prize pool Ticket contract address. Only callable by the owner.
Parameters:
Name | Type | Description |
---|---|---|
_ticket | address | Address of the Ticket to set. |
Return:
Name | Type | Description |
---|---|---|
_success | bool |
|
transferExternalERC20()
Called by the PrizeFlush to transfer out external ERC-20 tokens. Used to transfer out tokens held by the Prize Pool. Could be liquidated, or anything.
Parameters:
Name | Type | Description |
---|---|---|
_to | address | The address of the winner that receives the award. |
_externalToken | address | The address of the external asset token being awarded. |
_amount | uint256 | The amount of external assets to be awarded. |
updateUserRewardAndFormer()
Called by the ticket to update the user's reward and former in time of transfer.
Parameters:
Name | Type | Description |
---|---|---|
_user | address | The user where need to update reward and former. |
_beforeBalance | uint256 | The balance of the user before transfer. |
_afterBalance | uint256 | The balance of the user after transfer. |
withdrawFrom()
Withdraw assets from the PrizePool instantly. The withdrawn amount can be less than specified in the parameters. This is due to the fact that if the user withdraws funds after the free exit window, a fee is deducted from him, which is equal to the amount that the Lido protocol would distribute for this user during the rebasing operation.
Parameters:
Name | Type | Description |
---|---|---|
_from | address | The address to redeem tokens from. |
_amount | uint256 | The amount of tokens to redeem for assets. |
Return:
Name | Type | Description |
---|---|---|
_amount | uint256 | The actual amount withdrawn. |
claimOwnership()
Allows the pendingOwner
address to claim the owner role. This function is only callable by the pendingOwner
.
renounceOwnership()
Leaves the contract without owner. It will not be possible to call the owner's functions anymore. Can only be called by the current owner. The method does not take any parameters. Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner.
transferOwnership()
Transfers ownership of the contract to a _pendingOwner
. Can only be called by the current owner.
Parameters:
Name | Type | Description |
---|---|---|
_newOwner | address | An account that will become the |
Read methods description
VERSION()
Semver version.
awardBalance()
Called by the Prize Flush to award prizes. The amount awarded must be less than the awardBalance()
.
canAwardExternal()
Checks with the Prize Pool if a specific token type may be awarded as an external prize.
Parameters:
Name | Type | Description |
---|---|---|
_externalToken | address | The address of the token to check. |
Return:
Name | Type | Description |
---|---|---|
_canAward | bool |
|
getAccountedBalance()
Read internal Ticket accounted balance.
getBalanceCap()
Read internal balanceCap
variable.
getClaimInterval()
Read claimInterval
variable.
getFreeExitDuration()
Read freeExitDuration
variable.
getDeploymentTimestamp()
Read deploymentTimestamp
variable.
getFirstLidoRebaseTimestamp()
Read firstLidoRebaseTimestamp
variable.
getLidoAPR()
Read lidoAPR
variable.
getClaimableReward()
Calculates actual claimable amount of ASX tokens for the user.
getDistributionEnd()
Read distributionEnd
variable.
getLastUpdated()
Read lastUpdated
variable.
getLiquidityCap()
Read internal liquidityCap
variable.
getPrizeFlush()
Read prizeFlush
variable.
getRewardPerSecond()
Read rewardPerSecond
variable.
getRewardPerShare()
Read rewardPerShare
variable.
getRewardToken()
Read rewardToken
variable.
getTicket()
Read ticket
variable.
getDrawBeacon()
Read drawBeacon
variable.
getToken()
Read token
variable.
getUserStakelnfo()
Read userStakeInfo
variable.
Parameters:
Name | Type | Description |
---|---|---|
_user | address | The address of the user to retrieve stake info about. |
isControlled()
Checks if a specific token is controlled by the Prize Pool.
Parameters:
Name | Type | Description |
---|---|---|
_controlledToken | address | The address of the token to check. |
Return:
Name | Type | Description |
---|---|---|
_isControlled | bool |
|
onERC721Received()
Whenever an {IERC721} _tokenId
token is transferred to this contract via {IERC721-safeTransferFrom} by _operator
from _from
, this function is called. It must return its Solidity selector to confirm the token transfer. If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted. The selector can be obtained in Solidity with IERC721Receiver.onERC721Received.selector
.
Parameters:
Name | Type | Description |
---|---|---|
_operator | address | An operator. |
_from | address | An address from where token was transferred. |
_tokenId | uint256 | Token ID. |
_data | bytes | Additional data. |
owner()
Role that can be granted exclusive access to specific functions with the modifier onlyOwner
.
pendingOwner()
Address that can claim the owner role. It is used to transfer the owner.
Last updated