Class A vs. Class B KLIKcoins
To differentiate between Class A and Class B KLIKcoins, the system will use a tiered token structure where both classes share the same fundamental characteristics (both are ERC-20 tokens), but Class A tokens will have enhanced governance rights and vesting periods. Below is the mechanism to distinguish and manage these classes.
Class A KLIKcoins (Early Investor Tokens):
Supply: 50,000,000 KLIKcoins (0.5% of total)
Price: $0.01 per KLIKcoin
Governance Power: 5x voting power compared to Class B
Vesting: 19 months with 15% unlocked every 3 months after an initial 3-month cliff
Exclusive Features: Early access to platform features and participation in governance decisions with greater weight.
Class B KLIKcoins (Public Sale Tokens):
Round 2 Supply: 200,000,000 KLIKcoins (2% of total)
Price: $0.03 to $0.04 per KLIKcoin
No Vesting: Immediate liquidity
Round 3 Supply: 1,000,000,000 KLIKcoins (10% of total)
Price: $0.05 per KLIKcoin
No Vesting: Immediate liquidity
Solidity Code for Differentiating Class A and Class B KLIKcoins:
solidityCopy code// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
import "@openzeppelin/contracts/access/Ownable.sol";
import "@openzeppelin/contracts/token/ERC20/ERC20.sol";
contract KLIKcoin is ERC20, Ownable {
enum TokenClass { ClassA, ClassB }
mapping(address => TokenClass) public tokenClasses;
mapping(address => uint256) public governancePower;
uint256 public classASupply = 50_000_000 * 10**18; // Class A Supply
uint256 public classBSupply = 200_000_000 * 10**18; // Class B Supply
constructor() ERC20("KLIKcoin", "KLIK") {
// Allocate Class A and Class B to owner for distribution
_mint(msg.sender, classASupply + classBSupply);
}
function assignClassA(address investor, uint256 amount) external onlyOwner {
require(totalSupply() + amount <= classASupply, "Exceeds Class A supply");
_mint(investor, amount);
tokenClasses[investor] = TokenClass.ClassA;
governancePower[investor] = amount * 5; // 5x governance power
}
function assignClassB(address investor, uint256 amount) external onlyOwner {
require(totalSupply() + amount <= classBSupply, "Exceeds Class B supply");
_mint(investor, amount);
tokenClasses[investor] = TokenClass.ClassB;
governancePower[investor] = amount; // Standard governance power
}
function getGovernancePower(address user) public view returns (uint256) {
return governancePower[user];
}
}
This code distinguishes Class A and Class B tokens and adjusts governance power accordingly. Class A tokens have 5x voting power, while Class B tokens have standard 1:1 voting power.
Last updated