简单介绍:
去中心化学生社团组织治理应用
- 每个学生初始可以拥有或领取一些通证积分(ERC20)。
- 每个学生可以在应用中可以:
使用一定数量通证积分,发起关于该社团进行活动或制定规则的提案(Proposal)。
提案发起后一定支出时间内,使用一定数量通证积分可以对提案进行投票(赞成或反对,限制投票次数),投票行为被记录到区块链上。 每人对每个提案只能投一票,且不能反悔。
提案投票时间截止后,赞成数大于反对数的提案通过,提案发起者作为贡献者可以领取一定的积分奖励。
发起提案并通过3次的学生,可以领取社团颁发的纪念品(ERC721)
- 在本地启动ganache应用。
- 修改hardhat config文件的设置,从ganache拷贝一些私钥,并将这些私钥导入小狐狸。
- 在
./contracts
中安装需要的依赖,运行如下的命令:npm install
- 在
./contracts
中编译合约,运行如下的命令:npx hardhat compile
- 部署合约
npx hardhat run ./scripts/deploy.ts --network ganache
- 把部署的地址拷贝到
frontend\src\utils\contract-addresses.json
文件中。 - 在
./frontend
中启动前端程序,运行如下的命令:npm run start
简单描述:
- 首先是发行代币,每个用户可以领取一次空投获得10000代币,代币可以用来发起提案或者进行投票。这个主要参考了彩票demo中的实现。
- 发起提案。用户可以发起提案,提案被记录在区块链上。提案包括名称、内容、持续时间等。发起提案时,智能合约会把提案写入区块链,并保存发起者的地址,便于后面查看自己发起的提案。发起提案会消耗代币。
- 投票。本项目采取不完全记名投票,智能合约会记录某一项提案有几张赞成票,几张反对票,并且记录某个用户是否为某个提案投过票,但不会记录这位用户是赞成还是反对,一定程度上保留了匿名性。投票也会消耗代币。
- 提案通过:每次加载页面,前端会生成一个提交任务队列,每隔一段时间检查一次是否有提案到期,如果到期,则调用智能合约,将提案状态修改为commited,之后这个提案就不能再投票了。智能合约也会记录每个用户发起的提案的列表和通过的提案数,当通过的提案数量等于3时,将为这个用户生成一个NFT图片。
- 查看提案、NFT:分为两种模式,一种是查看全部提案,另一种是只查看自己的提案。查看自己的提案时,可以看到自己是否获得过NFT。进行中的提案可以投票,结束的提案可以看到结果和正反票数。
课程的参考Demo见:DEMOs。
如果有其它参考的内容,也请在这里陈列。