http://www.7klian.com

区块链民主 如何开拓通过投票运行的合约

        address _targetContract,
  constructor(
它的第一个参数暗示函数签名,称为mint(铸币函数),长短付费的函数,其address参数称为account,另一个uint256参数称为amount。第二个参数则是为参数赋值,利用在其他处所界说的owner帐户,而铸币的数量为1。
}
利用区块链可以实现不行否决的投票,一旦投票通过,任何人都无法制止被执行。跟着越来越多的世界可以从区块链会见,民主的气力将会增长。
    constructor(
  /// @dev 执行投票的提案
· 投票的代币,是来自陈设时选择的ERC20
合约。
在陈设投票
合约时,它接管带有参数编码的 targetContract 和targetFunction作为提案。假如投票通过,任何人都可以挪用 enact() 函数来执行提案。
[18]Cell Network: https://www.cellnetwork.io/?utm_souce=learnblockchain
    }
    }
        threshold = _threshold;
        uint256 count = votes[msg.sender];
  bytes public targetCall;
    modifier proposalPassed() {
你可以称之为不行否决的
民主。
    }
        require(success, “Failed to enact proposal.”);
这意味着投票合约包罗假如表决通过将要采纳的动作。不行能忽略投票功效。在区块链之前这是不行能的,请思考一下。
首先,请让我以两种智能合约来配置场景:
    address targetContract_,
可以利用web3.js[12]对提案举办编码。在javascript中,下面的示例中陈设了一个提案,该提案在执行时将锻造一个ERC20代币。
区块链有大概以我们一生中从未有过的水平改变民主历程。
凡是认为Vitalik Buterin[3]打破了,提议以太坊上建设一个平台,答允在该平台上利用我们上面描写的原则来实施民主组织。
· 提案通事后,它将永远保持在 passed 状态。
自从以太坊降生以来,这些观念在区块链生态系统中都不是新事物。可是,在这些合约中,我们提供的基本模块往前民主又迈出了一步。
    bytes public proposalData;
该合约具有一些底层的邪术,但表明起来并不难。在陈设时,它需要另一个合约的地点和一个函数挪用。挪用enact()时,它将在方针合约上执行函数挪用。
    event VoteCasted(address voter, uint256 votes);
    inputs: [
    name: ‘mint’,
import “../math/DecimalMath.sol”;
        votes[msg.sender] = votes[msg.sender].addd(_votes);
Vlad Farcas[10]和我开始了一个玩具DAO项目[11],因为我们想进修
如何应用民主模式。通过编写DAO,我相识了区块链中民主流程的大概性,这让我大吃一惊。这就是为什么我要写这个。
我并不是要说我们可以或应该破除政治并成立技能专家制,可是我将展示
如何运行一个投票系统,假如投票通过,该系统将自动拟定执行。
[5]DAO的维基百科文章: https://en.wikipedia.org/wiki/Decentralized_autonomous_organization
    event ProposalEnacted();
[2]Tiny熊: https://learnblockchain.cn/people/15
        emit ProposalEnacted();
  
    event VotingCreated();
    (bool success, ) = targetContract.call(targetCall);
    address public targetContract;
当你对某事投票时,你如何知道实际上会完成什么工作?你怎么知道理睬会兑现?
    }
    /// @dev Number of votes casted in favour of the proposal.
        // solium-disable-next-line security/no-low-level-calls
        emit VoteCanceled(msg.sender, count);
        require(passed == true, “Cannot execute until vote passes.”);
  [owner, ‘1’]
[16]Democratic.sol: https://github.com/HQ20/contracts/blob/master/contracts/voting/Democratic.sol
  },
    }
    /// @dev Function to enact one proposal of this voting.
