Class A vs. 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];
}
}Last updated