3步! 老司机教你如何在以太坊上构建基于Token去中心化投票系统!

  • 时间:
  • 浏览:1
  • 来源:三分时时彩_三分时时彩平台网址_三分时时彩网投平台

本文来自于微信公众号区块链大本营(ID:blockchain_camp ),站长之家经授权转载。

作者 | Doug Crescenzi

译者 | 王柯凝

出品 | CSDN、区块链大本营

由于想在以太坊平台上构建二个去中心化的自治系统,人太好有本来种不同的法律法律依据可供你选者 。其中,最常用的法律法律依据之一本来,选民使用代币(Token)代表投票。你拥有的代币过多,就由于以后 投的票数就过多。

事实上,基于代币的去中心化投票系统有本来种类型,但基本上都是遵循一点固有的约定。通常来说,工作流程如下:

  • 某一选民提交一份提案 

  • 一点选民对该提案投赞成或反对票

  • 一旦议案的票数达到预定阈值,则会触发投票成功或失败动作

是都是超级简单?

然而,在构建二个基于代币的去中心化程序池池的实际操作中,让让.我 还是会遇到本来困难与挑战。其中,最大的挑战之一本来选民欺诈行为。除此之外,投票的情況怎样才能管理?一点代币独有的形状怎样才能与相应的自治机制相结合?同样也是让让.我 所要面临的挑战。

没办法 ,下面让让.我 就来实操一下吧!

现在,假设让让.我 以后 创建二个交互的智能合约:

  • Token智能合约:所含二个钱包地址和余额的映射。

  • 自治合约:管理投票系统。

在这里,选民使用代币余额对提案进行投票,而代币余额则表示选民可不时要对某一特定提案投票的票数。

首先,让让.我 先假设某一选民提交提案

让让.我 时要创建二个函数,允许选民向自治智能合约提交提案。

代码如下:

在允许选民提交提案以前,首先时要验证那先 选民是是是不是拥有投票资格。在让让.我 四种 案例中,选民的代币余额时要大于0。另外,让让.我 使用onlyEligibleVoter修改器来检查选民是是是不是拥有投票资格:

一旦选者 该选民拥有投票资格,submitProposal函数就会将该选民的代币余额传递给votesReceived变量,有以后再将四种 值作为参数传递给addProposal函数:

如上所示,addProposal函数将为该提案生成二个唯一ID,并创建二个提案对象,用来监控提案收到的票数、提案是是是不是已通过以及提案的投票截止日期。

再加提案后,submitProposal函数将返回提案的唯一ID值,并触发ProposalSubmitted事件,供前端使用。

第二种情況是,一点选民可不时要投赞成或反对票。

现在,让让.我 时要创建二个函数,来补救选民对该特定提案的投票。

在四种 函数里,首先使用二个if一段话,判断选民是是是不是被阻止投票:由于选民未被阻止投票,就时要选者 选民的代币余额是十几个 ,有以后再将该余额值再加到该提案的votesReceived变量中。

有以后,让让.我 就可不时要查看,经过投票,该提案是是是不是由于通过了

  • 由于提案通过,由于触发VotesSubmitted事件,并调用endVote函数;

  • 由于没通过,由于触发VotesSubmitted事件,并返回True,表示系统由于收到并成功补救了选民的投票。

第四种 情況是,投票通过并触发相应的动作

这并都是说让让.我 由于成功创建了二个允许选民创建提案和提交选票的函数。下面,让让.我 来看看,由于提案获得了足够多的票数后,会所处那先 。

submitVote函数由于调用if一段话,检查是是是不是由于收到足够的票数使提案通过:

由于投票系统由于接收到足够多的票数,则会调用endVote函数:

在这里,让让.我 使用require一段话和voteSuccessOrFail函数,确保该提案由于获得足够多的票数:

由于投票通过,由于调用二个将Proposal的passed变量更新为True的函数。

怎样才能补救选民欺诈行为?

在创建二个基于代币的去中心化投票程序池池的过程中,让让.我 面临的最大挑战本来——选民的欺诈行为。比如,那先 因素会影响选民对提案进行投票?有以后将代币发送给另外二个钱包地址进行重复投票?

你还记不记得有二个名为blocked的映射?

让让.我 用该映射来检查选民是是是不是被阻止投票:

  • 由于选民由于投票或提交了提案,有以后还所处投票期间,让让.我 就会阻止该选民进行投票。

  • 由于选民被阻止投票,没办法 等到投票期开使了,让让.我 不需要 转移自己的代币。

为了在让让.我 的Token智能合约中实现四种 点,让让.我 将使用whenNotBlocked修改器:

有以后,让让.我 就可不时要在智能合约中的transfer和transferFrom 函数中使用修改器,這個个函数继承于OpenZeppelin的ERC-20Token智能合约。

当然,四种 算法都是自身的缺点,即会抑制选民投票,由于由于选民所处blocked锁定情況,让让.我 就无法转移代币。这篇文章也介绍了一点几种使用ERC-20 Token进行安全投票的法律法律依据。

精华总结

  • 构建基于代币的去中心化投票程序池池并没办法 绝对“正确”的法律法律依据,这由具体用例决定。

  • 大多数基于代币的去中心化投票程序池池会遵循以下流程:选民提交提案→一点选民投支持或反对票→一旦提案的投票达到预定阈值,投票就会显示通过或失败,并触发相应的行动。

  • 在创建基于代币的去中心化投票程序池池时,选民欺诈是最大的挑战之一,当然,也可不时要使用ERC-20 Token来补救四种 问题图片图片。

  • 另外二个挑战本来,选民的投票情況怎样才能管理?一点代币独有的形状怎样才能与相应的自治机制相结合?

  • 最后,对于受干扰程序池池来说,基于代币的投票系统是的二个强大的自治机制,但一并,也引入了一定的风险。

声明:本文转载自第三方媒体,如需转载,请联系版权方授权转载。协助申请