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

ethereum(以太坊)(十二)--应用(一)__集资(构造函数/映射)的更多相关文章
- ethereum(以太坊)(十二)--应用(二)__投票(基础总和)
编写应用合约之前,先弄清它的逻辑,有助于我们更好的部署合约 pragma solidity ^0.4.21; pragma experimental ABIEncoderV2; contract vo ...
- ethereum(以太坊)(十四)--Delete
pragma solidity ^0.4.10; contract Delete{ /* delete可用于任何变量(除mapping),将其设置成默认值 bytes/string:删除所有元素,其长 ...
- ethereum(以太坊)(十)--函数修饰符
pragma solidity ^0.4.0; contract modifierTest{ uint public v1; uint constant v2 =10; //uint constant ...
- 以太坊开发(二)使用Ganache CLI在私有链上搭建智能合约
以太坊开发(二)使用Ganache CLI在私有链上搭建智能合约 在上一篇文章中,我们使用Truffle自带的客户端Truffle Develop,在私有链上搭建并运行了官方提供的WebPack智能合 ...
- ethereum(以太坊)(一)
从这周开始,开始学习以太坊开发--solidity,开始决定往区块链方向发展,毕竟区块链技术应用广泛.一开始接触solidity开发语言不太习惯,毕竟一直在学习python语法,有很多都不能接受.有难 ...
- ethereum(以太坊)(十一)--字节数组(二)
pragma solidity ^0.4.0; contract test { uint [5] T =[1,2,3,4,5] ;//固定长度的数组:可修改数组内值大小,不支持push,不可更改长度 ...
- ethereum(以太坊)(基础)--容易忽略的坑(二)
pragma solidity ^0.4.0; contract EMath{ string public _a="lin"; function f() public{ modif ...
- ethereum(以太坊)(二)--合约中属性和行为的访问权限
pragma solidity ^0.4.0; contract Test{ /* 属性的访问权限 priveta public internal defualt internal interlnal ...
- 以太坊(二)安装Solidity编译器
官方地址:https://solidity.readthedocs.io/en/develop/installing-solidity.html 推荐使用 remix 快速学习solidity ...
随机推荐
- DataGridView带图标的单元格实现
目的: 扩展 C# WinForm 自带的表格控件,使其可以自动判断数据的上下界限值,并标识溢出. 这里使用的方法是:扩展 表格的列 对象:DataGridViewColumn. 1.创建类:Data ...
- Linux 作业调度器 crond
linux缺省会启动crond进程,crond进程不需要用户启动.关闭. 需要启动/关闭cron /sbin/service crond start --启动服务 /sbin/service cro ...
- 从零开始的全栈工程师——js篇2.18(js的运动)
一.元素的 client offset scroll 三个系列 clientWidth / clientHeight / clientTop / clientLeftoffsetWidth / off ...
- HTML三种样式引入方式
HTML三种样式引入方式 HTML有三种样式引入方式:行内样式(inline Styles).嵌入式样式表(Embedded Style Sheets).外部样式表(External Style ...
- react-native 视频播放器(很不错哦)
第一步: npm i -S react-native-af-video-player(安装前:先安装: react-native-video.react-native-keep-awake.react ...
- C#面向对象几组关键字的详解(this,base,dynamic,var,const,readonly,is,as)
× 目录 [1]this和base的区别 [2]var和dynamic的区别 [3]const和readonly的区别 [4]is和as的区别 这几个关键字,在用法上有许多相似之处.这里主要看看细节之 ...
- 用SQL将数字转换为中文数字
IF OBJECT_ID('fn_GetChnNum') IS NOT NULL BEGIN DROP FUNCTION dbo.fn_GetChnNum; END; GO CREATE FUNCTI ...
- 【js基础修炼之路】- 微任务,宏任务和Event-Loop
一段代码让你了解Event-Loop console.log(1); setTimeout(() => { console.log(2); }, 0); new Promise((resolve ...
- DedeCms中出现Safe Alert: Request Error step 1/2 的解决方法
dedecms安全警告:Safe Alert: Request Error step 2!不知道大家有没有发现这个现象.只从Dedecms官方公布了之前的版本有严重的漏洞以来,现在在仿站的时候都是采用 ...
- 在TextBox控件中禁用鼠标右键
实现效果: 知识运用: MouseEventArgs类的Button属性 TextBox控件的ContextMenu属性 实现代码: private void textBox1_MouseDo ...