solidity入门实战 众筹项目

项目描述:由接收者发起一项众筹,各捐赠者进行捐款。(练手,很多细节没有完善)
角色:接收者,捐赠者
事件:发起众筹,发起捐赠,接收者提现。

pragma solidity^0.4.26;

contract crowdFunding{
    // 接收者:账户,目标金额,当前已筹集到的金额,捐款人数,捐赠者列表(用id关联)
    struct Initiator{
        address ini_address;
        uint goal;
        uint current;
        uint sup_amount;
        mapping(uint => Support) idSup;
    }
    // 捐赠者:账户,捐赠金额
    struct Support{
        address sup_address;
        uint sup_value;
    }
    // 接收者集合(用id关联)
    uint  iniId;
    mapping(uint => Initiator) idIni;


    // 发起众筹,不通过Id的方法没法初始化
    // 参数:接收者账户,目标金额
    function create_crowdFunding(address iniAddress, uint _goal){
        idIni[iniId] = Initiator(iniAddress,_goal,0,0);
        iniId++;
    }

    // 发起捐赠
    // 参数:接收者账户,id
    function contribute(address iniAddress, uint _iniId) payable {
        Initiator initiator = idIni[_iniId];
        require(initiator.ini_address == iniAddress);
        Support memory support = Support(msg.sender, msg.value);
        initiator.idSup[initiator.sup_amount] = support;
        initiator.sup_amount++;
        initiator.current += msg.value;
    }

    // 提现,如果大于目标金额即可提现,否则失败
    // 参数:接收者id
    function withdrawal(uint _iniId) returns(string){
        Initiator initiator = idIni[_iniId];
        // 判断是否为接收者,只有接收者有权提现
        if(initiator.ini_address != msg.sender){
            return "Not qualified !";
        }
        if(initiator.current >= initiator.goal){
            initiator.ini_address.transfer(initiator.current);
            return 'success !';
        }
        return 'false !';
    }

    // 获取当前接收者的地址和id
    function getIniId() view returns(uint,address){
        return(iniId-1,idIni[iniId-1].ini_address);
    }

}
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值