账户
0x19...2a23
0x19...2A23

0x19...2A23

$500
此合同的源代码已经过验证!
合同元数据
编译器
0.8.26+commit.8a97fa7a
语言
Solidity
合同源代码
文件 1 的 1:DoughFiPresale.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.18;

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

    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) external returns (bool);

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

    function allowance(address owner, address spender)
        external
        view
        returns (uint256);

    function transfer(address recipient, uint256 amount)
        external
        returns (bool);

    function decimals() external view returns (uint8);
}

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

contract DoughFiPresale {
    IToken public DoughFi;
    IToken public USDT;

    AggregatorV3Interface public priceFeedEth;

    address payable public owner;
    uint256 public tokenPerUSDT;
    uint256 public soldToken;
    uint256 public amountRaisedEth;
    uint256 public amountRaisedUsdt;
    uint256 public totalSupply;
    uint8 public EthTax = 10;
    uint8 public UsdtTax = 10;

    bool public CanBuy;
    bool public buywithUSDT;

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

    constructor() {
        priceFeedEth = AggregatorV3Interface(
            0x5f4eC3Df9cbd43714FE2740f5E3616155c5b8419
        );
        owner = payable(0x21F3618356d0A8a736ccB494213ecF573bc5da17);
        DoughFi = IToken(0x8ec0DA6Bf56B04Dd9baA6808e0039a15C74BdB86);
        USDT = IToken(0xdAC17F958D2ee523a2206206994597C13D831ec7);
        totalSupply = DoughFi.totalSupply();
        CanBuy = true;
        buywithUSDT = true;
        tokenPerUSDT = 100 ether;
    }

    receive() external payable {
        buyTokenETH();
    }

    function getLatestPriceEth() public view returns (uint256) {
        (, int256 price, , , ) = priceFeedEth.latestRoundData();
        return uint256(price);
    }

    function buyTokenETH() public payable {
        require(CanBuy == true, "Can't buy token");
        uint256 amount = msg.value - ((msg.value * EthTax) / 100);
        uint256 numberOfTokens = EthToToken(amount);
        uint256 tokenValue = tokenForSale();
        require(tokenValue >= numberOfTokens, "Insufficient");
        soldToken += numberOfTokens;
        amountRaisedEth += msg.value;
        DoughFi.transferFrom(owner, msg.sender, numberOfTokens);
    }

    function buyTokenUSDT(uint256 _amount) external {
        require(CanBuy == true, "Can't buy token");
        require(buywithUSDT == true, "NOT BUY");
        uint256 extraAmount = (_amount - (_amount * UsdtTax) / 100);
        uint256 numberOfTokens = usdtToToken(extraAmount);
        uint256 tokenValue = tokenForSale();
        require(tokenValue >= numberOfTokens, "Insufficient");
        USDT.transferFrom(msg.sender, address(this), _amount);
        soldToken += numberOfTokens;
        amountRaisedUsdt += _amount;
        DoughFi.transferFrom(owner, msg.sender, numberOfTokens);
    }

    function tokenForSale() public view returns (uint256) {
        return DoughFi.allowance(owner, address(this));
    }

    function EthToToken(uint256 _amount) public view returns (uint256) {
        uint256 EthToUsd = (_amount * getLatestPriceEth()) / 1e8;
        uint256 numberOfTokens = (EthToUsd * tokenPerUSDT) / 1 ether;
        uint256 tokens = (numberOfTokens * (10**DoughFi.decimals())) / 1 ether;
        return tokens;
    }

    function usdtToToken(uint256 _amount) public view returns (uint256) {
        uint256 totalTokens = (_amount * tokenPerUSDT) / 1 ether;
        uint256 tokens = (totalTokens * (10**DoughFi.decimals())) /
            10**USDT.decimals();
        return tokens;
    }

    function setEthTax(uint8 _tax) external onlyOwner {
        EthTax = _tax;
    }

    function setUsdtTax(uint8 _tax) external onlyOwner {
        UsdtTax = _tax;
    }

    function setPriceFeedEth(address _priceFeedEth) external onlyOwner {
        priceFeedEth = AggregatorV3Interface(_priceFeedEth);
    }

    function changePrice(uint256 _price) external onlyOwner {
        tokenPerUSDT = _price;
    }

    function setTotalSupply(uint256 _totalSupply) external onlyOwner {
        totalSupply = _totalSupply;
    }

    function changeOwner(address payable _newOwner) external onlyOwner {
        owner = _newOwner;
    }

    function changeToken(address _token) external onlyOwner {
        DoughFi = IToken(_token);
    }

    function changeUSDT(address _usdt) external onlyOwner {
        USDT = IToken(_usdt);
    }

    function setBuying(bool enable) external onlyOwner {
        require(enable != CanBuy, "Already in that state");
        CanBuy = enable;
    }

    function setbuywithUSDT(bool enable) external onlyOwner {
        buywithUSDT = enable;
    }

    function withdrawEth(uint256 amount) external onlyOwner {
        require(amount <= address(this).balance, "Insufficient balance");
        payable(msg.sender).transfer(amount);
    }

    function withdrawTokens(address _tokenAddress, uint256 _amount)
        external
        onlyOwner
    {
        IToken token = IToken(_tokenAddress);
        require(
            token.balanceOf(address(this)) >= _amount,
            "Insufficient balance"
        );
        token.transfer(owner, _amount);
    }
}
设置
{
  "compilationTarget": {
    "DoughFiPresale.sol": "DoughFiPresale"
  },
  "evmVersion": "cancun",
  "libraries": {},
  "metadata": {
    "bytecodeHash": "ipfs"
  },
  "optimizer": {
    "enabled": true,
    "runs": 200
  },
  "remappings": []
}
ABI
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"CanBuy","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"DoughFi","outputs":[{"internalType":"contract IToken","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"EthTax","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"EthToToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"USDT","outputs":[{"internalType":"contract IToken","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"UsdtTax","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"amountRaisedEth","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"amountRaisedUsdt","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTokenETH","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"buyTokenUSDT","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"buywithUSDT","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address payable","name":"_newOwner","type":"address"}],"name":"changeOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_price","type":"uint256"}],"name":"changePrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"}],"name":"changeToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_usdt","type":"address"}],"name":"changeUSDT","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getLatestPriceEth","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"priceFeedEth","outputs":[{"internalType":"contract AggregatorV3Interface","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"enable","type":"bool"}],"name":"setBuying","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"_tax","type":"uint8"}],"name":"setEthTax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_priceFeedEth","type":"address"}],"name":"setPriceFeedEth","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_totalSupply","type":"uint256"}],"name":"setTotalSupply","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"_tax","type":"uint8"}],"name":"setUsdtTax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enable","type":"bool"}],"name":"setbuywithUSDT","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"soldToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokenForSale","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokenPerUSDT","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"usdtToToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"withdrawEth","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_tokenAddress","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"withdrawTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]