PlusPool
This contract manages the leveraged assets of KLAYswap's plus pool liquidity providers. Liquidity providers can maximize their returns with positive assets (deposited assets + utilized assets) by using positive deposits according to their deposited assets. However, a high asset utilization ratio can result in automatic returns, which can result in losses.
Code
Github Link: (Will be updated after official launch)
Address
Cypress : 0x
Events, Read-Only Functions, and State-Changing Functions
Events
ChangeBorrowFactor
event ChangeBorrowFactor(uint newBorrowFactor);Event log of borrow factor change
ChangeLiquidationFactor
event ChangeLiquidationFactor(uint newLiquidationFactor);Event log of liquidation factor change
ChangeBorrowable
event ChangeBorrowable(address token, bool b);Event that occurs when availability is changed
GiveReward
event GiveReward(address user, uint amount, uint lastIndex, uint rewardSum);Event log of when mined KSP is claimed and distributed
Parameters
user: address of the user who claimedamount: the amount of KSP claimedlastIndex: index result of the pair of the wallet after claimingrewardSum: The amount of KSP that has been accrued so far
GiveAirdropReward
event GiveAirdropReward(address user, address dist, uint amount, uint currentIndex, uint userAirdropSum);Event log of when airdrop token is claimed and distributed
Parameters
user: address of the user who claimeddist: Airdrop contract addressamount: the amount of token claimedlastIndex: index result of the pair of the wallet after claimingrewardSum: The amount of token that has been accrued so far
OpenPosition
event OpenPosition(address user, uint amountA, uint amountB, uint borrowA, uint borrowB, uint amountLP, uint userLP);Events that occur when depositing to PlusPool
If the token to deposit is KLAY,
msg.valueis provided.Parameters
user: address of the useramountA: The deposit amount of tokenAamountB: The deposit amount of tokenBborrowA: The utilization amount of tokenAborrowB: The utilization amount of tokenBamountLP: The amount of LP tokens minted due to additional liquidityuserLP: the total amount of LP tokens minted due to additional liquidity
ClosePosition
event ClosePosition(address user, uint amountLP, uint amountA, uint amountB, uint userLP);Events that occur when withdraw liquidity
Parameters
user: address of the useramountLP: The amount of LP tokens burned due to liquidity removalamountA: The withdraw amount of tokenAamountB: The withdraw amount of tokenBuserLP: the total amount of LP tokens minted due to additional liquidity
Liquidate
event Liquidate(address user, uint idx, uint debtA, uint debtB, uint lp, uint debtRatio, uint time);Event that occur when the automatic return system activates
Parameters
user: address of the useridx: Number of auto-return countdeptA: Number of tokenA returned automaticallydeptB: Number of tokenB returned automaticallylp: the total amount of LP tokensdebtRatio: Asset utilization ratio in case of automatic returntime: Automatic return time
Read-Only Functions
totalLP
mint/burn depending on liquidity addition/removal
lpToken
target liquidity pool address
tokenA
The first token address composed of the pair
When KLAY is one part of the pair, tokenA == 0x0
tokenB
The second token address composed of the pair
borrowableA
Whether tokenA can be borrowable
borrowableB
Whether tokenB can be borrowable
liquidationFactor
automatic return factor
It is a value between 1 and 10^18, in units of 0.000000000000000001%
Default - 850000000000000000
borrowFactor
Utilization cost interest rate of utilized assets
It is a value between 1 and 10^18, in units of 0.000000000000000001%
Default - 750000000000000000
userLP
Number of PlusPool tokens held by each address
liquidationBonusRate
Ratio of resources to be used for KSP buyback & incineration in case of automatic return
liquidationCount
function liquidationCount(address user) public view returns (uint)Returns the user's cumulative automatic return count
State-Changing Functions
claimReward
function claimReward() publicMethod that a user calls to claim the claimable KSP that has accumulated for the pair
When called, KSP is claimed from the Factory and paid to msg.sender
Even if the method is not called directly, it is automatically called when the LP token balance of the user’s wallet changes.
When liquidity is added
When liquidity is removed
openPosition
function openPosition(uint amountA, uint amountB, uint borrowA, uint borrowB, uint minAmountLP) public payableMethod that depositing to PlusPool
If the token to deposit is KLAY,
msg.valueis provided.After liquidity is provided, the LP token corresponding to the pool share is minted in the
msg.senderwallet.If there is claimable KSP when called, the claim proceeds to
msg.sender.Parameter
amountA: The deposit amount of tokenAamountB: The deposit amount of tokenBborrowA: The utilization amount of tokenAborrowB: The utilization amount of tokenBminAmountLP: Minimum Guaranteed LP amount
closePosition
function closePosition(uint amountLP, uint minAmountA, uint minAmountB) publicReturns the amount of LP tokens, and distributes the corresponding tokenA and tokenB to the
msg.senderwalletThe returned LP token amount is burned
If there is claimable KSP and Airdrop when called, the claim proceeds to
msg.sender.Parameters
amountLP: The amount of LP tokens burned due to liquidity removalminAmountA: The withdraw amount of tokenAminAmountB: The withdraw amount of tokenB