参考petshop实验,通过web3和ganache、Hardhat 等工具完成合约编写、区块链部署、功能展示
- 项目创建:允许用户提交项目名称、描述、筹款目标金额和截止日期 等信息。合约需要存储这些项目信息,并为每个项目分配一个唯一的 ID。
- 资金捐赠:允许用户选择一个正在进行中的项目,并向其捐赠一定数量的币,存入合约中。合约需要记录每个捐赠者的地址和捐赠金额,并更新项目的当前筹款总额。能够展示所有正在进行和已结束的众筹项目的信息,包括名称、描述、目标金额、已筹金额、剩余时间和捐赠者列表 (可选)。
- 筹款结束逻辑:基于时间结束,当达到项目的截止日期时,任何人都可以调用一个合约函数来结束该项目。
- 结束结果判断:
- 达到或超过目标:合约将当前筹集到的所有资金转移给项目发起人。
- 未达到目标:合约允许捐赠者提取他们捐赠的资金。
- 提取资金:项目发起人在项目成功结束后,可以调用一个合约函数将筹集到的资金提取到他们的账户。捐赠者在项目失败后,可以调用一个合约函数将他们捐赠的资金提取回来。
控制台调用展示、编译器调用展示、前端
- 前端不做过多要求,可使用vue、react等前端框架完成,大家有能力的话尽量写一个简单的前端来展示,整体的效果会比较好
- 实现基于目标完成度的阶段性资金释放 (简化版里程碑),捐款达到一定比例后,或者在项目发起人标记完成某个里程碑后 ,允许释放一部分资金。
- 增加基于时间的早期捐赠奖励机制,例如,前 10 位捐款人可以获得额外的感谢或未来可能的福利。
|-- artifacts
|-- build-info
|-- contracts
|-- CrowdFund.sol
|-- cache
|-- contracts
|-- CrowdFund.sol
|-- frontend
|-- public
|-- router
|-- src
|-- assets
|-- components
|-- contracts
|-- stores
|-- App.vue
|-- main.js
|-- views
|-- index.html'
|-- ignition
|-- deployments
|-- chain-31337
|-- modules
|-- DeployCrowdFund.js
|-- test
|-- CrowdFund.test.js
|-- .gitignore
|-- hardhat.config.js
|-- package-lock.json
|-- package.json
|-- README.md
|-- start-dev-environment.sh
|-- stop_hardhat_node.sh