Kusama 如何進行鏈上治理

買賣虛擬貨幣

本文經作者 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, 附議某個議案,需要鎖定和發起人相同數量的ksmvote,給正在進行公投的議案投票proxy_vote,代理某個賬戶進行對公投議案進行投票emergency_cancel,緊急情況下取消公投,至少2/3的Council成員同意才可以external_propose,1/2的Council成員可以決定下一個由議會提出的公投議案,投票規則為SuperMajorityApproveexternal_propose_majority,1/2的Council成員可以決定下一個由議會提出的公投議案,投票規則為SimpleMajorityexternal_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,解鎖鎖定時間過期的ksmopen_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%的申請金額,最少20ksmreject_proposal,多於1/2的理事會成員可以駁回提案,並且沒收押金入國庫approve_proposal,至少3/5的理事會成員可以批准提案,稍後會發放,並且把押金退回report_awesome,替自己或者別人申請tip,需要具體的原因,需要鎖定至少1ksm和適當的位元組費用retract_tip,收回tip申請,需要是發起人,成功後解鎖抵押的tokentip_new,主動tip某個行為,不需要鎖定token,必須是Tippers即理事會成員。tip,對於某個已經開始的tip申請,給出自己建議的token數量,超過一半的Tippers就表示成功,可以關閉tip取現。close_tip,關閉某個tip,透過後需要等1天才可以關閉,金額也是現在確定,是所有建議的tipper給出的中間值,且如果報告人和受益人不同,則給報告人20%的分成。on_initialize,每隔6天,發放一次國庫的錢。elections-phragmen pallet

可呼叫函式:vote,給成員、後補、候選人投票,投票的token數量和需要抵押的數量0.05ksmremove_voter,刪除自己的投票,返回抵押的0.05個ksmreport_defunct_voter,報告那些非有效的投票人,即他們的投票物件裡沒有成員、後補和候選人,並獲取抵押的0.05 ksmsubmit_candidacy,為自己提交候選人申請,失敗了沒收1ksm的押金,贏了成為成員或後補,可以把1ksm取回renounce_candidacy,放棄候選人身份,取回押金;放棄後補身份,取回押金;放棄成員身份,取回押金,如果後補存在,馬上補上remove_member,刪除某個成員,需要sudo許可權,也就是公投membership pallet

可呼叫函式:add_member,新增某成員remove_member, 刪除某成員swap_member,刪除某成員,同時新增另一成員reset_members,重新設定所有成員change_key,將傳送交易的賬戶從成員中刪除,並替換為一個新賬戶set_prime,設定成員為高階成員clear_prime,刪除高階成員編者注:文中原本有大量參考連結,但由於微信訂閱號無法跳轉外鏈,所以如果想檢視外鏈請點選文末的 “閱讀原文”,移步知乎檢視。

免責聲明:

  1. 本文版權歸原作者所有,僅代表作者本人觀點,不代表鏈報觀點或立場。
  2. 如發現文章、圖片等侵權行爲,侵權責任將由作者本人承擔。
  3. 鏈報僅提供相關項目信息,不構成任何投資建議

推荐阅读

;