作者:Polkadot
翻译:PolkaWorld
我们常说「波卡网络的发展由 DOT 持有人决定」,怎么决定?就是通过波卡精妙的治理机制。
虽然 「精妙」 在某种程度上意味着 「复杂」,但如果你是 DOT 持有人,并且想通过你的投票,对波卡网络的进程产生影响的话,那么你绝对应该花时间认真了解一下波卡的治理机制。而这篇文章就是很好的资料。
这篇文章属于 Polkadot Wiki (波卡百科)的 「治理」 部分,详细地介绍了波卡的治理机制、治理机构和投票计数方式。Polkadot Wiki 是由波卡官方撰写的波卡介绍文档,PolkaWorld 正在逐步翻译和连载该文档。
Polkadot 使用了一种复杂的治理机制,可以在所有利益相关者的最终要求下随时间优雅地进化。最终目标是确保大多数利益相关者始终能够控制网络。
为此,我们将各种新颖的机制结合在一起,包括存储在链上,并用平台中立的媒介语言(即 WebAssembly)定义的无定形状态转移函数,以及一些链上投票机制,如自适应绝对多数阈值的公投和 batchapproval 投票。对协议的所有变更必须经过利益相关者的公投表决。
机制
为了对网络进行更改,方法是将活跃的代币持有者和理事会组成一个管理组,对网络升级进行决策。不管提案是由公众( DOT 持有人)还是理事会提出的,最终都要经过全民公投,让所有 DOT 持有者(按 stake 比例决定权重)做出决定。
以下步骤是 Polkadot 网络中的治理过程:
- 发起公投
- 对提案进行投票
- 统计 [1]
为了更好地了解理事会是如何组成的,可以继续阅读下文 「理事会「 部分的内容。
公投
公投是简单的、包容的、基于 stake 的投票方案。每一次公投都有一个与之相关的具体的提议,它在 runtime 中以特权函数调用的形式出现(这包括最强大的调用:set_code,它能够切换出 runtime 的整个代码,实现一般需要「硬分叉」才能做到的功能)。它们是离散事件,有一个固定的时间段来进行投票,然后进行计数,如果投票被批准,则进行函数调用。公投总是二元的,你投票时唯一的选择是「同意」、「反对」或完全弃权。
可以通过以下几种方式来启动公投:
- 公开提交的提案;
- 理事会以多数票或一致通过的方式提出的提案;
- 作为前序公投执行的一部分而提交的提案;
- 技术委员会提交并经理事会核准的紧急提案。
所有的公投都有一个与之相关的执行延迟期。这是从公投结束到(假定提案获得批准)实施更改之间的一段时间。对于启动公投的前两种方式,这是一个固定的时间。对于 Kusama 来说,这是 8 天的时间,在波卡中,计划是 28 天。对于第三种类型,可以根据需要进行设置。
紧急提案涉及需要「快速跟进」的网络重大问题。这类提案会有一个较短的执行时间。
提出公投
公众公投
任何人都可以通过在一定时期内(区块数量)存入最低金额的 DOT 来发起一项公投。如果有人同意这个提议,他们可以存入相同数量的代币来支持它。获得最高绑定支持的提案将被选为公投议案。请注意,这可能与附议的绝对数不同,例如,三个帐户每个账户绑定 20 个 DOT 将超过 10 个帐户每个账户绑定一个 DOT。绑定的代币将在提案提交(即,提交表决)后释放。
理事会公投
理事会全员同意——当所有的成员都同意一个提议,它就可以转移到公投。这个公投将有一个负的投票率偏差。也就是说,stake 投票的数量越小,通过该提案所需的数量就越小。(见下文的」自适应投票人数偏见」)。
多数理事会成员同意 ——当只有简单多数的理事会成员同意时,公投也可以投票,但此时要多数同意才能通过。
任何时候都只能进行一个公投,除非有紧急公投。
投票时间线
每隔 28 天,将对一个新的公投进行投票(假设其中一个队列中至少有一个提案的话)。有一个议会批准的提案列队,和一个公众提交的提案队列。将要投票表决的公投在两个队列中的最高票投票的提案之间交替进行。
「最高票」提案是由其背后所绑定的 stake 数额决定的。如果轮到创建公投的给定队列中没有提案(为空),而另一个队列中有等待的提案,则另一个队列中最高票的提案将成为公投议案。
同一时间段内不能进行多个公投,紧急公投除外。紧急公投与定期公投(无论是公开的还是理事会提议的)同时举行,是唯一一次可以同时进行多次公投的时候。
对公投议案进行投票
为了投票,投票者通常必须把他们的代币锁起来,至少要在公投结束后的执行延迟期内锁定。这是为了确保投票结果需要一些最低限度的经济投入,并避免卖票行为。你可以完全不加锁定地投票,但你的投票价值只是普通投票的一小部分。同时,由于可以投入时间来锁定,持有少量 DOT 代币并不意味着持有人不能影响公投结果。你可以在自愿锁定(Voluntary Locking[2])中了解更多。
示例:Peter:用10个DOT投票`No`,锁定了128周,那他的实际投票权重是10*6=60VotesLogan:用20DOT投票`Yes`,锁定了4周,他的实际投票权重是20*1=20VotesKevin:用15DOT投票`Yes`,锁定了8周,他的实际投票权重是15*2=30Votes尽管 Logan 和 Kevin 的选票都比 Peter 多,但两人的锁定期都比 Peter 少,导致他们的投票权重也少。
统计 Tallying
根据不同的实体提出的议案,以及是否所有理事会成员都投票赞成,有三种不同的方案。我们可以参考下表。
实体计数机制公开提案正投票率偏差(绝对多数赞成)理事会(全票赞成)负投票率偏差(绝对多数反对)理事会(多数赞成)简单多数制
另外,我们需要以下信息,并使用下面列出的公式之一来计算投票结果。例如,让我们以公共提案为例,应用 绝对多数赞成 公式。没有严格的法定投票人数,但随着投票率的降低,所需的绝对多数席位会增加。
approve (赞成) - 赞成票数 against (反对) - 反对票数 turnout (投票率) - 投票的代币总数 (不包含 conviction) electorate (总选票) - 网络中 DOT 发行的总量
绝对多数赞成制
正投票率偏差,要求在投票率低的情况下获得大量绝对多数赞成票,但当投票率增加至 100%时 , 它其实就变成了最后一种简单多数的情况。
绝对多数反对制
负投票率偏差,即需要在投票率低的情况下获得大量绝对多数反对投票,但是当投票率增加到 100%时,它就变成了最后一种简单多数的情况。
简单多数制
多数票通过,票数的简单比较;如果赞成票多于反对票,那么该提案将获得通过,无论提案中有多少票。
要详细了解上述公式的来源,请阅读民主板块 [3]。
例:假设:-总量仅1,500DOT-公开提案John-500DOTPeter-100DOTLilly-150DOTJJ-150DOTKen-600DOTJohn:投`赞成`且锁定DOT4周=>500*1=500票Peter:投`赞成`且锁定DOT4周=>100*1=100票JJ:投`反对`且锁定DOT16周=>150*3=450票赞成=600反对=450投票率=750总选票=1500
由于上述示例是公众公投,因此将使用绝对多数赞成制来计算结果。在投票率低的情况下,绝对多数赞成需要更多赞成票才能通过此公投,因此,根据上述结果,公投将被拒绝。此外,只有获胜选民的代币会被锁定。如果公投失败的选民认为投票结果将产生负面影响,则他们的代币可以转让,因此他们持有的投票代币不会进入锁定期。而且,优胜提案会在一定的执行期之后才自主执行。
自愿锁定 Voluntary Locking
波卡设计了一种称为自愿锁定的方式,允许代币持有者声明愿意锁定自己的 DOT 多长时间来增加其投票权,因此,每个代币持有者的最大投票数将通过以下公式计算:
最大投票数 = 代币总量 * 投票乘数
锁定期每翻倍一次,信念值乘数(conviction multiplier )会将投票乘数增加 1。
锁定期(天)投票乘数(倍)00.111224384165326
根据创世 runtime,由锁定期带来的最大乘数设置为 6,并且在 Polkadot 上锁定期为 30 天,在 Kusama 上锁定期为 8 天。
自适应投票偏见
Polkadot 引入了「自适应投票偏见(Adaptive Quorum Biasing)」 概念,它作为一种调节的杠杆,在一项议案的投票率没有达到明显的支持或反对时,理事会可以使用它来改变有效的绝对多数,来让一项提案更容易或更难通过。
让我们以上面的图片为例。
如果一项公开提交的公投只有 25%的投票率,那么我们采用「正投票率偏差」来统计,「赞成」票总数必须达到 66%才能通过。
相反,当投票率达到 75%时,「赞成」票总数必须达到 54%,这意味着所需的绝对多数人数会随着投票率的增加而减少。
当理事会通过一致同意提出一项新议案时,将使用「负投票率偏差」对公投进行表决。在这种情况下,会比较容易以较低的投票率通过此议案,并且需要绝对多数投票才能拒绝该议案。随着越来越多的代币持有人参与投票,这种偏见就会接近普通的简单多数制。
参考上图,当全民投票的投票率只有 25%时,「赞成」票的票数必须达到 34%才能通过。
简而言之,当投票率低时,需要绝对多数才能拒绝该提案,这意味着必须达到较低的「赞成」票数阈值,但是当投票率增加到 100%时,它就变成了简单多数制。
这三种计数机制——多数通过,绝对多数通过和绝对多数反对——只要投票率是 100%那么就等同于简单多数计数机制。
理事会
为了代表被动的利益相关者,Polkadot 引入了 「理事会(Council)」 的概念。理事会是一个由多个参与者组成的链上实体,每个参与者代表一个链上账户。目前在 Polkadot 上,理事会由 13 名成员组成。预计在接下来的几个月中,将增加到 24 个席位。通常,理事会最终将拥有固定数量的席位。在 Polkadot 中是 24 个席位,而在 Kusama 中是 17 个席位。
理事会主要被要求执行三项治理任务:提出明智的公投、取消毫无争议的危险或恶意的公投以及选举技术委员会。
如果要由理事会提议举行公投,必须有绝大多数成员赞成,并且没有成员行使否决权。成员对任何单个提案只能行使一次否决权;如果在冷静期之后重新提交了提案,则他们可能不会第二次否决该提案。对于理事会以绝对多数票通过,但未获得一致支持的动议(Motion),将以中立、多数票通过的投票方案进行公众公投。如果理事会的所有成员都投票赞成某项动议,则该投票被认为是一致通过的,并成为具有负自适应群体偏见(negative adaptive quorum biasing)的公投。
经理事会三分之二多数同意,可以取消公投。如果在全民投票的提议中发现一个问题,例如议案将执行的 runtime 代码中有 bug,则这可能是最后手段。
如果取消公投的争议很大,使得理事会无法获得三分之二多数同意,那么将由全体利益相关者来决定提案的命运。
如何成为理事会成员?
目前,理事会有 13 个席位。所有利益相关者可以自由表示对任何注册候选人的认可。
理事会的选举由同一 Phragmén 选举流程处理,该流程根据提名从可用池中选择验证人。但是,代币持有人对议员的投票,与他们对验证人的任何提名是分开的。理事会任期为一日。每一期的末尾,将运行 Phragmen 选举算法,结果将根据所有选民的投票配置选择新的议员。选举还选择了一定数量的备选议员(runners up),目前在 Kusama 上为 7 名,在 Polkadot 上为 15 名,这些候选人将在投票中保持原样。
与「先行任职」(选民必须从名单中选出仅一名候选人)相反,Phragmén 选举是表达选民观点的一种更具表达力的方式。代币持有者可以将其视为 「是或否」 投票,可以支持你想支持的尽可能多的候选人。选举算法将找出一个与选民整体表达的指示紧密匹配的候选人的子集。
让我们看下面的例子。
上面的例子显示了候选人 C 在第一轮选举中获胜,而候选人 A、B、D 和 E 仍保留在下一轮候选人名单上。
对于前 N 名(例如上面例子中为 4 名)的备选议员,他们可以保留并继续投票直到下一次选举。在第 2 轮之后,即使候选人 A 和 B 在本轮中获得相同的票数,候选人 A 也会被选上,因为在加上之前的未使用赞成票后,它的得票比 B 高。
这是 Polkadot 初始阶段的临时治理配置。如果在第三方审核之后发现任何安全漏洞,它将被更改。进一步的更改可以通过链上治理进行。
主要成员
理事会作为 Substrate Collective pallet 的一个实例,实现了所谓的主要成员,该成员的投票将作为其他在超时之前未投票的成员的默认投票。
主要成员根据 Borda count[4] 选出。
拥有理事会主要成员的目的,是即使在数名成员弃票时,也能确保投票人数。理事会成员可能会通过不投票而让其他成员投票,来表决 「软拒绝」 或 「软赞成」。有了主要成员,它迫使理事会成员要么在投票中表现得很明确,要么让自己的选票计入主要成员所投的选项。
技术委员会
《Kusama 的推出和治理》这篇文章中引入了技术委员会,作为 Kusama 治理的三个部门之一(另外两个是理事会和公投议院)。技术委员会由成功实现或指定了 Polkadot / Kusama runtime 或 Polkadot 主机的团队组成。通过理事会的简单多数表决,可以从技术委员会中添加或删除团队。
技术委员会可以和波卡理事会一起提出 「紧急公投(emergency referenda)」,可以快速进行投票和实施。这些紧急公投仅在紧急情况下使用。
快速公投(fast-tracked referenda)是唯一可以与其他有效公投同时进行的公投类型。因此,通过快速公投,可以同时进行两个有效的公投。对一个进行投票不会阻止用户对另一个进行投票。
DOT 的用途
请参考此处。
常见问题
我如何可以要求理事会代表我进行更改?
在某些情况下,你可能希望向链上理事会提出要求,以代表您进行更改。这种情况的一个例子是由于人为接口错误资金丢失或锁定,例如输入另一个网络的地址而导致资金丢失时。另一个示例是,如果你使用多签名地址参加了 2017 年的 Polkadot ICO,导致现在你不能轻松地签名消息了。如果能够以一定的可信度证明这个错误确实发生了,则理事会可以考虑通过一项治理动议来纠正该错误。
向理事会提出申诉的第一步是与议员保持联系。没有一个地方可以保证每个议员都能注意到你的声音。但是,这里有一些不错的起点,你可以在其中吸引一些议员的注意力。Polkadot Direction[5]Matrix 聊天室就是这样的一个地方。创建帐户并加入此聊天室后,你可以在此处发布一个经过深思熟虑的消息,以阐明你的情况,并提供理由,说明你认为理事会应该考虑代表你对协议进行更改的原因。
在某些情况下,你可能需要一个地方进行较长时间的讨论。为此,建议在 Polkassembly[6] 上发布帖子。当你在 Polkassembly 上发表文章时,请确保提供你所处情况的所有证据,并清楚说明你将建议议员采取何种改变。请记住:需要进行更改的人不是议员,你有责任对为什么要进行更改持有充分的理由。
参考资料
[1] 统计 :
https://wiki.polkadot.network/docs/en/learn-governance#tallying
[2]Voluntary Locking:
https://wiki.polkadot.network/docs/en/learn-governance#voluntary-locking
[3] 民主板块
https://github.com/paritytech/substrate/blob/master/frame/democracy/hide/vote_threshold.rs
[4]Borda count:
https://en.wikipedia.org/wiki/Borda_count
[5]Polkadot Direction:
https://matrix.to/#/!OwgojQyBzTlUQGGLhq:matrix.parity.io
[6]Polkassembly:
https://polkadot.polkassembly.io/
[7] 初始治理描述 :
https://github.com/paritytech/polkadot/wiki/Governance
[8]Democracy Pallet:
https://github.com/paritytech/substrate/tree/master/frame/democracy/hide
[9] 治理 Demo:
https://www.youtube.com/watch?v=VsZuDJMmVPY&feature=youtu.be&t=24734
[10] 波卡的治理 :
https://www.crowdcast.io/e/governance-on-polkadot--
[11] 波卡的治理 :
https://www.crowdcast.io/e/governance-on-polkadot--
原文来源:https://wiki.polkadot.network/docs/en/learn-governance