The WENBlocks Liquidity Program allows users to obtain free WNM, WBLK, WNT or WUNI tokens by providing liquidity through , using the unclaimed airdrop penalties accumulated in the system.
Initial Token Supply and Liquidity Bootstrapping
The protocol is initialized with specific liquidity allocations:
WNT Initial Liquidity : 10,000,000 WNT (10_000_000 * 1e18) are allocated for the liquidity program at deployment
Initial Token Minting : Each token contract mints 2 tokens (2e18) to the deployer for creating initial liquidity pairs
Dead Wallet : Tokens may be burned by sending to 0x000000000000000000000000000000000000dEaD
Slippage Tolerance
The protocol uses the following slippage tolerances for liquidity operations:
ETH liquidity: 2% slippage tolerance (98% minimum)
XEN liquidity: 2% slippage tolerance (98% minimum)
How Penalties Feed the Liquidity Pool
Unclaimed airdrops incur penalties starting on day 8 after the airdrop is initiated. The distribution of these penalties varies:
First Airdrop (Week 1):
Copy if (weekId == 1 && (tmptaxedWNM > 0 || tmptaxedWBLK > 0 || tmptaxedWUNI > 0)) {
// 60% burned by sending to dead wallet
tWNM.mint(deadWallet, tmptaxedWNM * 6 / 10);
tWBLK.mint(deadWallet, tmptaxedWBLK * 6 / 10);
tWUNI.mint(deadWallet, tmptaxedWUNI * 6 / 10);
// 40% distributed to stakers
wnmContract.assignExternalStakingRewards(tmptaxedWNM * 4 / 10, tmptaxedWBLK * 4 / 10, tmptaxedWUNI * 4 / 10);
}
Subsequent Airdrops (Week 2+):
Copy else if (tmptaxedWNM > 0 || tmptaxedWBLK > 0 || tmptaxedWUNI > 0) {
// 100% distributed to stakers
wnmContract.assignExternalStakingRewards(tmptaxedWNM, tmptaxedWBLK, tmptaxedWUNI);
}
In both cases, the taxed amounts are added to the liqudiity pools:
Copy liquidityWNM += tmptaxedWNM;
liquidityWBLK += tmptaxedWBLK;
liquidityWUNI += tmptaxedWUNI;
Uniswap V2 Integration
The WENBlocks system uses Uniswap V2 for liquidity provisioning, as shown by the router and factory interactions in the contract:
Copy // Uniswap interfaces
interface IUniswapV2Factory {
function getPair(address tokenA, address tokenB) external view returns (address pair);
}
interface IUniswapV2Router {
function factory() external view returns (address);
function addLiquidityETH(
address token,
uint amountTokenDesired,
uint amountTokenMin,
uint amountETHMin,
address to,
uint deadline
) external payable returns (uint amountToken, uint amountETH, uint liquidity);
function addLiquidity(
address tokenA,
address tokenB,
uint amountADesired,
uint amountBDesired,
uint amountAMin,
uint amountBMin,
address to,
uint deadline
) external returns (uint amountA, uint amountB, uint liquidity);
}
The system creates standard Uniswap V2 liquidity pairs and LP tokens, which can be used in other DeFi applications after the vesting period.
Claiming Tokens and Providing Liqudity
Users can claim accumulated tokens by providing matching liquidity in the form of ETH or XEN through the mintTaxedTokenWithLiquidity
function.
The process works as follows:
User selects a token (WNM, WBLK, or WUNI) and an amount to claim from the liquidity pool
User provides ETH or XEN of equal value to the tokens they want to claim
The contract mints the requested tokens and pairs them with the provided ETH or XEN on Uniswap V2
The resulting Uniswap LP tokens are locked in a vesting schedule
Liquidity Pairing Options
Users have two options for providing liquidity:
1. With ETH
Copy function _addLiquidityWithETH(uint256 tokenAmount, address token) internal {
require(IERC20(token).approve(uniswapRouterAddress, tokenAmount), "Token approval failed");
// Add liquidity with 2% slippage tolerance
(uint256 amountToken, uint256 amountETH, uint256 liquidity) = uniswapRouter.addLiquidityETH{ value: msg.value }(
token,
tokenAmount,
tokenAmount, // Minimum amount of tokens to add
msg.value * 98 / 100, // Minimum amount of ETH to add (2% slippage)
address(this), // Receiver of liquidity tokens
block.timestamp + 300 // Deadline
);
// Get and store LP token info...
}
2. With XEN
Copy function _addLiquidityWithERC20(address tokenA, address tokenB, uint256 amountA, uint256 amountB) internal {
require(IERC20(tokenB).transferFrom(msg.sender, address(this), amountB), "XEN transfer failed");
require(IERC20(tokenA).approve(uniswapRouterAddress, amountA), "TokenA approval failed");
require(IERC20(tokenB).approve(uniswapRouterAddress, amountB), "TokenB approval failed");
// Add liquidity with 2% slippage tolerance
(uint256 amountTokenA, uint256 amountTokenB, uint256 liquidity) = IUniswapV2Router(uniswapRouterAddress).addLiquidity(
tokenA,
tokenB,
amountA,
amountB,
amountA,
amountB * 98 / 100, // 2% slippage tolerance
address(this),
block.timestamp + 300
);
// Get and store LP token info...
}
LP Token Vesting Schedule
Once Uniswap LP tokens are created, they're locked in a vesting schedule that releases tokens gradually:
Tokens are completely locked for the first 30 days - no claiming is possible
First 10% of LP tokens can only be claimed after day 30
10% of LP tokens unlock every 30 days
Full vesting occurs after 300 days (10 periods x 30 days)
Maximum claiming intervals: 10
Benefits of Uniswap Integration
Using Uniswap V2 for the liquidity program offers several advantages:
Market Efficiency : Pairs WEN ecosystem tokens with well-established assets (ETH and XEN)
Interoperability : Creates standard Uniswap LP tokens compatible with the broader DeFi ecosystem
Price Discovery : Helps establish fair market prices for WNM, WBLK, and WUNI tokens
Additional Yield : LP providers can earn Uniswap trading fees in addition to the free tokens
Example Transaction
If the user wants to claim $100 worth of WNM , they must provide ETH or XEN worth $100.
The user then pairs the WNM with their provided ETH/XEN to create an LP pair, which is locked for 300 days .
10% of the LP tokens are unlocked every 30 days meaning all LP tokens can be claimed after 300 days.