/r/gnoswap/emission
Directory ยท 9 Files
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:
- Calculates elapsed time since last distribution
- Mints GNS based on current emission rate
- Distributes to targets per configured ratios
- 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
- Liquidity Staker: Rewards for LP providers
- DevOps: Development and operations fund
- Community Pool: Community-governed treasury
- 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