美文网首页
集资合约

集资合约

作者: Venture_Mark | 来源:发表于2018-11-18 15:15 被阅读0次

结构体和字典综合案例

下面的案例是一个集资合约的案例,里面有两个角色,一个是投资人Funder,也就是出资者。另一个角色是运动员Campaign,被赞助者。一个Funder可以给多个Campaign赞助,一个Campaign也可以被多个Funder赞助。

完整合约:

pragma solidity ^0.4.4;

contract CrowdFunding {

    // 定义一个`Funder`结构体类型,用于表示出资人,其中有出资人的钱包地址和他一共出资的总额度。
    struct Funder {
        address addr; // 出资人地址
        uint amount;  // 出资总额
    }

   // 定义一个表示存储运动员相关信息的结构体
    struct Campaign {
        address beneficiary; // 受益人钱包地址
        uint fundingGoal; // 需要赞助的总额度
        uint numFunders; // 有多少人赞助
        uint amount; // 已赞助的总金额
        mapping (uint => Funder) funders; // 按照索引存储出资人信息
    }

    uint numCampaigns; // 统计运动员(被赞助人)数量
    mapping (uint => Campaign) campaigns; // 以键值对的形式存储被赞助人的信息

    // 新增一个`Campaign`对象,需要传入受益人的地址和需要筹资的总额
    function newCampaign(address beneficiary, uint goal) public returns (uint campaignID) {
        campaignID = numCampaigns++; // 计数+1
        // 创建一个`Campaign`对象,并存储到`campaigns`里面
        campaigns[campaignID] = Campaign(beneficiary, goal, 0, 0);
    }

    // 通过campaignID给某个Campaign对象赞助
    function contribute(uint campaignID) public payable {
        Campaign storage c = campaigns[campaignID];// 通过campaignID获取campaignID对应的Campaign对象
        c.funders[c.numFunders++] = Funder({addr: msg.sender, amount: msg.value}); // 存储投资者信息
        c.amount += msg.value; // 计算收到的总款
        c.beneficiary.transfer(msg.value);
    }

    // 检查某个campaignID编号的受益人集资是否达标,不达标返回false,否则返回true
    function checkGoalReached(uint campaignID) public returns (bool reached) {
        Campaign storage c = campaigns[campaignID];
        if (c.amount < c.fundingGoal)
            return false;
        return true;
    }
}

相关文章

  • 集资合约

    结构体和字典综合案例 下面的案例是一个集资合约的案例,里面有两个角色,一个是投资人Funder,也就是出资者。另一...

  • 罗马时代就有了公司的雏形

    公元前3000年,中东的亚述人就开始签订商业合约,那个时候甚至出现了这样的合伙协议书:14个人集资26块黄金成立一...

  • 集资

    今天项目部开会,要求项目管理人员集资,每人5万,让项目工程开展起来。 由于业主资金暂时没有到位,项目部也与业主沟通...

  • 非法集资与众筹区别

    对于非法集资的通行理解是:未经有关部门依法批准的集资;无审批权限的部门批准的集资;有审批权限的部门越权批准的集资;...

  • 长安链源码学习-智能合约 (八)

    智能合约包括系统合约、业务合约,这节将阐述长安链合约是如何分类的,以及智能合约执行流程。 1. 合约分类 系统合约...

  • Solidity__合约调用合约

    合约调用已经部署的合约 先部署下面的合约,复制合约地址。往合约转入以太坊待测试,getBalance()返回该合约...

  • 合约方法

    合约创建合约 一个合约可以创建另一个合约,以下是B合约创建了A合约。 例: 方法 方法是合约的逻辑实现部分,组成部...

  • 非法集资

    是政府不愿意划这个标准。不愿意划这个标准当然有他的理由,这个标准若要划出来确实很难划得非常精确,无论你怎么划,一定...

  • 关于集资

    小时候有过一个想法,如果全国每个人都给我一块钱,那我不就又十几亿?那不是想买什么就买什么。我觉得我特别聪明,这个想...

  • 非法集资

    各种预付费一起筹资作为股权的方式都是一种非法集资。

网友评论

      本文标题:集资合约

      本文链接:https://www.haomeiwen.com/subject/scdgfqtx.html