This is a smart contract to expand KIP7 that is created with every liquidity pair. The Factory deploys this as new pool creation is requested. Although the Factory actually stores the two tokens of a pair and swapping takes place through it, the Exchange Contract must be called for liquidity to be provided or taken.
Code
Github Link: (Will be updated after official launch)
Address
Contract address after production is deployed (scope link)
Events, Read-Only Functions, and State-Changing Functions
Events
Transfer
event Transfer(address indexed from, address indexed to, uint amount);
liquidity : the amount of LP tokens burned due to liquidity removal
Read-Only Functions
name
KlaySwap LP
symbol
"KSLP" + " " + symbolA + "-" + symbolB
decimals
18
totalSupply
mint/burn depending on liquidity addition/removal
balanceOf
Number of LP tokens held by each address
allowance
Status of approval to spender for each address
factory
The factory address where the LP smart contract is deployed
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
fee
Transaction fee for the pair
It is a value between 0 and 100, in units of 0.01%
1 == 0.01%, 100 == 1%
mining
The mining rate of the pair
It is a value between 0 and 100, in units of 1%
e.g. If mining is 10, the pair has claim authority for 10% of the quantity mined per block in the factory.
lastMined
Factory.mined() value at the last time the pair updated the index
miningIndex
Index value of the last recorded pair
userLastIndex
mapping(address => uint)
Stores the index value at the time of last reward for each user
userRewardSum
mapping(address => uint )
Stores the cumulatively claimed KSP quantity value for each user
getCurrentPool
function getCurrentPool() public view returns (uint, uint)
Returns the liquidity quantity of the two assets in the current pool
estimatePos
function estimatePos(address token, uint amount) public view returns (uint)
When a request is made to sell the amount of the corresponding token through a POS transaction, the expected receiving amount of the opposite token is returned.
estimateNeg
function estimateNeg(address token, uint amount) public view returns (uint)
When a request is made to purchase the amount of the corresponding token through a NEG transaction, the expected payment amount of the opposite token is returned.
State-Changing Functions
transfer
function transfer(address _to, uint _value) public returns (bool)
KIP7 Standard
Method for KSP token transfer
transferFrom
function transferFrom(address _from, address _to, uint _value) public returns (bool)
KIP7 Standard
Method to transfer tokens on behalf of the approved wallet
approve
function approve(address _spender, uint _value) public returns (bool)
KIP7 Standard
Method to approve transfer as much as value to the spender
updateMiningIndex
function updateMiningIndex() public
Method to update the value of the pair contract based on the current Factory.mined() value
Anyone can call in real time. Even if no one calls it, it calls itself if necessary.
claimReward
function claimReward() public
Method 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
When LP tokens are sent
When LP tokens are received
addKlayLiquidity
function addKlayLiquidity(uint amount) public payable
Method used to provide liquidity when tokenA is KLAY
Liquidity of the KLAY msg.value and tokenB amount is provided.
After liquidity is provided, the LP token corresponding to the pool share is minted in the msg.sender wallet.
If the pair ratio is wrong, as much liquidity as possible is supplied at the current pair ratio, and the remaining tokens are returned to msg.sender.
If there is claimable KSP when called, the claim proceeds to msg.sender.
addKlayLiquidityWithLimit
function addKlayLiquidityWithLimit(uint amount, uint minAmountA, uint minAmountB) public payable
Method used to provide liquidity when tokenA is KLAY
Liquidity of the KLAY msg.value and tokenB amount is provided.
Set the minimum amount of tokenA and tokenB to be used for liquidity supply using minAmountA, minAmountB.
After liquidity is provided, the LP token corresponding to the pool share is minted in the msg.sender wallet.
If the pair ratio is wrong, as much liquidity as possible is supplied at the current pair ratio, and the remaining tokens are returned to msg.sender.
If there is claimable KSP when called, the claim proceeds to msg.sender.
addKctLiquidity
function addKctLiquidity(uint amountA, uint amountB) public
Method used to provide liquidity when tokenA is KIP7 standard token
Liquidity of the number of tokenA amountA and tokenB amountB is provided.
After liquidity is provided, the LP token corresponding to the pool share is minted in the msg.sender wallet.
If the pair ratio is wrong, as much liquidity as possible is supplied at the current pair ratio, and the remaining tokens are returned to msg.sender.
If there is claimable KSP when called, the claim proceeds to msg.sender.
addKctLiquidityWithLimit
function addKctLiquidityWithLimit(uint amountA, uint amountB, uint minAmountA, uint minAmountB) public
Method used to provide liquidity when tokenA is KIP7 standard token
Liquidity of the number of tokenA amountA and tokenB amountB is provided.
Set the minimum amount of tokenA and tokenB to be used for liquidity supply using minAmountA, minAmountB.
After liquidity is provided, the LP token corresponding to the pool share is minted in the msg.sender wallet.
If the pair ratio is wrong, as much liquidity as possible is supplied at the current pair ratio, and the remaining tokens are returned to msg.sender.
If there is claimable KSP when called, the claim proceeds to msg.sender.
removeLiquidity
function removeLiquidity(uint amount) public
Returns the amount of LP tokens, and distributes the corresponding tokenA and tokenB to the msg.sender wallet
The returned LP token amount is burned
If there is claimable KSP when called, the claim proceeds to msg.sender.
removeLiquidityWithLimit
function removeLiquidityWithLimit(uint amount, uint minAmountA, uint minAmountB) public
Returns the amount of LP tokens, and distributes the corresponding tokenA and tokenB to the msg.sender wallet
Set the minimum amount for the returned tokenA and tokenB amounts by using minAmountA, minAmountB.
The returned LP token amount is burned
If there is claimable KSP when called, the claim proceeds to msg.sender.