0
点赞
收藏
分享

微信扫一扫

Solidity 实战 -- 众筹合约

49路末班车 2022-02-09 阅读 62
pragma solidity ^0.4.0;

contract demo {
struct funder {
// 捐赠者地址
address funderAddress;
// 捐赠者捐赠的金钱
uint Tomoney;
}

// 受益人对象
struct needer {
// 受益人地址
address Neederaddress;
// 受益人的目标值
uint goal;
// 当前募集了多少钱
uint amount;
// 捐赠者的 id
uint funderAccount;
// 将捐赠者的id与捐赠者绑定在一起,从而能够得知,是谁给当前的受益人捐钱了
mapping(uint => funder) map;
}

// 受益人的 id 数
uint neederAccount;
// 将受益人id与受益人绑定在一起,从而更好管理收益人
mapping(uint => needer) needmap;

// 新的众筹实例
function NewNeeder(address _Neederaddress, uint _goal) {
// 将 id 与受益人连接在一起
neederAccount++;
needmap[neederAccount] = needer(_Neederaddress, _goal, 0, 0);
}

// 贡献钱
// _address: 捐赠者的地址
// _neederAmount: 受益人 id
function contribute(address _address, uint _neederAmount) payable {
// 拿到受益人实例
needer storage _needer = needmap[_neederAmount];
// 募集的资金增加
_needer.amount += msg.value;
// 捐献者个数 +1
_needer.funderAccount++;
// 将受益人 id 与受益人绑定
_needer.map[_needer.funderAccount] = funder(_address, msg.value);
}

// 是否完成了众筹事件,传入受益人 id 号
// 完成后转账给受益人
function IScomplete(uint _neederAmount) {
needer storage _needer = needmap[_neederAmount];

if (_needer.amount > _needer.goal) {
_needer.Neederaddress.transfer(_needer.amount);
}
}
}
举报

相关推荐

0 条评论