# VotingMESH

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

## Code

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

## Address

* Polygon Mainnet : [0x176b29289f66236c65c7ac5db2400abb5955df13](https://polygonscan.com/address/0x176b29289f66236c65c7ac5db2400abb5955df13)

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

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

## Events

**LockMESH**

```solidity
event LockMESH(address user, uint lockPeriod, uint MESHAmount, uint totalLockedMESH, uint unlockTime);
```

* Event log of MESH 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
  * `MESHAmount` : Number of MESH locked b
  * `totalLockedMESH` : Total Number of staked MESH
  * `unlockTime` : Available unstaking time (timestamp)

**UnlockMESH**&#x20;

```solidity
event UnlockMESH(address user, uint vMESHAmount, uint MESHAmount);
```

* Event log of MESH unstaking
* Parameters
  * `user` : user address
  * `vMESHAmount` : Number of vMESH&#x20;
  * `MESHAmount` : Number of MESH&#x20;

**UnlockMESHUnlimited**

```solidity
event UnlockMESHUnlimited(address user, uint vMESHBefore, uint vMESHAfter, uint MESHAmount, uint unlockTime);
```

* Event log that occurs when unstaking vMESH x8
* Parameters
  * `user` : user address
  * `vMESHBefore` : The amount of vMESH held
  * `vMESHAfter` : Amount of vMESH held after unstaking
  * `MESHAmount` : Amount of MESH staked
  * `unlockTime` : Available unstaking time (timestamp)

**RefixBoosting**

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

* Event log of staking period is changed
* Parameter
  * `user` : user addres
  * `lockPeriod` : period
  * `boostingAmount` : Number of vMESH after period changed

**ChangeMiningRate**

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

* Event log of daily MESH distribution rate changed

**GiveReward**

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

* Event log of when mined MESH is claimed and distributed

**Compound**

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

* Event log of when mined MESH 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 vMESH tokens held by each address

**getCurrentBalance**

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

**getUserUnlockTime**

* Possible time of unstake

**lockedMESH**

* Number of MESH tokens stakes

**mining**

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

**snapShotBalance**

* Number of vMESH 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 vMESH holdings per block&#x20;
* Parameter
  * `user` : user address
  * `blockNumber` : prior blockNumber

**snapShotBalance**

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

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

{% endtab %}

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

## **State-Changing Functions**

**lockMESH**

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

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

**unlockMESH**

```solidity
function unlockMESH() public
```

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

**unlockMESHUnlimited**

```solidity
function unlockMESHUnlimited() public
```

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

**refixBoosting**

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

* Method for MESH staking period change&#x20;

**claimReward**

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

* Method that a user calls to claim the claimable MESH

**compoundReward**

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

* Method for mined MESH staking&#x20;
* Can be called when the reward is 1 MESH 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.meshswap.fi/developers/contract/votingmesh.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.
