mirror of
https://github.com/luxfi/node.git
synced 2026-07-27 03:39:39 +00:00
185 lines
5.6 KiB
Go
185 lines
5.6 KiB
Go
// Copyright (C) 2019-2025, Lux Industries Inc. All rights reserved.
|
|
// See the file LICENSE for licensing terms.
|
|
|
|
package config
|
|
|
|
// TokenomicsConfig defines the token economics for the Lux Network
|
|
type TokenomicsConfig struct {
|
|
// Total supply: 2T tokens
|
|
TotalSupply uint64
|
|
|
|
// Airdrop configuration for legacy token holders
|
|
AirdropConfig AirdropConfig
|
|
|
|
// Staking requirements
|
|
StakingConfig StakingConfig
|
|
|
|
// Chain-specific allocations
|
|
ChainAllocations map[string]uint64
|
|
}
|
|
|
|
// AirdropConfig defines airdrop parameters
|
|
type AirdropConfig struct {
|
|
Enabled bool
|
|
SnapshotDate string
|
|
ConversionRatio float64 // Legacy token to LUX conversion ratio
|
|
VestingPeriod uint64 // in seconds
|
|
ClaimPeriod uint64 // in seconds
|
|
}
|
|
|
|
// StakingConfig defines staking parameters
|
|
type StakingConfig struct {
|
|
// Minimum stake: 1M LUX for validators
|
|
MinimumValidatorStake uint64
|
|
|
|
// NFT staking tiers
|
|
NFTStakingEnabled bool
|
|
NFTTiers []NFTTier
|
|
|
|
// Delegation parameters
|
|
MinimumDelegatorStake uint64
|
|
MaxDelegationRatio uint32
|
|
|
|
// Chain-specific validator requirements
|
|
ChainValidatorRequirements map[string]ChainStakeRequirement
|
|
|
|
// Combined staking (NFT + delegation + staked) to reach minimum
|
|
AllowCombinedStaking bool
|
|
}
|
|
|
|
// NFTTier represents different validator NFT tiers
|
|
type NFTTier struct {
|
|
Name string
|
|
RequiredLUX uint64 // Base LUX requirement with NFT
|
|
StakingMultiplier uint32 // Reward multiplier percentage
|
|
MaxValidators uint32 // Max validators in this tier
|
|
}
|
|
|
|
// ChainStakeRequirement defines chain-specific staking requirements
|
|
type ChainStakeRequirement struct {
|
|
ChainID string
|
|
MinimumStake uint64
|
|
RequiresSpecialAccess bool // e.g., B-chain bridge validators
|
|
AccessRequirements string // Description of special requirements
|
|
}
|
|
|
|
// DefaultTokenomicsConfig returns the default tokenomics configuration
|
|
func DefaultTokenomicsConfig() *TokenomicsConfig {
|
|
return &TokenomicsConfig{
|
|
// 10 Billion total supply (with 9 decimals = 10^19 units)
|
|
TotalSupply: 10_000_000_000_000_000_000, // 10B tokens with 9 decimals
|
|
|
|
AirdropConfig: AirdropConfig{
|
|
Enabled: true,
|
|
SnapshotDate: "2025-01-01T00:00:00Z",
|
|
ConversionRatio: 1000.0, // 1 legacy token = 1000 LUX
|
|
VestingPeriod: 365 * 24 * 60 * 60, // 1 year
|
|
ClaimPeriod: 90 * 24 * 60 * 60, // 90 days to claim
|
|
},
|
|
|
|
StakingConfig: StakingConfig{
|
|
// 1M LUX minimum for validators (can be combined)
|
|
MinimumValidatorStake: 1_000_000_000_000_000, // 1M tokens with 9 decimals
|
|
|
|
NFTStakingEnabled: true,
|
|
NFTTiers: []NFTTier{
|
|
{
|
|
Name: "Genesis",
|
|
RequiredLUX: 500_000_000_000_000, // 500K LUX with Genesis NFT
|
|
StakingMultiplier: 200, // 2x rewards
|
|
MaxValidators: 100,
|
|
},
|
|
{
|
|
Name: "Pioneer",
|
|
RequiredLUX: 750_000_000_000_000, // 750K LUX with Pioneer NFT
|
|
StakingMultiplier: 150, // 1.5x rewards
|
|
MaxValidators: 500,
|
|
},
|
|
{
|
|
Name: "Standard",
|
|
RequiredLUX: 1_000_000_000_000_000, // 1M LUX standard
|
|
StakingMultiplier: 100, // 1x rewards
|
|
MaxValidators: 0, // Unlimited
|
|
},
|
|
},
|
|
|
|
// Delegation minimum: 25K LUX
|
|
MinimumDelegatorStake: 25_000 * 1e9,
|
|
MaxDelegationRatio: 10, // 10x validator stake
|
|
|
|
// Allow combined staking (NFT value + delegated + staked = 1M+)
|
|
AllowCombinedStaking: true,
|
|
|
|
// Chain-specific requirements
|
|
ChainValidatorRequirements: map[string]ChainStakeRequirement{
|
|
"P": {
|
|
ChainID: "P",
|
|
MinimumStake: 1_000_000 * 1e9, // 1M LUX standard
|
|
},
|
|
"C": {
|
|
ChainID: "C",
|
|
MinimumStake: 1_000_000 * 1e9, // 1M LUX standard
|
|
},
|
|
"X": {
|
|
ChainID: "X",
|
|
MinimumStake: 1_000_000 * 1e9, // 1M LUX standard
|
|
},
|
|
"A": {
|
|
ChainID: "A",
|
|
MinimumStake: 1_000_000 * 1e9, // 1M LUX for AI chain
|
|
},
|
|
"B": {
|
|
ChainID: "B",
|
|
MinimumStake: 100_000_000 * 1e9, // 100M LUX for bridge validators
|
|
RequiresSpecialAccess: true,
|
|
AccessRequirements: "Bridge validator requires 100M LUX stake and KYC verification",
|
|
},
|
|
"Z": {
|
|
ChainID: "Z",
|
|
MinimumStake: 1_000_000 * 1e9, // 1M LUX standard
|
|
},
|
|
},
|
|
},
|
|
|
|
// Chain allocations (percentage of total supply)
|
|
ChainAllocations: map[string]uint64{
|
|
"P-Chain": 1_500_000_000_000_000_000, // 1.5B for staking/governance (15%)
|
|
"X-Chain": 2_000_000_000_000_000_000, // 2B for exchanges/liquidity (20%)
|
|
"C-Chain": 3_000_000_000_000_000_000, // 3B for smart contracts/DeFi (30%)
|
|
"A-Chain": 1_500_000_000_000_000_000, // 1.5B for attestation operations (15%)
|
|
"B-Chain": 1_000_000_000_000_000_000, // 1B for bridge liquidity (10%)
|
|
"Z-Chain": 1_000_000_000_000_000_000, // 1B for privacy/ZK operations (10%)
|
|
},
|
|
}
|
|
}
|
|
|
|
// GetMinimumStake returns the minimum stake based on NFT ownership
|
|
func (c *TokenomicsConfig) GetMinimumStake(hasNFT bool, nftTier string) uint64 {
|
|
if !hasNFT || !c.StakingConfig.NFTStakingEnabled {
|
|
return c.StakingConfig.MinimumValidatorStake
|
|
}
|
|
|
|
for _, tier := range c.StakingConfig.NFTTiers {
|
|
if tier.Name == nftTier {
|
|
return tier.RequiredLUX
|
|
}
|
|
}
|
|
|
|
return c.StakingConfig.MinimumValidatorStake
|
|
}
|
|
|
|
// GetStakingMultiplier returns the reward multiplier for a given NFT tier
|
|
func (c *TokenomicsConfig) GetStakingMultiplier(nftTier string) uint32 {
|
|
if !c.StakingConfig.NFTStakingEnabled {
|
|
return 100 // Default 1x multiplier
|
|
}
|
|
|
|
for _, tier := range c.StakingConfig.NFTTiers {
|
|
if tier.Name == nftTier {
|
|
return tier.StakingMultiplier
|
|
}
|
|
}
|
|
|
|
return 100 // Default 1x multiplier
|
|
}
|