智能合约案例(众筹)

环境需要:remix
技能需要:solidity语言基础

1.打开remix:https://remix.ethereum.org/
2.创建.sol文件
3.输入脚本(放脚本如下)
4.compile文件
5.部署
6.调用函数(对于本脚本来说,建立众筹、捐献、IsCompelete函数先后执行)


pragma solidity ^0.4.0;
//创建众筹事件、捐赠到提款
 
contract zhongchou{
    //捐赠者的对象--- 捐赠者地址、捐献金额
    struct funder{
        address funderaddress;
        uint Tomoney;
        
    }
    
    //众筹募集者-募集地址、募集资金、已募集到的资金
    struct needer{
        address Neederaddress;
        uint goal;
        uint amount;
        
        //捐赠者的ID
        uint funderAccount;
        //映射,将捐赠者的ID与捐赠者绑定在一起
        mapping(uint => funder) map;
    }
    //建立众筹受益人的库并映射
    uint neederAccount;
	//将受益人的ID与受益人绑定在一起,从而能够更好的管理受益人
    mapping(uint => needer) needmap;// 
    
    //实现众筹项目
    function NewNeeder(address _Neederaddress,uint _goal){
        neederAccount++;
        //直接将new出来的对象存储在needmap中
        needmap[neederAccount] = needer(_Neederaddress,_goal,0,0);
        //needer memory NewNeeder = needer(_Neederaddress,_goal,0,0); 
        //以上注释生成的对象放在内存中
        
    }
    
    //@param _address 捐赠者的地址
	//@param _neederAmount 受益人的ID
    function contribute(address _address,uint _neederAmount) payable {
        //获得受益人的实例
        needer storage _needer = needmap[_neederAmount];
         
        _needer.amount += msg.value;
        //受益人的捐赠者+1
        _needer.funderAccount++;
        //让受益人知道捐赠者的信息
        _needer.map[_needer.funderAccount] = funder(_address , msg.value);
    }
    
    //当募集的资金满足条件
    function IsCompelete(uint _neederAmount){
        needer storage _needer = needmap[_neederAmount];
        
        if(_needer.amount >= _needer.goal){
            //把合约地址的钱 转给受益人
            _needer.Neederaddress.transfer(_needer.amount);
            
        }
        
    }
}

你可能感兴趣的:(区块链)