LOADING...
LOADING...
LOADING...
当前位置: 玩币族首页 > 币圈百科 > Kusama 如何进行链上治理

Kusama 如何进行链上治理

2020-04-20 区块律动BlockBeat 来源:区块链网络

原文标题:《Kusama 如何进行链上治理|Kusama 系列》
原文来源:PolkaWorld

本文经作者 Kaichao 授权,转载自「Substrate 区块链开发」知乎专栏,原文:https://zhuanlan.zhihu.com/p/131335636。

通过本文,你会了解到:

典型区块链网络的治理机制有哪些;
什么是链上治理;
Kusama 网络的治理机制。


为什么需要链上治理


人类社会的进步,除了依赖技术的创新,还与社会的治理息息相关。治理体现在社会生活的方方面面,比如:

资源的分配,职责的划分;
奖励和惩罚机制;
未来的治理走向,等等。
治理的表现形式多种多样,有些是明文规定的法律条文,有些是隐性的社会规则。基本上,有人参与的活动就存在治理,小到院子里的小朋友们如何轮流滑滑梯,大到一个企业、国家如果分配输入、划分职责。

合理、透明、高效的治理,能提高社会协作的效率,进而提高生产效率和大众的幸福感;试想一下,如果你生活在一个没有治理或者治理不合理的环境里,那么社会的协作将会混乱不堪,很难出现高效的生产活动,公平和平等也就无从谈起。

去中心应用独特的价值吸引了越来越多的人来使用,区块链作为去中心应用的一种典型的技术实现方式,拥有着众多的利益相关方,如:

区块链应用的终端用户;
区块链核心技术开发人员;
运营节点的服务商,包括 PoW 的矿池(矿工)和矿机,PoS 的验证人节点等。
那么,已有的区块链系统是如何协调这些利益相关方、实现治理的呢?

比特币由中本聪完成最初版本的开发并上线运行,紧接着第二年,中本聪选择淡出人们的视线,将源代码的控制权移交给社区的开发者。比特币协议的修改需要通过 BIP(Bitcoin Improvement Proposals),任何人都可以提交,但是在真正实现某项修改之前,需要充分考虑其安全性和可行性。BIP 的生命周期如下图所示,



BIP 的成功实施,需要经历这样几个阶段,

草案(Draft),提交 BIP 到开发者邮件列表和 Github 仓库,收集社区的反馈,讨论、解决反对意见,如果社区内形成了大致共识(rough consensus),就可以进入下一阶段;
「大致共识是指,对反对的意见进行充分地讨论,直到大多数人认为反对意见是不正确的。
提出(Proposed),在这个阶段,BIP 拥有了可运行的功能代码,并且制定了部署计划;
完成(Final),线上的比特币网络节点部署了这一修改,并且达到了一定的标准,通常需要有全网 95% 以上的算力触发此项修改。
随着比特币网络的发展,大的数字货币交易所、矿池(矿工)、投资机构在网络的运行上拥有越来越高的话语权,下图展示了当前一周内的算力分布。



在 2017 年的隔离见证(SegWit,BIP141 及后续相关的 BIP)升级过程中,各方势力的角逐如同一场没有硝烟的战争,最终分叉成为两个网络。在这一过程中,比特币的治理机制体现地淋漓尽致,既有大的算力集团可以「一手遮天」,也有核心开发者提交多个 BIP 来应对各种变数,还有持中立态度的部分用户和交易所。很显然,这样的治理效率低,不够透明,也谈不上真正地去中心。

另外一个典型的区块链网络是以太坊,它拥有和比特币网络类似的治理机制,通过 EIP(Ethereum Improvement Proposals)来管理新特性的实施和部署,不同的是,以太坊的核心开发者在社区拥有极高的声誉和影响力,以太坊基金会的控制力也更强,EIP 的实施从流程来看更加清晰,如下图所示。



从 2016 年的 The DAO 攻击事件,可以感受到以太坊网络的治理氛围,在各种社交频道都能看到针对这次攻击及其解决方案的激烈讨论,最终以硬分叉的形式将被黑客盗取的 ETH 退还给投资人,以太坊基金会及大部分的核心开发者投入到分叉后新的以太坊链,也有少部分的矿工、开发者选择坚守在原有的那条链上。

通过上面两个例子,我们看到了治理在区块链生态里的重要作用,并且有越来越多的团队发现比特币这一类的链下治理(Off-Chain Governance)的不足,并尝试使用链上治理(On-Chain Governance)的方式,来提高治理的效率、透明度,从而进一步实现去中心的目标。Kusama 就是这样一个采用链上治理的区块链网络。