proposal = await Proposal.new(token.address, proposalData);
继承阅读,此刻我们将使该提案民主化。让我们看看拟定提案的合约,它需要颠末乐成的投票之后执行。
import “@openzeppelin/contracts/access/Ownable.sol”;
  {
      {name: ‘account’, type: ‘address’},
        bytes memory _proposalData,
        votingToken.transferFrom(msg.sender, address(this), _votes);

当你为某事投赞成票时,你如何知道实际上会完成什么工作?你怎么知道理睬会兑现?
你可以在HQ20代码库中找到此合约[14]代码,请随意利用它,但不要不加修改的用于现实产物中。为了易于领略,我们忽略了很多对裂痕的处理惩罚,譬喻针对闪贷进攻的裂痕。
    /// (from the frontend) to spend _votes of votingToken tokens.
[3]Vitalik Buterin: https://about.me/vitalik_buterin
[8]遭到黑客入侵: https://medium.com/swlh/the-story-of-the-dao-its-history-and-consequences-71e6a8a551ee
[15]几种要领: https://github.com/HQ20/contracts/blob/master/contracts/voting/OneManOneVote.sol
    function enact() external virtual proposalPassed {
    }
[17]MakerDAO: http://makerdao.com/
web3.eth.abi.encodeFunctionCall有点冗长,但实际上独一做的就是将函数签名和参数包装在32个字节的数据中(参考文档[13])。
    using DecimalMath for uint256;
    function cancel() external virtual {
    type: ‘function’,
    require(success, “Failed to enact proposal.”);
[9]还在世而且很好: https://defirate.com/daos/
    uint256 public threshold;
  /// @param targetContract_ 执行提案的方针合约
我们可以编写一份合约,个中所有的成果假如颠末表决就才气被执行。这就是DAO的精力,它比听起来容易。
无论如何,投票城市举办。假如投票通过,无论如何都将执行该提案。
token = await ERC20Mintable.new(‘Token’, ‘TKN’, 18);
        require(
        uint256 _threshold
    function inFavour() public virtual view returns (uint256) {
按照这些观念,我们可以编写运行公正投票措施的智能合约。每小我私家都能看到的明晰法则, 在该智能合约中,我们可以包括一个提案,该提案是对另一个智能合约中的成果的挪用。
结论
        passed = true;
实现投票有几种要领[15]。有更安详的投票方法,包罗要求到达法定人数。OneTokenOneVote.sol 是我们能想到的最简朴的示例,但这足以显示区块链民主的道理。
  /// @param targetCall_ 执行提案的方针函数(abi 编码及参数)
    mapping(address => uint256) public votes;
      {name: ‘amount’, type: ‘uint256’},
假如思量到这一点,则可以利用Democratic.sol和OneTokenOneVote.sol作为[完整民主系统的基本](https://github.com/HQ20/contracts/blob/master/contracts/access /Democracy.sol “完整民主系统的基本”)。假如你没有发明这是何等的令人欢快,我不知道还能汇报你什么。
· Democratic.sol被设计为可被其他合约担任,仅当它们颠末投票后才答允将个中函数可执行。你可以通过利用 onlyProposal 来修饰要执
行的函数来做到这一点。
合约民主
· 选民可以随时打消投票(挪用 cancel)并取回其代币,但假如他们但愿提案通过,则应在提案通事后再举办取回。
}
    payable: false,
        return votingToken.totalSupply().muld(threshold, 4);
        emit VotingCreated();
[12]web3.js: https://learnblockchain.cn/docs/web3.js/web3-eth-abi.html#encodefunctioncall
    function thresholdVotes() public virtual view returns (uint256) {
拟定智能合约提案
    function validate() public virtual {
    function vote(uint256 _votes) external virtual {
  ) public {
思量以下合约:
    /// @dev Number of votes needed to pass the proposal.
· 任何人都可以通过挪用validate()来触发计票。假如到达threshold,这将使投票通过。
        votingToken = IERC20(_votingToken);
  }
        address _votingToken,
可是, “The DAO” 的消亡并不料味着“ DAO组织”的消亡。去中心化自治组织还在世而且很好[9],因为灭亡的 The DAO的裂痕已广为人知,并且很容易制止。
  }
import “@openzeppelin/contracts/token/ERC20/IERC20.sol”;
    IERC20 public votingToken;
    targetContract = targetContract_;
一币一票
        emit VoteCasted(msg.sender, _votes);
[14]HQ20代码库中找到此合约: https://github.com/HQ20/contracts/blob/master/contracts/voting/OneTokenOneVote.sol
阅读DAO的维基百科文章[5]很是有趣。它展现了早期DAO的观念是如何构想的,以及它是何等的强大。Daniel Larimer[6](他由BitShares,,Steem和EOS.IO项目成名)提出并 最早于2013年在BitShares 实现了该观念。然后你也知道The DAO(Đ)[7],该组织在遭到黑客入侵[8]前吸引到了所有畅通中的14%的以太币投资到该组织中。
            “Not enough votes to pass.”
· 智能合约是一个不行变的措施。智能合约中编码好的法则无法变动。陈设后,也无法遏制。
在本文中,我们展示了如何实现智能合约执
行的投票措施,并对其举办了改造,以生成只能由民主历程执行的智能合约函数。
        );
  
proposalData = web3.eth.abi.encodeFunctionCall(
  function enact() external virtual {
    /// @dev Use this function to retrieve your votingToken votes in case you changed your mind or the voting has passed
        _;
    /// @dev 用这个函数投票,需要先授权
        delete votes[msg.sender];
        return votingToken.balanceOf(address(this));
    proposalData = targetCall_;
    /// @dev Function to validate the threshold
· Democratic.sol答允任何人提出提案举办投票。propose() 函数可以被任何人利用,方针函数利用 web3.eth.abi.encodeFunctionCall 编码。
[10]Vlad Farcas: https://twitter.com/uivlis
    }
contract OneTokenOneVote is Ownable {
        proposalData = _proposalData;
[4]去中心化自治组织: https://en.wikipedia.org/wiki/Decentralized_autonomous_organization
  address public targetContract;
    event VoteCanceled(address voter, uint256 votes);
投票是民主的支柱之一,也是以太坊的焦点构成部门之一。
· 智能合约还可以触发其他智能合约的操纵。譬喻,智能合约可以触发另一个合约以将资金释放到某个帐户,或授予或人执行某些生意业务的权限。
    /// @param _votes The amount of votingToken tokens that will be casted.
我们可觉得这种区块链民主观念提供另一种转折。到今朝为止,我们知道如何陈设需要执行表决进程然后在执行投票功效功效的合约。
[19]Alberto Cuesta Cañada: https://medium.com/@albertocuestacanada?source=post_page—–932b969d1cc5

[11]玩具DAO项目: https://github.com/HQ20/contracts/tree/master/contracts/examples/dao
观念设计
和民主
在代码库中,我们包括了第三份合约Democratic.sol[16],我发明利用起来真的很令人欢快。它答允任何合约对是否执行其任何成果举办表决。
pragma solidity ^0.6.0;
[1]登链翻译打算: https://github.com/lbc-team/Pioneer
    event VotingValidated();
    ) public Ownable() {
    ],
[7]The DAO(Đ): https://en.wikipedia.org/wiki/The_DAO_%28organization%29
    bool public passed;
[6]Daniel Larimer: https://twitter.com/bytemaster7
        emit VotingValidated();
        targetContract = _targetContract;
· 全部提案存储在 proposals 变量中,而且只有由同一合约建设的提案才气执行标志为onlyProposal的函数。
在 OneTokenOneVote.sol 文件里:
· 假如在任何时候OneTokenOneVote持有的比例高于threshold (对比于畅通量),则通过提案。
参考资料
        (bool success, ) = targetContract.call(proposalData);
            inFavour() >= thresholdVotes(),
在本文中,我将扼要先容如何改变民主。如何通过区块链民主措施,把理睬酿成了动作。
);
contract Proposal {
· 所有提案的投票代币都将沟通,从而在MakerDAO[17]中建设一个带有MKR代币的社区。Democratic.sol 的实现是基于代币的投票,但可以轻松变动为基于帐户的投票。
先容竣事,让我们深入研究代码。我们应该怎么做?
· 投票意味着利用vote()将代币转移到OneTokenOneVote合约中。
这些基于区块链的民主组织被称为去中心化自治组织[4],简称DAO(Decentralized Autonomous Organizations)。DAO由其好处相关者指导,法则编码在区块链智能合约中,没有中心节制。
        votingToken.transfer(msg.sender, count);
    }
[13]参考文档: https://learnblockchain.cn/docs/web3.js/web3-eth-abi.html#encodefunctioncall
有更简朴的要领可以让一个合约挪用在另一个合约上的函数。此刻也许很难领略为什么我们会以这种巨大的方法来做这件工作。
    bytes memory targetCall_,

郑重声明:本文版权归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时间联系我们修改或删除,多谢。

相关文章阅读