0
点赞
收藏
分享

微信扫一扫

Solidity 实战 -- 众筹合约

49路末班车 2022-02-09 阅读 62
pragma solidity ^0.4.0;

contract demo {
    struct funder {
        // 捐赠者地址
        address funderAddress;
        // 捐赠者捐赠的金钱
        uint Tomoney;
    }

    // 受益人对象
    struct needer {
        // 受益人地址
        address Neederaddress;
        // 受益人的目标值
        uint goal;
        // 当前募集了多少钱
        uint amount;
        // 捐赠者的 id
        uint funderAccount;
        // 将捐赠者的id与捐赠者绑定在一起,从而能够得知,是谁给当前的受益人捐钱了
        mapping(uint => funder) map;
    }

    // 受益人的 id 数
    uint neederAccount;
    // 将受益人id与受益人绑定在一起,从而更好管理收益人
    mapping(uint => needer) needmap;

    // 新的众筹实例
    function NewNeeder(address _Neederaddress, uint _goal) {
        // 将 id 与受益人连接在一起
        neederAccount++;
        needmap[neederAccount] = needer(_Neederaddress, _goal, 0, 0);
    }

    // 贡献钱
    // _address: 捐赠者的地址
    // _neederAmount: 受益人 id
    function contribute(address _address, uint _neederAmount) payable {
        // 拿到受益人实例
        needer storage _needer = needmap[_neederAmount];
        // 募集的资金增加
        _needer.amount += msg.value;
        // 捐献者个数 +1
        _needer.funderAccount++;
        // 将受益人 id 与受益人绑定
        _needer.map[_needer.funderAccount] = funder(_address, msg.value);
    }

    // 是否完成了众筹事件,传入受益人 id 号
    // 完成后转账给受益人
    function IScomplete(uint _neederAmount) {
        needer storage _needer = needmap[_neederAmount];

        if (_needer.amount > _needer.goal) {
            _needer.Neederaddress.transfer(_needer.amount);
        }
    }
}
举报

相关推荐

0 条评论