Kusama 链上治理


治理的核心体现在,当出现意见分歧时,哪一方拥有更高的权力,以及如何做出最终的决定。在 Kusama 网络里,权力属于 KSM token(下面简称为 ksm 或 token)的持有人,最终的决定则由民主投票产生,参与投票的 token 数量越多、锁定时间越长,权力就越大。Kusama 网络的治理概览如下图,



Kusama 网络采用了三院制(Tricameral)的治理结构,

公投议院(Referendum chamber,也称为立法院),拥有最广泛的成员(即所有的 token 持有人)和最高的权利,所有的「立法」(即区块链 runtime 逻辑的修改)必须经过民主公投;
理事会(Council),是 Kusama 网络中一些日常事务的具体执行机构,其成员由 token 持有人投票产生;
技术委员会(Technical Committee),由开发 Polkadot/Kusama 网络协议的技术团队组成,作为理事会的补充和制衡,同时受理事会钳制。
民主公投时可使用的投票机制有,

绝对多数赞成,公投议案的通过需要获得绝对多数的赞成票,即默认议案不通过;
绝对多数反对,只有获得绝对多数的反对票,才能阻止公投议案的通过,即默认议案通过;
过半数赞成,公投议案的通过只需要超过一半的投票是赞成票。
其中绝对多数的具体比例和投票率相关,投票率越高,绝对多数所要求的比例越低,比如投票率只有 50% 时,绝对多数的比例接近 80%,当投票率为 100%,绝对多数的比例是 50%+1。过半数赞成是指无论投票率的高低,赞成票都只需要满足 50%+1 即可。

民主公投


得益于 Substrate 提供的无分叉升级方式,Kusama 网络上任何 runtime 逻辑的修改,都可以直接通过链上升级来实现。这些修改必须提交议案进行公投,如果公投通过,网络会在一段时间之后自动升级并部署此项修改。polkadot-js/apps 提供的公投页面如下,



公众提交议案的流程:

使用 Polkadot 代码仓库提供的 build-only-wasm 脚本,编译最新的 runtime 代码,


scripts/build-only-wasm.sh polkadot // 编译完成后,在根目录生成 kusama_runtime.wasm 文件


在 polkadot.js/apps Democracy 页面(下面简称为某页面),通过 Submit preimage 提交刚生成的 wasm 文件,并记下对应的哈希值。提交 preimage 需要质押一定的 token,和所提交文件的字节数相关,当提案生效之后,自动归还质押的 token。


通过 Submit proposal,填入上一步记录的哈希值和用于锁定的 token 数量,提交进入公众提案队列。提交议案需要锁定最少 1ksm,当针对本议案的公投开始时,锁定解除。别人也可以对提交的议案进行附议(通过 Second),同样需要锁定 token,数量和提交议案时锁定的数量一致。


Kusama 网络每隔 7 天选择一个新的议案进行公投,这一议案可以是公众提交的支持最高(即提交人和附议人所锁定的 token 数量最多)的那一个,或者理事会提交的,两种议案轮流进行,如果某一轮其中一类议案为空,则选择另外一类议案。公众提交议案的投票机制总是绝对多数赞成。


当我们提交的议案进入公投阶段时,就可以在 Democray 页面的 referenda 下面看到,通过 Vote 对该议案进行投票,投票时,可以给定参与投票的 token 数量和对议案的信念值(信念值是指如果该议案通过,你希望和新网络「共存亡」的时长,具体的表现是参与投票的 token 会被锁定的时长,锁定的时间越长,相同数量 token 的投票权越高)。比如使用 10ksm 参与投票,信念值是 2,那么你的投票权就是 20(即 10 * 2),假设投的是赞成票,当投票结束后,结果为通过,那么这 10 个 token 的锁定时长是从投票结束之后的 16 天。如果你完全不想锁定,你可以将信念值设为 0.1,那你的投票权就只有 1(即 10 * 0.1)。反对票类似,但是因为投票结果和自己的投票方向相反,从而不会将 token 进行锁定。


公投时长为 7 天,用户可以在这段时间内的任意时间点进行投票和更改投票。


用户可以将自己的投票权(参与投票的 token 数量和信念值)委托给其它账户,一旦委托,token 将被锁定,直到解除委托并且对应的投票锁定时间到期。为了保证大额资金账户的安全,可以设置代理投票账户,从而由代理账户进行常用的投票操作。代理账户也可以将代理的投票权委托出去。


