// SPDX-License-Identifier: MIT pragma solidity ^0.8.21; import "@openzeppelin/contracts/access/Ownable.sol"; import "@openzeppelin/contracts/token/ERC20/IERC20.sol"; contract NSwap is Ownable { IERC20 public navisToken; // Fee percentage for token swaps (0.3%) uint256 public swapFeePercentage = 3; event TokensSwapped(address indexed user, uint256 inputAmount, uint256 outputAmount); constructor(address _navisToken) { navisToken = IERC20(_navisToken); } // Function to swap tokens with a 0.3% fee function swapTokens(uint256 inputAmount) external { require(inputAmount > 0, "Input amount must be greater than zero"); // Calculate swap fee uint256 swapFee = (inputAmount * swapFeePercentage) / 1000; // Calculate output amount after deducting the fee uint256 outputAmount = inputAmount - swapFee; // Transfer input tokens from the user to this contract require(navisToken.transferFrom(msg.sender, address(this), inputAmount), "Transfer failed"); // Transfer output tokens to the user after deducting the fee require(navisToken.transfer(msg.sender, outputAmount), "Transfer failed"); // Emit TokensSwapped event emit TokensSwapped(msg.sender, inputAmount, outputAmount); } // Function to set the swap fee percentage (onlyOwner) function setSwapFeePercentage(uint256 _swapFeePercentage) external onlyOwner { require(_swapFeePercentage <= 1000, "Fee percentage cannot exceed 100%"); swapFeePercentage = _swapFeePercentage; } }