LOADING...
LOADING...
LOADING...
当前位置: 玩币族首页 > 行情分析 > 区块链民主——智能合约开发者指南

区块链民主——智能合约开发者指南

2020-05-19 区块链研究员 来源:区块链网络


照片来源: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;
bytes public targetCall; /// @param targetContract_ The address of the target contract for
/// a proposal to be enacted.
/// @param targetCall_ The abi encoding of a function call in the
/// target contract, with arguments
constructor(
address targetContract_,
bytes memory targetCall_,
) public {
targetContract = targetContract_;
proposalData = targetCall_;
} /// @dev Function to enact one proposal of this voting.
function enact() external virtual {
(bool success, ) = targetContract.call(targetCall);
require(success, “Failed to enact proposal.”);
}
}

这个合约做了一些低级的魔术,但并不难解释。在部署时,它获取了另一个合约的地址和一个函数调用。在调用 enact()时,它在目标合约上执行函数调用。

编码提案可以用web3j来完成。在javascript中,下面的例子中,部署了一个Proposal,它将在颁布时铸成一个ERC20通根。

token = await ERC20Mintable.new(‘Token’, ‘TKN’, 18);
proposalData = web3.eth.abi.encodeFunctionCall(
{
type: ‘function’,
name: ‘mint’,
payable: false,
inputs: [
{name: ‘account’, type: ‘address’},
{name: ‘amount’, type: ‘uint256’},
],
},
[owner, ‘1’]
);
proposal = await Proposal.new(token.address, proposalData);

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;公众号:链学园

译文有编辑及删减,如有侵权,请联系译者删除
中文版权所有,转载需完整注明以上内容

—-

编译者/作者:区块链研究员

玩币族申明:玩币族作为开放的资讯翻译/分享平台,所提供的所有资讯仅代表作者个人观点,与玩币族平台立场无关,且不构成任何投资理财建议。文章版权归原作者所有。

LOADING...
LOADING...