对象1一个needer 受益人 募集资金
多个funder 捐赠者
pragma solidity ^0.4.0;
contract zhongchou{
struct funder{
address funderaddress;//捐赠者地址
uint Tomoney;//捐多少钱
}
struct needer{
address Neederaddress;//受益人地址
uint goal;//资金
uint amount;//已经募集到的资金
uint funderAccount;//有多少个捐献者
mapping(uint=>funder) map;//映射到捐赠者
}
uint neederAmount;//管理 needer的数量
mapping(uint=>needer) needmap;//每个数量对应哪一个 needer,存储在区块链上面
function NewNeeder(address _Neederaddress,uint _goal){//行为
neederAmount++;
needmap[neederAmount]=needer(_Neederaddress,_goal,0,0);//新建一个needer
}
function contribute(address _address,uint _neederAmount)payable{
needer storage _needer=needmap[_neederAmount];//拿到受益人实例
_needer.amount+=msg.value;//向受益人合约账户转钱
_needer.funderAccount++;//捐献者加一
_needer.map[_needer.funderAccount]=funder(_address,msg.value);//绑定捐献者地址和捐赠数目给受益人
}//捐赠行为
function ISconpelete(uint _neederAmount){
needer storage _needer=needmap[_neederAmount];
if(_needer.amount>=_needer.goal){
_needer.Neederaddress.transfer(_needer.amount);//把合约账户的钱转移到受益人地址上
}
}
//判断是否完成捐赠目标
function test()view returns(uint,uint,uint){
return(needmap[1].goal,needmap[1].amount,needmap[1].funderAccount);
}
}