solidity简单众筹合约

pragma solidity ^0.4.19;

contract Fund{

     //定义出资人
    struct Funder{
        address addr;  //出资人地址
        uint amout;    //出资人金额
    } 
    
     //定义受益人
    struct Gainer{
        address gain;    //受益人地址
        uint goal;     //众筹目标
        uint numFunder;    //出资人数量
        uint sum;         //受赠总额
        mapping(uint => Funder) Funders;   //出资人映射 ID -- 出资人
    }
    

    uint Gainernum;  //受益人数量
    mapping(uint => Gainer) Gainers;   //受益人映射  ID-- 受益人
    
   //新增受益人
    function newGainer(address gain,uint goal) public  returns (uint ID){
        ID = Gainernum++;     //增加受益人ID
        Gainers[ID] = Gainer(gain,goal,0,0);     //初始化受益人
    }
    
  //定义捐赠函数
    function  Contribute(uint ID) public payable{
        Gainer storage g = Gainers[ID];    //实例化受益人
        g.Funders[g.numFunder++] = Funder({addr:msg.sender,amout:msg.value});  //实例化出资人
        g.sum += msg.value;   //受赠钱增加
        // g.gain.transfer(msg.value); 这里可以在这里定义转钱,也可以在下面定义,只要理解清楚就行
    }
    
  //定义检查函数,检验捐赠金额是否达到目标
    function Check(uint ID) returns(bool){
        Gainer storage g = Gainers[ID];
        if (g.sum < g.goal){
            return false;
        }
        uint money = g.sum;
        g.sum = 0;
        g.gain.transfer(money);
        return true;
    }
}

运行:

1   新增受益人,返回受益人ID

2 输入地址,开始捐钱

3   检验

发布了123 篇原创文章 · 获赞 71 · 访问量 11万+

猜你喜欢

转载自blog.csdn.net/boke14122621/article/details/100674255