照片来源:Pexels公司Markus Spiske 当你投票支持某件事情时,你怎么知道什么事情能真正做到?你怎么知道承诺会得到兑现? 在这篇文章中,我将提供一个关于区块链如何改变民主的一瞥。有了区块链民主进程,承诺就会变成行动。 我并不是说我们可以或应该取消政客,直接通过技术实现民主,但我将展示如何运行一个投票系统,如果投票通过,提案就会自动生效。 你可以把它称为 "不可阻挡的民主"。 概念设计 首先,请允许我利用两个智能合约的特性来设置场景。 l 智能合约是一个不可更改的程序。编码在智能合约中的规则是不能改变的。一旦被部署,就不能停止。 l 智能合约可以触发其他智能合约上的动作。例如,一个智能合约可以触发另一个智能合约向某个账户释放资金,或者给某人执行某些交易的权限。 应用这些概念,我们可以根据每个人都能看到的明确规则,编码一个智能合约,运行一个公平的投票过程。在那个智能合约中,我们可以包含一个提案,也就是对另一个智能合约中的函数的调用。 无论如何,投票都会发生。如果投票通过了,无论如何,这个提案就会被颁布。 以太坊与民主 投票是民主的支柱之一,也是以太坊的核心构建模块之一。 有人认为,Vitalik Buterin从比特币中突破,提出了以太坊,利用我们上面描述的原则,创建了一个可以实现民主组织的平台。 这些基于区块链的民主组织被称为去中心化自治组织,简称DAO。DAO由其利益相关者指挥,规则编码在区块链智能合约中,没有中央控制。 当你对某件事情进行投票时,你怎么知道任何事情都会得到真正的落实?你怎么知道承诺会得到兑现? 阅读维基百科上关于DAO的文章是非常有趣的。它揭示了DAO的想法是多么的早,以及它是多么的强大。Daniel Larimer(BitShares,Steem和EOS.IO)早在2013年就提出了这个概念,并在BitShares中实现了它。然后你还有The DAO(?),在被黑客攻击之前,它成功地吸引了以太坊流通量的14%进入其以投资为主的机构。 然而,"The DAO "的消亡并不意味着 "The DAO "们的消亡。去中心化的自治组织还活着,现在,致死 "The DAO "的漏洞已经众所周知,而且很容易避免。 我和 Vlad Farcas 开始了一个玩具性的 DAO 项目,因为我们想学习如何应用这个模式。通过编码DAO,我了解到了区块链民主进程的可能性,这让我震撼不已。这也是我写这篇文章的原因。 介绍完了,我们来挖掘一下代码。我们如何才能做到这一点呢? 实现智能合约提案 看看下面的智能合约: contract Proposal{ address public targetContract; 这个合约做了一些低级的魔术,但并不难解释。在部署时,它获取了另一个合约的地址和一个函数调用。在调用 enact()时,它在目标合约上执行函数调用。 编码提案可以用web3j来完成。在javascript中,下面的例子中,部署了一个Proposal,它将在颁布时铸成一个ERC20通根。 token = await ERC20Mintable.new(‘Token’, ‘TKN’, 18); web3.eth.abi.encodeFunctionCall看上去有点啰嗦,但实际上它唯一的作用就是把一个函数签名和参数打包成32个字节的数据。 它的第一个参数表示签名为一个函数,名为mint,不可支付,其中一个地址参数名为account,另一个uint256参数名为 amount。第二个参数给参数赋值,作为其他地方定义的所有者账户,mint的通根数量为1。 还有更简单的方法,就是让一个合约调用另一个合约上的函数。到目前为止,我们还不需要用这种过于复杂的方式来做事情。 继续看下去,现在我们要把这个提议民主化了。让我们来看看一个合约颁布提案,但只有在投票成功后才会施行。 一币一票 你可以在HQ20资料库中找到这个合同,你可以随时使用,但不要将其用于实际应用。为了便于理解,我们没有关闭一些漏洞,比如说针对闪贷攻击的漏洞。 在这个OneTokenOneVote.sol中。 - 投票是来自ERC20合约的通根,在部署时选择的通根。 - 投票是指使用投票()将通根转移到OneTokenOneVote中,使用投票() - 如果在任何时候OneTokenOneVote所持有的比例高于所有流通中的通根的阈值,则提案通过。 - 一旦提案通过,它将永远保持在通过状态。 - 投票者可以随时取消投票并找回他们的通根,但如果他们希望提案通过,应该在提案通过后再进行。 - 任何人都可以通过调用validate()触发计票。如果满足阈值,这将使投票通过。 有几种实现投票的方式。有一些比较安全的投票方式,包括要求法定人数。OneTokenOneVote.sol是我们能想到的最简单的例子,但它足以说明区块链民主的原则。 在部署投票时,它接受一个targetContract和targetFunction作为提案,并对其参数进行编码。如果投票通过了,任何人都可以调用 enact()函数来执行该提案。 这意味着,投票合约中包含了投票通过后要采取的行动。投票结果不可能不被遵守,这就是区块链之前不可能实现的一点,想想吧。 智能合约民主 我们可以给这个区块链民主的概念多了一个转折。到目前为止,我们知道如何部署一个合约,执行一个投票过程,然后颁布结果。 我们可以编码一个合约,所有的功能只有在投票通过后才能执行。这就是DAO的精神,而且比听起来更容易。 在代码库中,我们包含了第三个合约,Democratic.sol,我觉得用起来真的很刺激。它可以让任何合约都可以对是否执行其任何功能举行投票。 - Democratic.sol被设计成可以被其他合约继承,只有在通过投票的情况下,才能将其中的任何函数标记为可执行。你可以通过使用 onlyProposal 修改器来实现。 - Democratic.sol允许任何人提出一个提案进行投票。任何人都可以使用 propose() 函数,目标函数用 web3.eth.abi.encodeFunctionCall 编码。 - 所有提案的投票通根都是一样的,这就像MakerDAO中的MKR创建了一个社区一样。Democratic.sol实现了所有的投票都是基于通根,但也可以很容易地改为基于账户。 - 所有的提案都存储在提案寄存器中,只有由同一合约创建的提案才能执行标记为OnlyProposal的功能。 想想吧,你可以用Democratic.sol和OneTokenOneVote.sol作为一个完整的民主系统的基础。如果你不觉得这很刺激,我不知道还能告诉你什么。 结论 区块链有可能以我们有生以来从未见过的程度改变民主进程。 利用区块链可以实现不可阻挡的投票,只要通过,没有人可以阻挡其被颁布。随着我们的世界越来越多的东西可以从区块链上获得,民主的力量会越来越大。 在这篇文章中,我们展示了如何实现可以触发智能合约执行的投票程序,并对其进行了提炼,以产生只有通过民主程序才能执行功能的智能合约。 这些都不是区块链生态系统中的新事物,这些概念自以太坊的构想以来就已经被研究和实现了。然而,在这些合约中,我们认为我们提供了易于使用的模块,让民主更进一步。 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 作者:Alberto CuestaCa?ada 翻译:区块链Robin BTC:1Robin84SWtzSxnU1v8CE9rzQtcfUsGeN 微信:chanhai13;公众号:链学园 译文有编辑及删减,如有侵权,请联系译者删除 —- 编译者/作者:区块链研究员 玩币族申明:玩币族作为开放的资讯翻译/分享平台,所提供的所有资讯仅代表作者个人观点,与玩币族平台立场无关,且不构成任何投资理财建议。文章版权归原作者所有。 |
区块链民主——智能合约开发者指南
2020-05-19 区块链研究员 来源:区块链网络
LOADING...
相关阅读:
- 读币圈头条拿3000key红包||5张图来看以太坊的发展史。2020-08-01
- 以太坊的五年:从少年梦到市值380亿美元区块链2020-08-01
- 区块链板块大热2020-08-01
- YAS为何涨涨跌跌不休2020-08-01
- 赛车计划群-感激中国2020-08-01