1. pragma solidity ^0.4.4;
  2.  
  3. contract funder{
  4.  
  5. //0xca35b7d915458ef540ade6068dfe2f44e8fa733c
  6. //0x14723a09acff6d2a60dcdf7aa4aff308fddc160c :10
  7. //0x583031d1113ad414f02576bd6afabfb302140225 :20
  8.  
  9. struct Funder{
  10. address addr;
  11. uint amount;
  12. }
  13.  
  14. struct Campaign{
  15. address beneficiary; //受益人
  16. uint fundingGoal; //集资目标
  17. uint numFunders; //出资人数
  18. uint mount; //已集资数
  19. mapping(uint => Funder) Funders; //按照索引存储出资人信息
  20. }
  21.  
  22. uint numCampaigns;
  23. mapping(uint => Campaign) public Campaigns; //按照索引存储每个受益人的状态
  24.  
  25. //向指定受益人出资一定数量的钱
  26. //function newCampaign(address beneficiary,uint goal) public returns(uint campaignID){
  27. //function newCampaign(address beneficiary,uint goal) public{ //DeclarationError: Undeclared identifier__campaignID
  28. function newCampaign(address beneficiary,uint goal) public{
  29. //var campaignID = numCampaigns++;
  30. //Campaigns[campaignID] = Campaign(beneficiary,goal,0,0);
  31.  
  32. Campaigns[numCampaigns] = Campaign(beneficiary,goal,0,0);
  33. numCampaigns ++;
  34.  
  35. }
  36.  
  37. function contribute(uint campaignID) public payable{
  38. Campaign storage c = Campaigns[campaignID]; //每个受益人的状态
  39. c.Funders[c.numFunders++] = Funder({addr:msg.sender,amount:msg.value});
  40. //Funder({addr:msg.sender,amount:msg.value}) 当前转账人的地址,和转账金额
  41. //c.numFunders++ 统计向当前受益人转账的人数
  42. // 0 => 转账地址
  43. c.mount += msg.value; //当前受益人的总受益
  44. c.beneficiary.transfer(msg.value);//向受益人的地址转入ethtereum
  45. }
  46.  
  47. function checkGoalReached(uint campaignID) public constant returns(bool reached){
  48. Campaign storage c = Campaigns[campaignID];
  49. if(c.mount < c.fundingGoal){
  50. return false;
  51. }
  52. return true;
  53. }
  54. }
  1. 遇到的问题:
  2. 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. 斗鱼扩展--DouyuRoom使用说明(十四)

    1.从 https://pan.baidu.com/s/1yBfZFtcakbDxmyas0VCpRw 下载 DouyuRoom.zip 然后解压到一个目录,我是放在C盘根目录下的,你们随意.然后解压 ...

  2. CefSharp High DPI问题的解决

    使用CefSharp控件,在部分高分辨率的电脑中(显示缩放比例非100%,而是120%或者125%等)会出现以下一些情况: 显示的页面中出现了黑边,且按钮定位也偏了,比如点击[图层]按钮,需要点击上面 ...

  3. java 模拟实现消费者和生产者问题

    题目要求 用java代码模拟实现:一个人不断往箱子里放苹果,另一个人不断从箱子里取苹果,箱子只能放5个苹果,苹果数量无限.要求不使用java.util.concurrent包中的类. 思路 这道题主要 ...

  4. hibernate课程 初探一对多映射2-6 测试-添加和查询学生信息

    package com.ddwei.entity; import java.util.Set; import org.hibernate.Session; import org.hibernate.T ...

  5. 数据库navicat中limit函数的用法

    从t_product表中获取pic_small字段的前十条记录 示例:select pic_small from t_product limit 0,10;

  6. Vue.js - Day1

    什么是Vue.js Vue.js 是目前最火的一个前端框架,React是最流行的一个前端框架(React除了开发网站,还可以开发手机App, Vue语法也是可以用于进行手机App开发的,需要借助于We ...

  7. 什么叫erp系统

    一般来说,erp系统是一个以会计(此处的会计是指管理会计)为核心的信息系统,用来识别和规划企业资源, 从而获取客户订单, 完成加工和交付,最后得到客户付款,最终获得收入和利润. 实际上, erp 系统 ...

  8. 《ArcGIS Runtime SDK for Android开发笔记》——(6)、基于Android Studio的ArcGIS Android工程结构解析

    1.前言 Android Studio 是第一个Google官方的 Android 开发环境.其他工具,例如 Eclipse,在 Android Studio 发布之前已经有了大规模的使用.为了帮助开 ...

  9. Java问题定位之Java线程堆栈分析

    采用Java开发的大型应用系统越来越大,越来越复杂,很多系统集成在一起,整个系统看起来像个黑盒子.系统运行遭遇问题(系统停止响应,运行越来越慢,或者性能低下,甚至系统宕掉),如何速度命中问题的根本原因 ...

  10. 仿照everything写的一个超级速查 原创

    http://files.cnblogs.com/files/jacd/%E8%B6%85%E9%80%9F%E6%9F%A5%E6%96%87%E4%BB%B6.zip 速度奇快无比,体积奇小无比, ...