治理就是用戶對區塊鏈系統進行調整、決策,使系統整體發生相應改變。這裡就提出了三個問題:誰可以參與決策?如何進行決策?如何執行決策?
原文標題《【權限專欄】聯盟鏈的“圓桌會議”》
【導讀】
在前文《誰允許你訪問了? 》中,介紹了區塊鏈中的權限層級、基於提案投票的權限管理模型,那麼基於提案投票的權限管理模型在區塊鏈中是如何使用的呢?下文將進行介紹。
隨著區塊鏈系統的運行,節點網絡拓撲、用戶數量會不斷的變化,運行在區塊鏈系統上的業務系統的形態與規模也會發生不斷的變化。區塊鏈系統的用戶會逐漸認識到現有的區塊鏈系統無法滿足需求,需要加以升級調整,以解決運行時遇到的問題並滿足一些新需求。
治理就是用戶對區塊鏈系統進行調整、決策,使系統整體發生相應改變。這裡就提出了三個問題:誰可以參與決策?如何進行決策?如何執行決策?
【聯盟自治】
根據決策系統的所處位置,可將區塊鏈治理分成:鏈下治理、鏈上治理。
▲鏈下治理
鏈下治理:依賴於區塊鏈系統以外的機制來完成治理。
大多時候依託於基金會,由核心開發者在社區中牽頭髮起某項提案,經過一定討論後,在區塊鏈系統中引入一些新的機制來達成某項目的,但這種機制往往和舊版系統不兼容,無法平滑過渡。
注意:這種方式往往會導致硬分叉,因為用戶對於新機制的引入存在支持和反對兩種觀點,而這種模式的治理需要更新區塊鏈程序,反對派可以選擇不更新加以抵制,就會導致用戶群體的割裂出現硬分叉,比較出名的事件就是以太坊的DAO事件,DAO之後以太坊也就分裂成了ETH和ETC兩個系統。
▲鏈上治理
鏈上治理:依賴於區塊鏈系統內部的機制來完成治理。
相比於鏈下治理,鏈上治理所提供的可調整能力是預定義的、有限的,但鏈上治理一般可以保證節點之間做統一、同步變更,不易導致用戶社群分裂,產生硬分叉,總結而言就是安全、受限。同時,通過鏈上治理可以來改變一些區塊鏈系統的運行時參數、共識的各種參數(例如出塊時間、區塊內交易數量等)、區塊鏈系統公共組件的配置參數(例如區塊鏈賬號黑名單、域名服務等)。
【鏈上治理提案投票模型】
前文提出三個問題:誰可以參與決策?如何進行決策?如何執行決策?基於提案投票的權限管理模型對其分別回答。
誰能參與:基於提案投票的權限管理模型中,維護角色系統、具有特定角色的用戶可以參與。
如何決策:去中心化決策。能參與決策的用戶可以發起提案,所有能參與決策的用戶在一定規則限制下進行投票,當投票超過一定閥值時出發執行。
如何執行:通過RPC的提案基準來序列化提案,基於提案進行決策,決策完成後通過反序列化、反射RPC請求的方式執行。
▲角色系統
角色系統:基於區塊鏈的公鑰密碼學賬號系統,為賬號增加角色屬性,同時使用編寫的內置合約來進行賬號角色的管理。
由於區塊鏈賬本採用了鍵值對存儲的方式進行存儲設計,為了方便查詢,在各個賬號中保存了賬號到角色的映射關係,在內置合約狀態數據中保存了角色到賬號的映射關係。
通過內置的一些角色來進行核心權限控制,當前最核心的內置角色是admin,在第一次調用內置合約時給特定的賬號賦予admin角色。一般情況下,這些被賦予admin角色的賬號是創世區塊中寫入的賬號,所謂的創世賬號admin賬號可以發起提案交易、投票交易和執行交易。 node賬號可以發起提案和執行提案。
▲合約類型
自治相關的合約都封裝在了內置合約中,內置合約採用一個統一的前端合約來封裝提案狀態機,後端則是不直接暴露合約接口的功能合約,包括負責權限合約、配置合約、節點合約,以後還會進行擴展。
權限合約:提供角色增加、刪除的功能,以及賦予用戶角色和回收用戶角色的功能。如果要對角色系統進行維護,則需要通過提案調用權限合約。
配置合約:提供修改鏈級配置的功能。如果要對鏈級配置做統一更改,需要通過提案調用配置合約更改共識配置,例如batch_size等來修改打包參數,也可以更改攔截器配置,打開攔截器,配置相應規則可以禁止具有某些角色的用戶調用某些合約,或者只允許具有某些角色的用戶調用某些合約,還可以變更提案配置,修改提案的超時時間、投票通過閾值等。
節點合約:提供增加、刪除節點的功能。如果要對網絡拓撲進行更改,需要通過提案調用節點合約,節點合約提供對分佈式CA證書的支持,另外也提供共識節點集合變更的支持。
使用自治合約,可以通過四類交易進行,分別是提案交易、投票交易、撤銷交易、執行交易。
提案交易:封裝功能合約調用的多個方法名、參數構成的操作列表,用於創建提案。
投票交易:對提案進行投票,有權投票的用戶可以通過投票交易對提案進行投票。同意此提案的操作內容,則投支持票,不同意則投反對票。
撤銷交易:撤銷提案,通過提案交易創建提案的用戶,在提案沒有被執行時,可以通過撤銷交易撤銷此提案。
執行交易:執行投票通過的交易,通過提案交易創建提案的用戶,通過執行交易來執行提案,執行交易可能會導致配置變更,也稱為配置交易。
▲業務流程
對於單個提案,有提案發起、提案審批、提案超時、提案禁止、提案通過、提案生效、提案銷毀這幾種狀態。其狀態的流轉如下圖所示:
引發提案狀態發生變更的交易則是上文介紹到的提案交易、投票交易、執行交易、撤銷交易。
注意:系統中只能有一個提案。當一個提案交易在提案合約中處理時,首先檢查已有提案是否達到終止狀態(所謂終止狀態指的是超時、禁止或生效三個狀態)。如果已有提案已經達到終止狀態,那麼已有提案的數據會被從狀態數據中移除,取而代之的是新提案的數據,新提案進入審批狀態。
經過一段時間投票,如果支持票超過閾值則進入通過狀態,如果反對票超過閾值則進入禁止狀態。達到通過狀態的提案都可以通過執行提案交易來變更到生效狀態。在任何狀態下,一旦提案相關交易的打包時間超過一定範圍,就會導致提案超時。
當提案狀態發生變更時,會通過mq通知到客戶端。客戶端也可以主動使用輪詢的方式來主動查詢提案。
【總結】
本篇介紹了聯盟自治的鏈上、鏈下治理,講解了區塊鏈系統機制是如何完成治理的、鏈上治理提案投票模型部分角色系統是如何運作的、合約類型以及一條業務交易是如何流轉的等內容。聯盟自治是為了滿足靈活多變、迭代更替的業務規則而提出的一種具備聯盟協商、迭代升級的技術。
綜上所述,鏈上自治主要作用幫助使用角色系統來控制誰可以參與決策,通過內置合約來管理決策系統,完善控制如何進行決策以及如何執行決策的機制。
作者簡介
劉明美趣鏈科技基礎平台部區塊鍊網絡研究小組
參考文獻
[1] 《區塊鏈技術指南》
展開全文打開碳鏈價值APP 查看更多精彩資訊