以下是一个基本的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;