投票结束后,关闭公投。对于投票通过的公投,在经过 8 天的等待时间之后就会自动生效。这一时间超过了用户 staking 的锁定时长,当用户不满意投票结果时,可以选择不再参与 staking,享有完全退出网络的自由。


理事会


如果仅仅依赖公投,可以想象治理效率将会很低,所以 Kusama 网络引入了理事会这样的组织来处理网络中一些常规事务,包括但不局限于:

取消由于网络异常引发的 staking 惩罚,需要至少 1/2 的理事会成员同意;
提交非公众的公投议案,这类议案可以有上述 3 种不同的投票机制,即除了绝对多数赞成,还可以提交过半数赞成和绝对多数反对的议案,前两种需要至少 1/2 的成员同意,绝对多数反对议案的提交则需要理事会全体成员同意;
紧急情况下取消公投,需要 2/3 的成员同意;
对使用国库(treasury)资金的提案进行投票,至少 3/5 的成员同意才可以通过此类提案,多于 1/2 的成员则可以直接拒绝。


理事会的成员由持有 token 的用户投票选举产生的,目前 Kusama 网络的理事会正式成员有 13 个,后补 7 个。选举方式采用的是 Phragmén method,每届任期 1 天,即每 24 小时重新选举,不过正常情况下成员构成的变化很小,选举流程大致如下:

候选人通过 Council 页面的 Submit candidacy,来提交候选人申请,需要质押 1ksm,如果选举失败没收这 1ksm 押金,如果成功即成为理事会成员或者后补,则可以把押金取回。
通过 Council 页面上的 Vote 选项,用户可以选择最多 16 个候选人进行投票,并给出参与投票的 token 数量,还需要抵押 0.05ksm,不过可以随时删除投票,取回押金。
选举时间到,结束计票并更新组织成员。
理事会对 Kusama 网络常规事务的治理是通过提交动议(motion)来实现的,

理事会成员通过 Council Motions 子页面的 Propose montion 选项来提交动议,非理事会正式成员无法提交,提交时需要给出动议所需的最小通过票数(即赞同该动议的最小成员数),并且给出该动议的具体操作,如 staking 模块用于取消惩罚的 cancelDeferredSlash 操作。为了让动议的具体操作可以成功执行,需要确保动议所需的最少票数满足该操作的要求,如 cancelDeferredSlash 需要至少 1/2 的成员赞同,即当前 13 个成员需要有 7 个投赞成票。
投票时间为 3 天,其它成员针对此动议进行投票,投票通过则立即执行对应的操作,如果时间截止还没有通过,就可以被任何人关闭。但在关闭之前会检查是否存在高级成员(Prime member),如果存在,并且该成员投了赞成票,那么未参与投票的成员会自动跟随该成员也投赞成票,最后进行计算,确定动议是否通过。


理事会还可以提交公投议案(非公众提交的公投议案),这样即使存在很多公众议案的时候,理事会提交的议案每隔一轮总会被取出来进行公投。一个简单的流程如下:

在 Council Motions 子页面,通过 Propose external 提交一个投票规则为过半数赞成的议案,需要提供新的 runtime 逻辑的代码哈希。
理事会其他成员对上述议案进行投票,需要至少 1/2 的理事会成员同意,才会将该议案放入等待公投的理事会议案队列,该队列目前只能盛放一个议案。
在 Democracy 页面 Fast track 选项,技术委员会的成员可以为该议案申请进入快速通道,如果技术委员会 2/3 的成员赞同则打开快速通道,这意味着议案可以直接进入公投状态,投票时间缩短为 3 小时,而如果全体成员赞同则可以取消投票时间的限制。只要成功进入快速通道,不管何种情况,生效时间都没有限制。


技术委员会


技术委员会的成员是实现或者定义 Polkadot/Kusama 协议的团队,实现了其中某一个协议,则占有一个成员席位,如果两个都实现,那么占据两个席位。成员的增减决定需要通过理事会 1/2 以上的成员同意。技术委员会目前的职责主要包括:

上述提供快速通道的功能;
否决理事会的公投提案,每个成员针对某个提案只有一次否决机会,并且只能持续 7 天。


国库


Kusama 引入了国库的机制,收归国库的费用主要包括,

交易手续费分成(80%);
staking 罚没的金额;
理事会候选人落选后的押金;
账户被删除后的沉淀资金等。
随着 Kusama 网络的成长,目前国库的可用余额约为 160000ksm,对 Polkadot/Kusama 生态有益的贡献都可以申请国库内的资金,达到一定程度的激励作用,下面这些领域的贡献都是欢迎的:

基础设施的部署和运维;
网络安全,如监控服务、审计等;
生态支持,比如和第三方区块链的合作;
市场活动,包括广告、合作等;
社区活动和外联,如见面会,Kusama parties,创客空间等;
软件开发类,比如钱包,客户端等等。
申请国库的资金支持有两种方式,提交提案和接受小费(tip)。

提案的流程如下:

在 Riot channel Kusama Direction 里,提出申请资金支持的理由,通常需要已经开始了一些工作并且设计了合理的里程碑,听取理事会成员的意见并作相应的改进,得到理事会一定程度的认同后,就可以正式提交提案。通常情况下,充分沟通和得到认同的提案会更容易通过。
通过 Treasury 页面的 Submit proposal 提交申请,需要给出受益人的账户地址和希望得到的资金数额,需要质押申请资金额的 5% 且不少于 20ksm,当申请通过后,质押的 token 会被返回。
每隔 6 天,自动对通过的提案进行放款。


小费的流程为:

通过 Treasurey 页面的 Tip 选项,报告一个值得 tip 的行为,给出受益人的地址和 tip 的原因,需要质押 1ksm 加额外的基于字节数量的费用,当完成 tip 后,押金可退回。如果 tip 通过,且报告人和受益人不一致的时候,报告人可以获得 tip 金额的 20%,作为奖励。理事会成员可以直接开启一个 tip,无需质押 token,且没有报告奖励。
tip 开启之后,理事会成员可以就此进行投票,投票时每个成员给出自己建议的 token 数量,超过一半的成员赞成就表示通过。需要等 1 天时间才可以请求发放资金,tip 的最终金额是所有建议 token 数的中间值。


总结


通过本文,你已经了解到比特币和以太坊的治理概况,并且掌握了 Kusama 网络的链上治理模式,公投、理事会、技术委员会,他们互为补充,又彼此制衡。不管是在区块链系统,还是在现实世界里,没有完美的治理,也无法让所有人满意。治理和区块链的结合,带来了更大的想象空间,我为此着迷,也希望本文给你带来一些思考。

引用


Kusama Rollout and Governance Polkadot wiki: Governance

The Long Road To SegWit: How Bitcoin』s Biggest Protocol Upgrade Became Reality

Bitcoin Governance: What are BIPs and how do they work?

EthHub: Governance

Understanding The DAO Attack

Polkaassembly governance tool

更多


Substrate 官方文档:

Official Substrate Documentation for Blockchain Developers · Substrate Developer Hubsubstrate.dev

Parity 介绍:

Blockchain Infrastructure for the Decentralised Webwww.parity.io

Substrate 源码:

https://github.com/paritytech/substrategithub.com

Polkadot 源码:

https://github.com/paritytech/polkadotgithub.com

附录


democracy pallet
可调用函数:

