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:根据索引存储大量结构体

ethereum(以太坊)(十二)--应用(一)__集资(构造函数/映射)的更多相关文章

  1. ethereum(以太坊)(十二)--应用(二)__投票(基础总和)

    编写应用合约之前,先弄清它的逻辑,有助于我们更好的部署合约 pragma solidity ^0.4.21; pragma experimental ABIEncoderV2; contract vo ...

  2. ethereum(以太坊)(十四)--Delete

    pragma solidity ^0.4.10; contract Delete{ /* delete可用于任何变量(除mapping),将其设置成默认值 bytes/string:删除所有元素,其长 ...

  3. ethereum(以太坊)(十)--函数修饰符

    pragma solidity ^0.4.0; contract modifierTest{ uint public v1; uint constant v2 =10; //uint constant ...

  4. 以太坊开发(二)使用Ganache CLI在私有链上搭建智能合约

    以太坊开发(二)使用Ganache CLI在私有链上搭建智能合约 在上一篇文章中,我们使用Truffle自带的客户端Truffle Develop,在私有链上搭建并运行了官方提供的WebPack智能合 ...

  5. ethereum(以太坊)(一)

    从这周开始,开始学习以太坊开发--solidity,开始决定往区块链方向发展,毕竟区块链技术应用广泛.一开始接触solidity开发语言不太习惯,毕竟一直在学习python语法,有很多都不能接受.有难 ...

  6. ethereum(以太坊)(十一)--字节数组(二)

    pragma solidity ^0.4.0; contract test { uint [5] T =[1,2,3,4,5] ;//固定长度的数组:可修改数组内值大小,不支持push,不可更改长度 ...

  7. ethereum(以太坊)(基础)--容易忽略的坑(二)

    pragma solidity ^0.4.0; contract EMath{ string public _a="lin"; function f() public{ modif ...

  8. ethereum(以太坊)(二)--合约中属性和行为的访问权限

    pragma solidity ^0.4.0; contract Test{ /* 属性的访问权限 priveta public internal defualt internal interlnal ...

  9. 以太坊(二)安装Solidity编译器

    官方地址:https://solidity.readthedocs.io/en/develop/installing-solidity.html 推荐使用  remix   快速学习solidity  ...

随机推荐

  1. js 去掉字符串前后空格5种方法

    第一种:循环检查替换 //供使用者调用 function trim(s){ return trimRight(trimLeft(s)); } //去掉左边的空白 function trimLeft(s ...

  2. Vue Element-ui 框架:路由设置 限制文件类型 表单验证 回车提交 注意事项 监听事件

    1.验证上传文件的类型: (1)验证图片类型 <template> <el-upload class="avatar-uploader" action=" ...

  3. Dynamics CRM 2011通过客户端代码选择视图

    在实施的过程中我们经常会遇到这样的场景,有个系统标准的Lookup字段对应的不是一种Entity,如很多地方的客户实际上可选account或者contact,有的地方可选systemuser或者tea ...

  4. TX Text Control X10新特性之图像占位符合并

    文档处理控件TX Text Control即将发布的X10版本,将升级重点还是放到了其比较优势的流式布局报表设计和生成上.慧都获得了来自其开发商Text Control GmbH公司的一手资料,迫不及 ...

  5. Conferences

    中国学术会议在线 :http://www.meeting.edu.cn 中国会议网: http://www.chinameeting.com 香山科学会议:http://www.xssc.ac.cn/ ...

  6. EF--payload or not

    负载加载非负载加载适用于多对多场境. 一.非负载(payload-free)加载 1.1创建表 create table Album ( AlbumId ,), AlbumName ) ) creat ...

  7. 5步玩转Power BI Embedded,老司机全程带路解析

    最近,由世纪互联运营的 Microsoft Azure 发布了一个超级炫酷的服务 Power BI Embedded,该服务可以通过 REST API 和 Power BI SDK 将 Power B ...

  8. expres webpack es6 babel 构建多页系统开发架构

    开始写点什么... 只是一个思路........

  9. 在C++Builder中定义事件的实现方法

    ++Builder是由Borland公司推出的一款可视化集成开发工具.C++Builder的集成开发环境(IDE)提供了一系列可视化快速应用程序开发(RAD)工具,让程序员可以很轻松地建立和管理自己的 ...

  10. Javascript打印金字塔,倒立金字塔,空心金字塔,菱形,空心菱形等

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...