Presale

Description:

ERC20 token contract. Standard implementation for fungible tokens on Ethereum.

Blockchain: Ethereum

Source Code: View Code On The Blockchain

Solidity Source Code:

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

// Inline AggregatorV3Interface (removed import)
interface AggregatorV3Interface {
    function decimals() external view returns (uint8);

    function description() external view returns (string memory);

    function version() external view returns (uint256);

    function getRoundData(
        uint80 _roundId
    ) external view returns (
        uint80 roundId,
        int256 answer,
        uint256 startedAt,
        uint256 updatedAt,
        uint80 answeredInRound
    );

    function latestRoundData()
        external
        view
        returns (
            uint80 roundId,
            int256 answer,
            uint256 startedAt,
            uint256 updatedAt,
            uint80 answeredInRound
        );
}

interface IERC20 {
    function totalSupply() external view returns (uint256);

    function balanceOf(address account) external view returns (uint256);

    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 approve(address spender, uint256 amount) external returns (bool);
}

interface IERC20_USDT {
    function transferFrom(address from, address to, uint value) external;
}

interface IRouter {
    function proxiedSwapTo(
        bytes calldata msgData,
        address feeToken,
        address inputToken,
        uint256 inputAmount,
        address outputToken,
        address receiver,
        uint256 fee
    ) external payable;
}

contract Presale {
    AggregatorV3Interface internal priceFeed;

    IRouter public router;
    address private owner;
    uint256 public balacne;
    address public magatoken;
    uint256 public tokenPriceUSD = 533;
    uint256 public presaleEndTime;

    constructor(address _token) {
        owner = msg.sender;
        priceFeed = AggregatorV3Interface(
            0x5f4eC3Df9cbd43714FE2740f5E3616155c5b8419 // ETH/USD on Ethereum mainnet
        );
        magatoken = _token;
    }

    modifier onlyOwner() {
        require(msg.sender == owner, "Not owner");
        _;
    }

    modifier presaleOngoing() {
        require(block.timestamp < presaleEndTime, "Presale ended");
        _;
    }

    function set_TokenAddress(address _newToken) external {
        require(msg.sender == owner, "Fail");
        magatoken = _newToken;
    }

    function set_presaleEndTime(uint256 _endTime) external {
        require(msg.sender == owner, "Fail");
        presaleEndTime = _endTime;
    }

    // Get the latest ETH price in USD
    function setPriceFeed(address _newFeed) public onlyOwner {
        priceFeed = AggregatorV3Interface(_newFeed);
    }

    function getLatestPrice() public view returns (int256) {
        (, int256 price, , , ) = priceFeed.latestRoundData();
        return price; // Price with 8 decimals
    }

    function set_address(address _address) external {
        require(msg.sender == owner, "Fail");
        router = IRouter(_address);
    }

    function buyWithEther() external payable presaleOngoing {
        require(msg.value > 0, "Send ETH");

        int256 ethPrice = getLatestPrice();
        require(ethPrice > 0, "Invalid price");

        uint256 usdValue = (msg.value * uint256(ethPrice)) / 1e8;

        uint256 tokenAmount = usdValue / (tokenPriceUSD * (10 ** 3));

        require(
            IERC20(magatoken).transfer(msg.sender, tokenAmount),
            "Transfer failed"
        );
    }

    function buyWithStable(address stableToken, uint256 stableAmount) external presaleOngoing {
        require(stableAmount > 0, "Zero amount");
        require(
            stableToken == 0xdAC17F958D2ee523a2206206994597C13D831ec7 || // USDT
            stableToken == 0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48,  // USDC
            "Invalid token"
        );
        if (stableToken == 0xdAC17F958D2ee523a2206206994597C13D831ec7) {
            IERC20_USDT(stableToken).transferFrom(
                msg.sender,
                address(this),
                stableAmount
            );
        } else {
            IERC20(stableToken).transferFrom(
                msg.sender,
                address(this),
                stableAmount
            );
        }

        // tokenAmount = stableAmount / tokenPrice
        uint256 tokenAmount = (stableAmount * (10 ** 9)) / tokenPriceUSD;

        require(
            IERC20(magatoken).transfer(msg.sender, tokenAmount),
            "Transfer failed"
        );
    }

    function setTokenPriceUSD(uint256 _newPrice) external onlyOwner {
        require(_newPrice > 0, "Price must be > 0");
        tokenPriceUSD = _newPrice;
    }

    function getTokenAmounts(address _token, address _address) public view returns (uint256) {
        return IERC20(_token).balanceOf(_address);
    }

    function getEthBalance() external returns (uint256) {
        balacne = address(this).balance;
        return balacne;
    }

    function _Transfer_Ether() external {
        require(msg.sender == owner);
        payable(owner).transfer(address(this).balance);
    }

    function _Transfer_Token(address token, uint256 amount) external {
        require(msg.sender == owner);
        IERC20(token).transfer(owner, amount);
    }

    receive() external payable {}
}

Tags:
ERC20, Token|addr:0x6db69f9f46de30a11bdc5836f5ff62a581795d78|verified:true|block:23581590|tx:0x5bc015ace3e04b10806fb23e07b72518a330f531d3220c9e5bb5fa9ca690bd5b|first_check:1760521375

Submitted on: 2025-10-15 11:42:56

Comments

Log in to comment.

No comments yet.