pragma solidity ^0.4.20; interface token { function balanceOf(address addr) external returns (uint256); function transfer(address receiver, uint256 amount) external; } contract ICO10 { address public owner; token public tokenReward; string public contractName; uint256 public minETH; uint256 public price; mapping(address => uint256) public balanceETHOf; modifier onlyOwner { require(msg.sender == owner); _; } function ICO10( address addressOfToken ) public { owner = msg.sender; tokenReward = token(addressOfToken); contractName = "T30_ICO_10"; minETH = 10; price = 3666; } event BuyResult(address sender, bool success, string msg, uint256 amount); function () payable public { uint ethValue = msg.value; // uint ethValue = msg.value * 10 ** uint256(18); uint amount = ethValue * price; bool isOK = (tokenReward.balanceOf(address(this)) >= amount && tokenReward.balanceOf(msg.sender) + amount >= tokenReward.balanceOf(msg.sender)); require(isOK); uint point = minETH * 10 ** uint256(18); bool isGood = (ethValue >= point && ethValue % point == 0); require(isGood); balanceETHOf[msg.sender] += ethValue; tokenReward.transfer(msg.sender, amount); emit BuyResult(msg.sender, true, "购买成功", amount); } function transferOwnership(address newOwner) onlyOwner public { owner = newOwner; } function queryETH() onlyOwner public view returns (uint256) { return address(this).balance; } function drawETH(address to, uint256 amount) onlyOwner public { to.transfer(amount); } function drawT30(address to, uint256 amount) onlyOwner public { tokenReward.transfer(to, amount); } }