// SPDX-License-Identifier: MIT pragma solidity ^0.8.20; contract SellTixDistribution is Ownable { using SafeMath for uint256; struct RewardsPool { uint256 totalAmount; uint256 distributedAmount; mapping(address => bool) hasParticipated; } RewardsPool public communityRewards; uint256 public liquidityPoolAmount; address public uniswapPair; event RewardsClaimed(address user, uint256 amount); event LiquidityAdded(uint256 amount); constructor() { communityRewards = RewardsPool({ totalAmount: COMMUNITY_REWARDS, distributedAmount: 0 }); liquidityPoolAmount = LIQUIDITY; } function setUniswapPair(address _pair) external onlyOwner { uniswapPair = _pair; } function addLiquidity(uint256 _amount) external onlyOwner { require(_amount <= liquidityPoolAmount, "Exceeds available liquidity"); liquidityPoolAmount = liquidityPoolAmount.sub(_amount); token.transfer(uniswapPair, _amount); emit LiquidityAdded(_amount); } function distributeRewards(address[] calldata _users, uint256[] calldata _amounts) external onlyOwner { require(_users.length == _amounts.length, "Arrays length mismatch"); for(uint256 i = 0; i < _users.length; i++) { require(!communityRewards.hasParticipated[_users[i]], "User already rewarded"); require(communityRewards.distributedAmount.add(_amounts[i]) <= communityRewards.totalAmount, "Exceeds rewards pool"); communityRewards.hasParticipated[_users[i]] = true; communityRewards.distributedAmount = communityRewards.distributedAmount.add(_amounts[i]); token.transfer(_users[i], _amounts[i]); emit RewardsClaimed(_users[i], _amounts[i]); } } }