WENBlocks
  • Getting Started
    • Overview
      • Technical Architecture
    • Key Features
  • Staking
    • Overview
    • Creating a Stake
    • Withdrawing the Stake
    • Claiming Rewards
  • Liquidity Program
    • How It Works
  • WNT
    • WNT — The Engine of the WEN Ecosystem
  • Airdrops
    • Airdrop Schedule
    • Server Management
    • Penalty Structure
    • How It Works
    • Example
  • Smart Contracts
  • Security
    • Overview
    • Internal Audits
    • External Audits
    • AI Audits
      • Grok
  • CODE
    • WENBlocksManager.sol
    • wnmContract.sol
    • wblkToken.sol
    • wuniContract.sol
    • wntToken.sol
    • syncnode.py
    • airdropGenerator.js
    • dayTrigger.js
  • Conclusion
    • Conclusion
  • Socials
    • Links
Powered by GitBook
On this page
  • Penalty Distribution
  • Penalty Calculation
  1. Airdrops

Penalty Structure

To encourage timely claims, unclaimed airdrops are subject to penalties starting from the 8th day after the airdrop has been initiated. The penalty is applied at a rate of 2% per day with a maximum of 100% (after day 57):

if (elapsedDays < 7) {
    penaltyRate = 0;
} else if (elapsedDays >= 7) {
    penaltyRate = elapsedDays > 57 ? 100 : (elapsedDays - 7) * 2;
}

Important: After 57 days from airdrop start (50 days of penalties), any remaining unclaimed tokens are considered fully forfeited.

Penalty Distribution

The 2% daily penalty is actually applied as two 1% operations

First Aidrop (Week 1):

// 1% penalty rate but applied twice
uint256 tmptaxedWNM = airdrop.unclaimedWNM / 100;
uint256 tmptaxedWBLK = airdrop.unclaimedWBLK / 100;
uint256 tmptaxedWUNI = airdrop.unclaimedWUNI / 100;

if (weekId == 1 && (tmptaxedWNM > 0 || tmptaxedWBLK > 0 || tmptaxedWUNI > 0)) {
    // 60% of the 1% penalty is burned
    tWNM.mint(deadWallet, tmptaxedWNM * 6 / 10);
    tWBLK.mint(deadWallet, tmptaxedWBLK * 6 / 10);
    tWUNI.mint(deadWallet, tmptaxedWUNI * 6 / 10);
    
    // 40% of the 1% penalty goes to stakers
    wnmContract.assignExternalStakingRewards(tmptaxedWNM * 4 / 10, tmptaxedWBLK * 4 / 10, tmptaxedWUNI * 4 / 10);
}

// The other 1% goes to liquidity pools
liquidityWNM += tmptaxedWNM;
liquidityWBLK += tmptaxedWBLK;
liquidityWUNI += tmptaxedWUNI;
First-week penalty flow (2 % total)
• 1 % of unclaimed tokens: 60 % burned, 40 % to stakers
• 1 % of unclaimed tokens: 100 % routed to the liquidity programme
Net effect: 50 % liquidity, 30 % burn, 20 % stakers.

This fee structure applies only to the first airdrop and incentivizes liquidity provision and staking while reducing the total supply by burning part of the unclaimed tokens.

Subsequent Airdrops (Week 2+):

else if (tmptaxedWNM > 0 || tmptaxedWBLK > 0 || tmptaxedWUNI > 0) {
    // First 1% goes to stakers
    wnmContract.assignExternalStakingRewards(tmptaxedWNM, tmptaxedWBLK, tmptaxedWUNI);
}

// Second 1% goes to liquidity pools
liquidityWNM += tmptaxedWNM;
liquidityWBLK += tmptaxedWBLK;
liquidityWUNI += tmptaxedWUNI;
For all airdrops after the first one, the penalty structure is as follows:
    50% of the penalties are allocated to the liquidity program.
    50% of the penalties are distributed to stakers.

The system will automatically apply penalties to unclaimed airdrops:

function updateDailyPenalty() external {
    uint256 _currentDay = wnmContract.getCurrentDay();
    if (_currentDay <= lastProcessedDay) return;

    uint256 startWeek = currentWeek > 8 ? currentWeek - 7 : 1;
    for (uint256 weekId = startWeek; weekId <= currentWeek; weekId++) {
        _applyDailyPenalty(weekId);
    }
    lastProcessedDay = _currentDay;
}

Penalty Calculation

This penalty is applied when users claim their airdrop

function calculateMintAfterPenalty(uint256 amount, uint256 rate) internal pure returns (uint256) {
    uint256 base = amount * 1e18;  // Scale up for precision
    uint256 penalty = base * rate / 100;
    return base - penalty;
}

This fee structure ensures that unclaimed airdrops continue to support the liquidity program and staking rewards, maintaining the ecosystem’s growth.

PreviousServer ManagementNextHow It Works

Last updated 1 month ago