Search Apps Documentation Source Content File Folder Download Copy Actions Download

README.md

3.00 Kb ยท 118 lines

Emission

GNS token emission and distribution system.

Overview

The emission system controls creation and distribution of new GNS tokens with a deflationary model featuring periodic halvings, ensuring predictable and decreasing supply growth over 12 years. For more details, check out docs.

Token Economics

  • Total Supply Cap: 1,000,000,000 GNS
  • Initial Minted: 100,000,000 GNS
  • To Be Minted: 900,000,000 GNS over 12 years
  • Halving Period: Every 2 years (63,072,000 seconds)
  • Halving Reduction: 50% decrease in emission rate
  • Distribution: Automatic during protocol activity

Configuration

  • Distribution Ratios (modifiable by governance):
    • Liquidity Staker: 75% (default)
    • DevOps: 20% (default)
    • Community Pool: 5% (default)
    • Governance Staker: 0% (default)
  • Start Time: Unix timestamp (immutable once set)

Core Features

Emission Schedule

Implements Bitcoin-style halving model:

  • Year 1-2: 100% emission rate
  • Year 3-4: 50% emission rate
  • Year 5-6: 25% emission rate
  • Year 7-8: 12.5% emission rate
  • Year 9-12: 6.25% emission rate

Distribution Mechanism

When triggered by protocol activity:

  1. Calculates elapsed time since last distribution
  2. Mints GNS based on current emission rate
  3. Distributes to targets per configured ratios
  4. Carries forward any undistributed amounts

Key Functions

MintAndDistributeGns

Mints and distributes GNS tokens automatically.

SetDistributionStartTime

One-time setup of emission start timestamp.

ChangeDistributionPct

Updates distribution percentages (admin or governance only).

GetDistributionBpsPct

Returns current distribution percentage in basis points for a target.

Technical Details

Timestamp-Based Emission

emissionPerSecond = baseEmission / (2^halvingCount)
amountToMint = emissionPerSecond * timeSinceLastMint

Halving Calculation

halvingCount = floor(timeSinceStart / halvingPeriod)

Distribution Targets

  1. Liquidity Staker: Rewards for LP providers
  2. DevOps: Development and operations fund
  3. Community Pool: Community-governed treasury
  4. Governance Staker: GNS staking rewards (currently 0%)

Usage

 1// Set emission start (one-time by admin)
 2SetDistributionStartTime(1704067200) // Jan 1, 2024
 3
 4// Trigger emission (called automatically)
 5amount, ok := MintAndDistributeGns()
 6
 7// Update distribution ratios
 8ChangeDistributionPct(
 9    1, 7000,  // 70% to liquidity stakers
10    2, 2000,  // 20% to devops
11    3, 1000,  // 10% to community pool
12    4, 0      // 0% to governance stakers
13)
14
15// Query distribution info
16stakerPct := GetDistributionBpsPct(LIQUIDITY_STAKER)
17accumulated := GetAccuDistributedToStaker()
18rate := GetStakerEmissionAmountPerSecond()

Security

  • Start time immutable once set and passed
  • Distribution percentages must sum to 10000 (100%)
  • Automatic triggers prevent manipulation
  • Leftover tracking ensures no token loss
  • Halving enforced at protocol level