智能合约实现众筹

pragma solidity >=0.4.22 <0.7.0;

contract zhongchou{
    
    uint NeederId;

    mapping(uint => Needer) Needers; 
    
    struct Needer{
        address neederAddress;
        uint needMoney;
        uint nowMoney; 
        uint FunderId;
        mapping(uint=>Funder) Funders;
    }
    
    
    //发起,注意转账的时候的ether不是写在合约里面的。
    struct Funder{
        address playerAdderss;
        uint toMoney;
    }
    //设置每次参与的单位
    uint price = 1 ether;
    
    
    function getAddress() public view returns(address){
        return msg.sender;
    }
    
    
    function newNeeder(uint _needMoney) public{
        NeederId ++;
        Needers[NeederId] = Needer(msg.sender,_needMoney*price,0,0);
    }
    
   //参与众筹,
    function fund(uint _to) payable public{
        
        Needer storage _needer = Needers[_to];
        
        _needer.nowMoney += msg.value;
        _needer.FunderId++;
        _needer.Funders[_needer.FunderId] = Funder(msg.sender,msg.value);
    }
    
    //查看是否完成
    function finishd(uint _NeederID) payable public {
        
        Needer storage _Needer = Needers[_NeederID];
        
        if(_Needer.nowMoney>=_Needer.needMoney){
            address(uint160(_Needer.neederAddress)).transfer(_Needer.nowMoney);
        }
    }
    
    //这样写是为了方便查看信息
    function showData(uint _NeederId) public view returns(uint,uint,address){
        Needer storage _Needer = Needers[_NeederId];
        return (_Needer.needMoney,_Needer.nowMoney,_Needer.neederAddress);
    }
}


功能:

  • Needer结构体是众筹发起者的数据结构,其中的mapping对应该众筹项目下的参与众筹者,一个id对应一个参与者
  • Funder为参与者结构体,有其地址和参与的金额。
  • needer发起请求,函数为NewNeeder,参数为需要的总金额,将id写入到Needers中,Needers(NeederId) = Needer(msgd.sender,needMoney,0,0)通过该结构体构造函数新生成一个Needer,
  • 转账的时候是先给合约地址,当nowMoney>=needmoney的时候,表示众筹成功,此时众筹者再将存在合约中的ether转移到自己的账户中。
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值