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);
    }

}

おすすめ

転載: blog.csdn.net/Bad_foxS/article/details/127562090