5.2 Q3 - Q4 2025
5.2.1 Official Launch of $AIMON Token & Liquidity Incentives
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
import "@openzeppelin/contracts/token/ERC20/IERC20.sol";
import "@openzeppelin/contracts/security/ReentrancyGuard.sol";
contract AIMONLiquidityMining is ReentrancyGuard {
IERC20 public aimonToken;
IERC20 public lpToken;
uint256 public constant REWARD_RATE = 1000; // 1000 AIMON per block
uint256 public lastUpdateBlock;
uint256 public rewardPerTokenStored;
mapping(address => uint256) public userRewardPerTokenPaid;
mapping(address => uint256) public rewards;
uint256 private _totalSupply;
mapping(address => uint256) private _balances;
event Staked(address indexed user, uint256 amount);
event Withdrawn(address indexed user, uint256 amount);
event RewardPaid(address indexed user, uint256 reward);
constructor(address _aimonToken, address _lpToken) {
aimonToken = IERC20(_aimonToken);
lpToken = IERC20(_lpToken);
}
function rewardPerToken() public view returns (uint256) {
if (_totalSupply == 0) {
return rewardPerTokenStored;
}
return
rewardPerTokenStored +
(((block.number - lastUpdateBlock) * REWARD_RATE * 1e18) / _totalSupply);
}
function earned(address account) public view returns (uint256) {
return
((_balances[account] *
(rewardPerToken() - userRewardPerTokenPaid[account])) / 1e18) +
rewards[account];
}
modifier updateReward(address account) {
rewardPerTokenStored = rewardPerToken();
lastUpdateBlock = block.number;
if (account != address(0)) {
rewards[account] = earned(account);
userRewardPerTokenPaid[account] = rewardPerTokenStored;
}
_;
}
function stake(uint256 amount) external nonReentrant updateReward(msg.sender) {
require(amount > 0, "Cannot stake 0");
_totalSupply += amount;
_balances[msg.sender] += amount;
require(lpToken.transferFrom(msg.sender, address(this), amount), "Transfer failed");
emit Staked(msg.sender, amount);
}
function withdraw(uint256 amount) public nonReentrant updateReward(msg.sender) {
require(amount > 0, "Cannot withdraw 0");
_totalSupply -= amount;
_balances[msg.sender] -= amount;
require(lpToken.transfer(msg.sender, amount), "Transfer failed");
emit Withdrawn(msg.sender, amount);
}
function getReward() public nonReentrant updateReward(msg.sender) {
uint256 reward = rewards[msg.sender];
if (reward > 0) {
rewards[msg.sender] = 0;
require(aimonToken.transfer(msg.sender, reward), "Transfer failed");
emit RewardPaid(msg.sender, reward);
}
}
}5.2.2 Release of Developer SDK for AI Monster Integration
5.2.3 Collaborations with Film/Game Studios for AI Content Commercialization
5.2.4 AI Monster Battle Arena Launch
Last updated