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;
}
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.
Last updated