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 ...
随机推荐
- 基础7 面向对象进阶与socket编程
1.静态方法(用得少)(解除某个函数跟类的关联,加了静态方法后,类便不能将类的参数传给静态方法函数了) class Dog(object): def __init__(self,name): @sta ...
- 【linux】关于linux命令
1. 删除空目录文件夹rmdir [options] DIRECTORY Ubuntu默认的源是国外的,下载速度会比较慢,cd /etc/apt gedit /etc/apt/
- jquery截取、判断字符串的长度,中英文都可
计算字符串的长度(一个双字节字符长度计2,ASCII字符计1) String.prototype.len=function(){return this.replace([^\x00-\xff]/g,& ...
- Sql 本周当天本期日期转换
--查询当天: --查询24小时内的: --info为表名,datetime为数据库中的字段值 --查询当天: --查询24小时内的: select * from table where DateDi ...
- 修改model,映射到表中
1. 当使用EF code first创建数据表后,数据库中会自动创建一个名为:dbo.__MigrationHistory的系统数据表, 如果尚未启用数据库迁移功能,那么每次在应用程序运行时,都会对 ...
- 乐蜂网SALES倒计时原码展示
这是一个基于jquey写的倒计时.当然代码有点小改动,只是改了一下展示效果. 在静态页添加显示倒计时的容器,并引用下面脚本,代入时间参数即可使用. timeoutDate——到期时间,时间格式为201 ...
- MacOS python自动补全设置
1. 新建python自动补全脚步 $ cd <workdir> $ touch tab.py $ vim tab.py,输入如下内容后保存 $ chmod +x tab.py #!/us ...
- CSS选择器备忘录
CSS选择器备忘录 基本选择器 Selector Meaning Example 通用选择器 匹配任何元素 * 标签选择器 CSS1中称之为元素选择器,匹配为指定标签的所有元素 div 伪元素选择器 ...
- #include stdio.h(4)
#include <stdio.h> int main() { //****************1.数组*************** //什么是数组:专门用来存放数据的 /* 格式 ...
- 如何在js中获取到服务器端控件并给其赋值
如下所示:lbID为服务器端控件ID document.getElementById('<%=lbID.ClientID%>').value = "赋值";