zoukankan      html  css  js  c++  java
  • ethereum(以太坊)(十二)--应用(一)__集资(构造函数/映射)

    pragma solidity ^0.4.4;
    
    contract funder{
    
        //0xca35b7d915458ef540ade6068dfe2f44e8fa733c
        //0x14723a09acff6d2a60dcdf7aa4aff308fddc160c :10
        //0x583031d1113ad414f02576bd6afabfb302140225 :20
    
        struct Funder{
            address addr;
            uint amount;
        }
    
        struct Campaign{
            address beneficiary; //受益人
            uint fundingGoal; //集资目标
            uint numFunders;  //出资人数
            uint mount;       //已集资数
            mapping(uint => Funder) Funders; //按照索引存储出资人信息
        }
    
        uint numCampaigns;
        mapping(uint => Campaign) public Campaigns;  //按照索引存储每个受益人的状态
    
        //向指定受益人出资一定数量的钱
        //function newCampaign(address beneficiary,uint goal) public returns(uint campaignID){
        //function newCampaign(address beneficiary,uint goal) public{ //DeclarationError: Undeclared identifier__campaignID
        function newCampaign(address beneficiary,uint goal) public{
            //var campaignID = numCampaigns++;
            //Campaigns[campaignID] = Campaign(beneficiary,goal,0,0);
    
            Campaigns[numCampaigns] = Campaign(beneficiary,goal,0,0);
            numCampaigns ++;
    
        }
    
        function contribute(uint campaignID) public payable{
            Campaign storage c = Campaigns[campaignID];  //每个受益人的状态
            c.Funders[c.numFunders++] = Funder({addr:msg.sender,amount:msg.value});
            //Funder({addr:msg.sender,amount:msg.value}) 当前转账人的地址,和转账金额
            //c.numFunders++ 统计向当前受益人转账的人数
            // 0 => 转账地址
            c.mount += msg.value; //当前受益人的总受益
            c.beneficiary.transfer(msg.value);//向受益人的地址转入ethtereum
        }
    
        function checkGoalReached(uint campaignID) public constant returns(bool reached){
            Campaign storage c = Campaigns[campaignID];
            if(c.mount < c.fundingGoal){
                return false;
            }
            return true;
        }
    }
    遇到的问题:
    1.受益人可以相同
    2.struct+mapping:根据索引存储大量结构体

     

  • 相关阅读:
    CLR via C#
    一些写英文简历的词汇
    组合与组合数
    A lowlevel Look at the ASP.NET Architecture
    \r与\n的区别,\r\n与\n或\r的区别(C语言/C#)
    Canvas lineWidth 属性 【每日一段代码18】
    程序员三大世界观 如何看待HTML5
    Canvas运用样式与颜色fillStyle【每日一段代码15】
    Canvas绘制路径:贝塞尔曲线【每日一段代码12】
    Canvas绘制弧形【每日一段代码10】
  • 原文地址:https://www.cnblogs.com/eilinge/p/9984497.html
Copyright © 2011-2022 走看看