pragma solidity ^0.4.0;
contract CrowdFunding{
// 捐赠者
struct funder{
address funderAddress;
uint money; // 捐赠的钱
}
// 需求者
struct needer{
address neederAddress;
uint goal; // 目标募集金额
uint amount; // 已募集到的金额
uint funderAccount; // 捐赠者数量
mapping(uint => funder) funderMap;
}
uint neederAmount; // 需求者数量
mapping(uint => needer) neederMap;
// new一个需求者(一个众筹)
function NewCrowd(address _neederAddress, uint _goal){
neederAmount++;
neederMap[neederAmount]= needer(_neederAddress, _goal, 0, 0);
}
// 捐赠者捐赠
function donation(address _address, uint _neederId) payable{ // 传递捐赠者的地址和id
needer storage _needer = neederMap[_neederId]; // 传入需求者的Id
_needer.amount += msg.value; // 将捐赠者捐赠的金额加到需求者已募捐到的金额上
_needer.funderAccount++; // 捐赠者个数加一(未考虑捐赠者的id是否重复)
_needer.funderMap[_needer.funderAccount] = funder(_address, msg.value); //(看不懂)
}
// 判断募捐是否完成
function isComplete(uint _neederAmount){
needer storage _needer = neederMap[_neederAmount]; // 传入需求者的Id
if(_needer.amount >= _needer.goal){ //判断募捐的金额是否达到目标募捐金额
_needer.neederAddress.transfer(_needer.amount); // 讲金额转移到需求者的地址上
}
}
// 测试函数
function test() view returns(uint, uint, uint){
return (neederMap[1].goal, neederMap[1].amount, neederMap[1].funderAccount);
}
}
Solidity区块链小项目----众筹
最新推荐文章于 2024-03-18 15:32:34 发布