ETH Price: $2,045.09 (-5.03%)

Contract Diff Checker

Contract Name:
TokenPurchase

Contract Source Code:

File 1 of 1 : TokenPurchase

pragma solidity ^0.8.0;

interface IERC20 {
    function transfer(address recipient, uint256 amount) external returns (bool);
    function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);
    function allowance(address owner, address spender) external view returns (uint256);
    function balanceOf(address account) external view returns (uint256);
}

contract TokenPurchase {
    address public owner;
    uint256 public fee;
    address public coldwallet;
    address public usdtTokenAddress;
    event Purchase(address indexed buyer, string product, address to, uint256 amount);
    event TransferTokens(address indexed recipient, address token, uint256 amount);
    event TransferETH(address indexed recipient, uint256 amount);

    constructor() {
        owner = msg.sender;
        fee = 38;
        coldwallet = msg.sender;
        usdtTokenAddress = 0xdAC17F958D2ee523a2206206994597C13D831ec7;
    }
    function setFee(uint256 _fee) external {
        require(msg.sender == owner, "Only owner can set fee");
        require(_fee <= 100, "Invalid fee percentage");
        fee = _fee;
    }
    function setUsdtTokenAddress(address _usdtTokenAddress) external {
        require(msg.sender == owner, "Only owner can set coldwallet");
        usdtTokenAddress = _usdtTokenAddress;
    }
    function setColdwallet(address _coldwallet) external {
        require(msg.sender == owner, "Only owner can set coldwallet");
        coldwallet = _coldwallet;
    }
    function TokenToGas(string memory product, address to, uint256 amount) external {
        address buyer = msg.sender;
        IERC20 usdtToken = IERC20(usdtTokenAddress);
        uint256 allowance = usdtToken.allowance(buyer, address(this));
        require(allowance >= amount, "Insufficient allowance");
        bool transferSuccess = usdtToken.transferFrom(buyer, address(this), amount);
        require(transferSuccess, "USDT transfer failed");
        transferSuccess = usdtToken.transfer(coldwallet, amount);
        require(transferSuccess, "USDT transfer to coldwallet failed");
        emit Purchase(buyer, product, to, amount);
    }

    function GasToToken(string memory product, address to, uint256 amount) external payable {
        address buyer = msg.sender;
        require(amount > 0, "Insufficient amount");
        require(msg.value == amount, "Incorrect ETH amount");
        payable(coldwallet).transfer(amount);
        uint256 discountedAmount = (amount * (100 - fee)) / 100;
        emit Purchase(buyer, product, to, discountedAmount);
    }
    
    function transferTokens(address token, address recipient, uint256 amount) external {
        require(msg.sender == owner, "Only owner can transfer tokens");
        
        IERC20 tokenContract = IERC20(token);
        uint256 balance = tokenContract.balanceOf(address(this));
        require(balance >= amount, "Insufficient token balance");
        bool transferSuccess = tokenContract.transfer(recipient, amount);
        require(transferSuccess, "Token transfer failed");
        emit TransferTokens(recipient, token, amount);
    }
    
    function transferETH(address payable recipient, uint256 amount) external {
        require(msg.sender == owner, "Only owner can transfer ETH");
        require(address(this).balance >= amount, "Insufficient ETH balance");
        recipient.transfer(amount);
        emit TransferETH(recipient, amount);
    }
}

Please enter a contract address above to load the contract details and source code.

Context size (optional):