合约众筹

本合约是一个比较完整的众筹合约,含:新建众筹项目,转账,打款,以及退款等功能!

编写合约时,可以直接在 线上 编写和测试部署

参与者只需记录参与者的地址和捐赠的金额

发起者则需要较多的属性,如:受益地址,目标金额,是否募资完成等!!!

另外,要通过funderMap(mapping)将捐赠者的id与捐赠者绑定在一起,从而得知是谁给受益人捐钱。

声明发起众凑的项目,并且通过neederMap(mapping)将受益人id与收益金额绑定在一起,从而可以更好的管理受益人

create众凑项目的时候,直接给定一个自增的序号当作当前众凑项目的id。create项目时,要根据前面声明的needer结构体实例,参数要一一对应。

捐赠可以根据众凑项目id给该项目捐钱(转账),当合约的方法发生转账时必须用到 payable 关键字。另外,要先校验捐赠者钱包余额够不够本次捐赠的余额,还有校验该项目是否已终止,判断都有效的情况,此时会将本次捐赠的金额直接转账到当前合约中,同时记录捐赠人数和记录捐赠者。

结束项目的原因有多种,但是这里只是用捐赠完成的原因作为例子。捐赠完成后,可以由合约发起者(本合约中也是受益者)发起将合约的钱转到自己的钱包地址中,这里同样发生了交易,所以也要用到关键字 payable 。然而,我们发现该方法中有一个 onlyOwner 修饰词,onlyOwner在下面会声明,表示只能是合约发起者才能调用该方法。

当捐款的完成后,由于合约没有销毁,捐赠者还是可以继续捐赠的,因此会导致多出的钱仍在合约账户中,所以就有了该退款的方法。该方法是将合约上的钱根据捐赠者退回给捐赠者。

源码地址: /Jacky-MYD/Crowd-funding-solidity