# VotingKSP

&#x20;This contract is responsible for the ecosystem behavior related to staking KSP. Voting rights (vKSP) are issued according to the staking quantity and period, and 40% of the daily KSP mining quantity is distributed to staking participants. (KSP distribution for staking participants may be changed through governance voting)

## Code

Github Link: (Will be updated after official launch)<br>

## Address

* Cypress : [0x2F3713F388BC4b8b364a7A2d8D57c5Ff4E054830](https://scope.klaytn.com/account/0x2F3713F388BC4b8b364a7A2d8D57c5Ff4E054830?tabId=txList)

## Events, Read-Only Functions, and State-Changing Functions

{% tabs %}
{% tab title="Events" %}

## Events

**LockKSP**

```solidity
event LockKSP(address user, uint lockPeriod, uint KSPAmount, uint totalLockedKSP, uint unlockTime);
```

* Event log of KSP staking
* Parameters
  * `user` : user address
  * `lockPeriod` :&#x20;
    * 4 months : 10,368,000
    * 8 months : 20,736,000
    * 12 months : 31,104,000
    * x8 : 1,555,200,000
  * `KSPAmount` : Number of KSP
  * `totalLockedKSP`: Total number of staked KSP&#x20;
  * `unlockTime` : Available unstaking time (timestamp)

**UnlockKSP**&#x20;

```solidity
event UnlockKSP(address user, uint vKSPAmount, uint KSPAmount);
```

* Event log of KSP unstaking
* Parameters
  * `user` : user address
  * `vKSPAmount` : Number of vKSP
  * `KSPAmount` : Number of KSP

**UnlockKSPUnlimited**

```solidity
event UnlockKSPUnlimited(address user, uint vKSPBefore, uint vKSPAfter, uint KSPAmount, uint unlockTime);
```

* Event log that occurs when unstaking vKSP x8
* Parameters
  * `user` : user address
  * `vKSPBefore` : The amount of vKSP held
  * `vKSPAfter` : Amount of vKSP held after unstaking
  * `KSPAmount` : Amount of KSP staked
  * `unlockTime` : Available unstaking time (timestamp)

**RefixBoosting**

```solidity
event RefixBoosting(address user, uint lockPeriod, uint boostingAmount, uint unlockTime);
```

* Event log of staking period is changed
* Parameter
  * `user` : user address
  * `lockPeriod` : period
  * `boostingAmount` : Number of vKSP after period changed
  * `unlockTime` : Available unstaking time (timestamp)

**ChangeMiningRate**

```solidity
event ChangeMiningRate(uint _mining);
```

* Event log of daily KSP distrivution rate changed

**GiveReward**

```solidity
event GiveReward(address user, uint amount, uint lastIndex, uint rewardSum);
```

* Event log of when mined KSP is claimed and distributed

**Compound**

```solidity
event Compound(address user, uint reward, uint compoundAmount, uint transferAmount, uint mintAmount);
```

* Event log of when mined KSP restaking.
* The compound amount can be entered in integer units&#x20;
* The amount minus the compund amount from the mined amount is returned to the wallet.&#x20;
  {% endtab %}

{% tab title="Read-Only Functions" %}

## Read-Only Functions

**balanceOf**

* Number of vKSP tokens held by each address

**getCurrentBalance**

* Number of vKSP tokens held by each address recent snapshot&#x20;

**getUserUnlockTime**

* Possible time of unstake

**lockedKSP**

* Number of KSP tokens stakes

**mining**

* KSP distribution rate&#x20;
* It is a value between 0 and 10000, in units of 0.0001%

**snapShotBalance**

* Number of vKSP tokens held by each address and snapshot&#x20;

**snapShotCount**

* Number of snapshot index each address&#x20;

**getPriorBalance**

```solidity
function getPriorBalance(address user, uint blockNumber) public view returns (uint) 
```

* Historical user vKSP holdings per block&#x20;
* Parameter
  * `user` : user address
  * `blockNumber` : prior blockNumber

**snapShotBalance**

```solidity
function snapShotBalance(address user, uint index) public view returns (uint) 
```

* Historical vKSP holdings each address
* Parameter
  * `user` : user address
  * `index` : index

{% endtab %}

{% tab title="State-Changing Functions" %}

## **State-Changing Functions**

**lockKSP**

```solidity
function lockKSP(uint amount, uint lockPeriodRequested) public
```

* Method for KSP staking&#x20;
* The amount can be entered in integer units &#x20;

**unlockKSP**

```solidity
function unlockKSP() public
```

* Method for KSP unstaking
* Unstaking is only possible during the unstaking period.

**unlockKSPUnlimited**

```solidity
function unlockKSPUnlimited() public
```

* Method for unstake KSP x8
* Changed to x4 staking from execution

**refixBoosting**

```solidity
function refixBoosting(uint lockPeriodRequested)
```

* Method for KSP staking period change&#x20;

**claimReward**

```solidity
function claimReward() public
```

* Method that a user calls to claim the claimable KSP&#x20;

**compoundReward**

```solidity
function compoundReward() public
```

* Method for mined KSP staking&#x20;
* Can be called when the reward is 1 KSP or more&#x20;
* It is possible to stake in integer units, and the rest is to the wallet address.
  {% endtab %}
  {% endtabs %}


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs-new.klayswap.com/book-en/developers/contract/votingksp.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