propose,提交一个议案,需要锁定至少 1ksm,当开启投票之后,解除锁定
second, 附议某个议案,需要锁定和发起人相同数量的 ksm
vote,给正在进行公投的议案投票
proxy_vote,代理某个账户进行对公投议案进行投票
emergency_cancel,紧急情况下取消公投,至少 2/3 的 Council 成员同意才可以
external_propose,1/2 的 Council 成员可以决定下一个由议会提出的公投议案,投票规则为 SuperMajorityApprove
external_propose_majority,1/2 的 Council 成员可以决定下一个由议会提出的公投议案,投票规则为 SimpleMajority
external_propose_default,全体 Council 成员可以决定下一个由议会提出的公投议案,投票规则为 SuperMajorityAgainst(negative-turnout-bias)
fast_track,2/3 的技术委员会成员可以将议会决定的下一个公投议案正式提交进入公投状态,议案的投票规则必须是 SimpleMajority 或者 SuperMajorityAgainst,并缩减投票时间至 3 小时,投票结束后生效时间没有限制;全体技术委员会成员则可以将投票时间任意缩短。
veto_external,技术委员会的任何成员可以否决议会决定的下一个公投议案,但是否决的效力只能持续 7 天。
cancel_referendum,取消某个公投,只能是 root 用户
cancel_queued,取消某个已经完成投票并等待生效的法案,只能是 root 用户
on_initialize,每个区块开始的时候执行
如果时间到了(每隔 7 天),选取一个议案开始进行公投
执行投票通过到达生效期的公投议案
activate_proxy,stash 账户激活某个打开的投票代理账户
close_proxy,让当前账户不再进行投票代理
deactivate_proxy,stash 账户将激活的代理权收回,使其无效
delegate,将当前账户的部分投票权委托给另外一个账户,包括投票的 token 数量和信念值
undelegate,将当前账户的委托取消
clear_public_proposals,删除所有的公共提案,只能是 root 账户
note_preimage,注册提案的具体操作(即 runtime 模块的可调用函数),需要锁定一定数量的 ksm,和上传提案的可调用函数的字节数长度相关,当提案生效之后,锁定的 ksm 会解锁。
note_imminent_preimage,注册紧急提案的具体操作,不需要锁定 ksm,需要提案进入到等待生效的阶段(即 dispatch queue)。
reap_preimage,过了投票期(7 天)之后,删除注册的操作并解锁注册时锁定的 ksm,如果使用的不是注册时的账户,要延长 8 天。
unlock,解锁锁定时间过期的 ksm
open_proxy,activate_proxy 之前调用,建立代理
remove_vote,在以下场景下可以删除投票,通常在调用 unlock 之前
公投还没有结束
公投结束,投票结果输的乙方
公投结束,投票结果为赢的一方,且过了锁定期
remove_other_vote,替别人删除已经过期的投票
公投被取消
公投结束,投票结果输的乙方
公投结束,投票结果为赢的一方,且过了锁定期
proxy_delegate,将当前账户代理的 stash 账户的投票权力委托给另外另外一个账户,包括投票的 token 数量和信念值
proxy_undelegate,将当前账户代理的 stash 账户的委托取消
proxy_remove_vote,和 remove_vote 相同,不过是由代理账户触发的
enact_proposal,将公投正式生效,只能由区块链系统自己触发即 root,即 scheduler 会触发

collective pallet


可调用函数:

set_members,设置团体的成员和主席
execute,以单一成员的身份触发一个可调用函数
propose,议会成员提交一个 motion,并且提交方算一个赞成票
vote,成员给动议投票,如果通过,马上执行
close,关闭一个动议,在关闭之前,检查是否通过,如果有 prime 的话,如果 prime 是赞成票,那么所有的弃权票相当于赞同票


treasury pallet


可调用函数:

propose_spend,国库支出的提案,需要押金,5% 的申请金额,最少 20ksm
reject_proposal,多于 1/2 的理事会成员可以驳回提案,并且没收押金入国库
approve_proposal,至少 3/5 的理事会成员可以批准提案,稍后会发放,并且把押金退回
report_awesome,替自己或者别人申请 tip,需要具体的原因,需要锁定至少 1ksm 和适当的字节费用
retract_tip,收回 tip 申请,需要是发起人,成功后解锁抵押的 token
tip_new,主动 tip 某个行为,不需要锁定 token,必须是 Tippers 即理事会成员。
tip,对于某个已经开始的 tip 申请,给出自己建议的 token 数量,超过一半的 Tippers 就表示成功,可以关闭 tip 取现。
close_tip,关闭某个 tip,通过后需要等 1 天才可以关闭,金额也是现在确定,是所有建议的 tipper 给出的中间值,且如果报告人和受益人不同,则给报告人 20% 的分成。
on_initialize,每隔 6 天,发放一次国库的钱。


elections-phragmen pallet


可调用函数:

vote,给成员、后补、候选人投票,投票的 token 数量和需要抵押的数量 0.05ksm
remove_voter,删除自己的投票,返回抵押的 0.05 个 ksm
report_defunct_voter,报告那些非有效的投票人,即他们的投票对象里没有成员、后补和候选人,并获取抵押的 0.05 ksm
submit_candidacy,为自己提交候选人申请,失败了没收 1ksm 的押金,赢了成为成员或后补,可以把 1ksm 取回
renounce_candidacy,放弃候选人身份,取回押金;放弃后补身份,取回押金;放弃成员身份,取回押金,如果后补存在,马上补上
remove_member,删除某个成员,需要 sudo 权限,也就是公投


membership pallet


可调用函数:

add_member,新增某成员
remove_member,删除某成员
swap_member,删除某成员,同时新增另一成员
reset_members,重新设置所有成员
change_key,将发送交易的账户从成员中删除,并替换为一个新账户
set_prime,设置成员为高级成员
clear_prime,删除高级成员

来源链接:weixin.qq.com

—-

编译者/作者:区块律动BlockBeat

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

LOADING...
LOADING...