KLIK PASS
  • KLIK Initial Coin Offering (ICO) Requirements Document
    • UPDATED Instructions for Solidity and Next.js Developers for ICO Page (9/9/2024)
    • Core Functionalities
    • ICO Page Requirements
    • System Architecture
    • Liquidity Plan
    • Middleware Requirements
    • Smart Contract Requirements
    • API Descriptions
  • KLIKcoin Tokenomics Plan
    • Total Supply Breakdown (10 Billion KLIKcoins)
    • Class A vs. Class B KLIKcoins
    • Time-Locked Tokens for Future Sales
    • Funding Rounds and Allocations
    • Liquidity pools
    • Staking Mechanism
    • Vesting Mechanism for Class A KLIKcoins
Powered by GitBook
On this page
  1. KLIKcoin Tokenomics Plan

Time-Locked Tokens for Future Sales

To control supply and ensure long-term sustainability, 3 billion KLIKcoins allocated for future sales will be locked and released gradually over time. The tokens are time-locked as follows:

  • 5-Year Unlock Schedule:

    • 60% of the future sales tokens (1.8 billion KLIKcoins) will be unlocked incrementally over 5 years, with 12% unlocking each year.

  • 10-Year Tranche:

    • 40% of the future sales tokens (1.2 billion KLIKcoins) will remain locked for 10 years to support future liquidity, strategic initiatives, or major partnerships.

Solidity Code for Time-Lock Mechanism:

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 KLIKTimeLock is Ownable {
    ERC20 public klikToken;

    struct Lock {
        uint256 amount;
        uint256 unlockTime;
    }

    mapping(address => Lock[]) public locks;

    constructor(ERC20 _klikToken) {
        klikToken = _klikToken;
    }

    function lockTokens(address beneficiary, uint256 amount, uint256 unlockTime) external onlyOwner {
        locks[beneficiary].push(Lock(amount, unlockTime));
        klikToken.transferFrom(msg.sender, address(this), amount);
    }

    function unlockTokens() external {
        uint256 unlockedAmount = 0;
        Lock[] storage userLocks = locks[msg.sender];

        for (uint256 i = 0; i < userLocks.length; i++) {
            if (block.timestamp >= userLocks[i].unlockTime) {
                unlockedAmount += userLocks[i].amount;
                delete userLocks[i];  // Remove the unlocked tokens from the lock array
            }
        }
        require(unlockedAmount > 0, "No tokens to unlock");
        klikToken.transfer(msg.sender, unlockedAmount);
    }
}

PreviousClass A vs. Class B KLIKcoinsNextFunding Rounds and Allocations

Last updated 8 months ago