当前位置: 首页 > Web前端 > HTML

关于DAO:如何使用自定义代币进行社区治理投票挖矿系统开发合约教程

时间:2023-03-29 11:08:38 HTML

如何在Story中添加参与者从DAO购买代币和添加提交的功能。编写DAO的最终形式:投票、黑名单、分红和退出。项目开发对接仅hkkf5566我们会提供一些额外的监控辅助功能。投票和提案。发布投票和投票。这需要两个新结构:structProposal{stringdescription;boolexecuted;int256currentResult;uint8typeFlag;//1=deletebytes32目标;//建议目标的ID。IE。flag1,targetXXXXXX(hash)表示删除提交的提案[hash]uint256creationDate;uint256deadline;mapping(address=>bool)voters;Vote[]votes;addresssubmitter;}Proposal[]publicproposals;uint256proposalCount=0;eventProposalAdded(uint256id,uint8type32g,byteshash,stringdescription,addresssubmitter);eventProposalExecuted(uint256id);eventVoted(addressvoter,boolvote,uint256power,stringjustification);structVote{boolinSupport;地址voter;stringjustification;uint256power;}映射选民以防止人们对提案进行两次投票,以及一些其他应该不言自明的元数据。投票将是赞成票或反对票,并将记住选民及其以某种方式投票的原因,以及投票权——他们希望为该投票投入的代币数量。我们还添加了一系列Proposals,projectdevelopmentI34contractI633deployment53I9以便我们可以将它们存储在某个地方并提供一个计数器来计算有多少proposals。现在构建它们的附属函数,从投票函数开始:modifiertokenHoldersOnly(){require(token.balanceOf(msg.sender)>=10**token.decimals());_;}functionvote(uint256_proposalId,bool_vote,string_description,uint256_votePower)tokenHoldersOnlypublicreturns(int256){require(_votePower>0,"至少必须给投票一些权力。");require(uint256(_votePower)now,"提案不能过期。");require(p.voters[msg.sender]==false,"用户不得已经投票。");uint256voteid=p.votes.length++;投票存储pvote=p.votes[voteid];pvote。inSupport=_vote;pvote.justification=_description;pvote.voter=msg.sender;pvote.power=_votePower;p.voters[msg.sender]=true;p.currentResult=(_vote)?p.currentResult+int256(_votePower):p.currentResult-int256(_votePower);token.increaseLockedAmount(msg.sender,_votePower);emitVoted(msg.sender,_vote,_votePower,_description);返回p.currentResult;字符添加到我们的在合约中,我们可以将其附加到任何未来的功能上,并确保只有代币持有者才能执行该功能项目开发I34合同I633部署53I9这是一个可重复使用的安全检查!投票功能会进行一些健全性检查,例如投票权是否有效,选民有足够的代币实际投票等。然后我们从存储中获取提案并确保它既没有过期也没有执行。对已经完成的提案进行投票是没有意义的。我们还需要确保此人尚未投票。我们可以允许改变投票权,但这会使DAO暴露在一些漏洞中,比如人们在最后一刻撤回投票等。也许是未来版本的候选人?然后我们在提案中注册一个新的投票,更改当前结果以方便查找分数,最后发出Voted事件。但什么是token.increaseLockedAmount?这段逻辑增加了用户的锁定令牌数量。此功能只能由令牌合约的所有者(此时希望是DAO)执行,并且将防止用户发送超过其帐户注册的锁定数量的令牌。当提案最终确定或执行时,此锁将被释放。