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. Spring InitializingBean init-method @PostConstruct 执行顺序

    Spring 容器中的 Bean 是有生命周期的,Spring 允许在 Bean 在初始化完成后以及 Bean 销毁前执行特定的操作,常用的设定方式有以下三种:   通过实现 Initializing ...

  2. CSS如何居中元素

    How to center in CSS 一步步拆解你的需求,是水平居中还是垂直居中?还是水平垂直居中?父容器是inline还是block,高度知不知,宽度造不造?一个子元素还是多个子元素?一行还是多 ...

  3. <Android 基础(十五)> Alert Dialog

    介绍 The AlertDialog class allows you to build a variety of dialog designs and is often the only dialo ...

  4. css3 animatehue属性

    -webkit-perspective(-moz,-o,perspective下同)表示透视范围大小: -webkit-transform-style很好理解了,表示变换类型,preserve-3d看 ...

  5. 文件上传PHP

    <?php $targetIp = GetIP(); $fileUpload = 'fileUpload'; $frameCount = 'frameCount'; $fileName = $_ ...

  6. 【起航计划 028】2015 起航计划 Android APIDemo的魔鬼步伐 27 App->Preferences->Launching preferences 其他activity获取Preference中的值

    前给例子介绍了如何使用PreferenceActivity 来显示修改应用偏好,用户对Preferences的修改自动存储在应用对应的Shared Preferences中. 本例介绍了如何从一个Ac ...

  7. ansible使用8-Best Practices

    Content Organization production # inventory file for production servers stage # inventory file for s ...

  8. Win10 设备补丁更新

    用户对客户端设备补丁更新保持怀疑态度,因为他们担心他们的计算机会在未经许可的情况下突然自己重启,丢失数据.虽然,您可以在更新后推迟重新启动并安排选择的时间,具体取决于更新Windows在未经您许可的情 ...

  9. 关于Mysql中文乱码问题该如何解决(乱码问题完美解决方案)(转)

    这篇文章给大家介绍关于Mysql中文乱码问题该如何解决(乱码问题完美解决方案)的相关资料,还给大家收集些关于MySQL会出现中文乱码原因常见的几点,小伙伴快来看看吧   最近两天做项目总是被乱码问题困 ...

  10. vos设置禁止被叫特定号码段特定区域

    问题: 为了防止卡线遭投诉被运营商停,给公司带来损失,对一些特定号段特定区域要进行限制,不让客户呼出 打开VOS3000 落地网关——补充设置——落地被叫前缀——禁止 添加禁止号段 具体案例: 如填写 ...