NFT/IDO代币预售智能合约技术开发及源代码示例

317 阅读1分钟

以下是一个基本的IDO代币预售智能合约代码示例:

typescriptCopy code
pragma solidity ^0.8.0;

import "@openzeppelin/contracts/token/ERC20/ERC20.sol";
import "@openzeppelin/contracts/utils/math/SafeMath.sol";
import "@openzeppelin/contracts/access/Ownable.sol";

contract IDO is Ownable {
    using SafeMath for uint256;

    ERC20 public token;
    address public wallet;
    uint256 public startTime;
    uint256 public endTime;
    uint256 public rate;
    uint256 public cap;
    uint256 public minPurchase;
    uint256 public maxPurchase;
    uint256 public weiRaised;
    uint256 public tokensSold;

    mapping(address => uint256) public balances;
    mapping(address => bool) public whitelist;

    event TokensPurchased(address indexed purchaser, uint256 value, uint256 amount);
    event SaleEnded(uint256 totalWeiRaised, uint256 totalTokensSold);
    event TokenMined(address indexed miner, uint256 amount);

    constructor(
        ERC20 _token,
        address _wallet,
        uint256 _startTime,
        uint256 _endTime,
        uint256 _rate,
        uint256 _cap,
        uint256 _minPurchase,
        uint256 _maxPurchase
    ) {
        require(_startTime >= block.timestamp, "IDO: start time is before current time");
        require(_endTime > _startTime, "IDO: end time must be after start time");
        require(_rate > 0, "IDO: rate must be greater than 0");
        require(_cap > 0, "IDO: cap must be greater than 0");
        require(_minPurchase > 0, "IDO: min purchase amount must be greater than 0");
        require(_maxPurchase > _minPurchase, "IDO: max purchase amount must be greater than min purchase amount");

        token = _token;
        wallet = _wallet;
        startTime = _startTime;
        endTime = _endTime;
        rate = _rate;
        cap = _cap;
        minPurchase = _minPurchase;
        maxPurchase = _maxPurchase;