1.ico.sol 需要结合ERC20.sol使用
pragma solidity^0.4.20;
interface token{
function transfer(address _to,uint256 _account) external ;
}
contract ICO {
uint public fundingGoal;//众筹目标
uint public deadline;//众筹时间
uint public price;//价格
uint public fundAmount//众筹金额
token public tokenReward;
address punlic beneficiary;//受益者
mapping (address => uint ) public balanceOf;
event FundTransfer(address backer,uint amount);
event GoalReached(bool success);
//构造函数
constructor(uint fundingGoalInEthers,uint durationInMinutes,uint etherCostofEachToken,address addressOfToken){
beneficiary=msg.sender;//受益者
fundingGoal =fundingGoalInEthers;//众筹目标金额
deadline =now +durationInMinutes * 1 minutes;//截至时间
price =etherCostofEachToken * 1 ether; //1ether=10**18wei
tokenReward=token(addressOfToken);
}
//接受
function () public payable{
require(now <deadline);
balanceOf[msg.sender]+=amount;
fundAmount +=amount;
uint amount =msg.value;//wei
uint tokenAccount=amount / price;
tokenReward.transfer(msg.sender,tokenAccount);
emit FundTransfer(msg.sender,amount);
}
//检查获得的钱
function checkGoalReached() public {
require(now >=deadline);
if(fundAmount>= fundingGoal){
emit GoalReached(true);
}
}
//提钱
function withdrawal() public {
require(now >=deadline);
if (fundAmount>=fundingGoal){
//众筹金额大于目标众筹金额
if(beneficiary==msg.sender){
//受益者获得转账
beneficiary.transfer(fundAmount);
}
}else{
uint amount =balanceOf[msg.sender];
if(amount >0){
//老板提取钱
msg.sender.transfer(amount);
balanceOf[msg.sender]=0;
}
}
}
}