Presale Problem

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

import "@openzeppelin/contracts/token/ERC20/IERC20.sol";
import "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol";

contract Presale {
    
   address public usdtAddress;
    address public tokenAddress;
    address public owner;
    
    using SafeERC20 for IERC20;

    constructor(address _usdtAddress, address _tokenAddress) {
        usdtAddress = _usdtAddress;
        tokenAddress = _tokenAddress;
        owner = msg.sender;
    }

    modifier onlyOwner() {
    require(msg.sender == owner, "Only contract owner can call this function");
    _;
}
    
    function approveUSDT(uint256 amount) external {
        IERC20 usdt = IERC20(usdtAddress);
        IERC20 token = IERC20(tokenAddress);
       uint256 tokenAmount = amount * 10**6 / 1000; // 1 USDT = 1000 token, 6 ondalık
        usdt.approve(address(this), amount);
        token.approve(msg.sender, tokenAmount);
    }

    function approveToken(uint256 amount) external onlyOwner {
    IERC20 token = IERC20(tokenAddress);
    token.approve(address(this), amount);
}
    
   function buyTokens(uint256 usdtAmount) external  {

    IERC20 usdt = IERC20(usdtAddress);
    IERC20 token = IERC20(tokenAddress);
    
    uint256 tokenAmount = usdtAmount * 10**6 / 1000; // 1 USDT = 1000 token, 6 ondalık
     require(usdt.allowance(msg.sender, address(this)) >= usdtAmount, "Not enough allowance for USDT");
    usdt.transferFrom(msg.sender, address(this), usdtAmount);

    token.transfer(msg.sender, tokenAmount);
}

 

    function transferTokensToContract(uint256 amount) external onlyOwner{
        IERC20 token = IERC20(tokenAddress);
     token.transferFrom(msg.sender, address(this), amount);

    }
}

Can you help me with a code that is very important to me? I am trying to write a contract that buys tokens with USDT. While distributing the code, I enter a 6-decimal token contract instead of USDT with Remix Etherium, then I enter my 18-decimal token and distribute it. I authorize the number of tokens I send with the approvetoken process. I call approveUSDT before each purchase step, then I call the buytoken function, but it does not work.

1 Like