Qtum 量子鏈的分布式自治協議(Decentralized Governance Protocol,DGP)是基于 Qtum 實現的鏈上協議,協議允許通過鏈上提案和投票系統對共識參數進行更改。提案一旦投票通過,就可以在不分叉主鏈的情況下對參數進行無縫調整。目前在Qtum鏈上部署了4個DGP合約,分別用于對4個共識參數進行動態控制:
· 區塊大小: 區塊的最大容量
· 默認是2 Mb, DGP 合約: 0000000000000000000000000000000000000081
· 最小Gas價格: 區塊創建者可接受的最小Gas價格
· 默認是 40 satoshis, DGP 合約: 0000000000000000000000000000000000000082
· 區塊Gas限制:一個區塊所能消耗的最大Gas數
· 默認是4千萬, DGP 合約: 0000000000000000000000000000000000000084
· EVM Gas調度: 每個EVM操作花費的Gas
· DGP 合約: 0000000000000000000000000000000000000080
將控制這4個常見的區塊鏈參數的智能合約嵌入到 Qtum 主網的創世塊的原因是:這4個參數是Qtum鏈中最為關鍵的幾個參數,使用智能合約對它們進行動態更改,可以最大程度地減少對區塊鏈網絡的影響。
可以使用DGP合約來添加更多的可控參數,但這個過程需要執行一次硬分叉。因為需要對共識編碼進行修改,才能讓鏈上已經存儲的參數值變得可控。
DGP 工作原理
每一個可被 DGP 合約控制的參數都需要獨立部署一個相應的 DGP 合約。Qtum 客戶端會從控制參數的各個 DGP 合約中獲取每個區塊共識下的 DGP 合約所控參數的值。
客戶端如果沒有讀取到DGP合約中存儲的參數值,就會直接返回在客戶端代碼中所定義的該參數的初始值。
DGP 合約管理席(管理人員)的任務是在需要時為每個 DGP 合約參數發起提案,并提交提案啟動投票。一旦某個提案獲得足夠的支持票數,該提案會自動生效,同時新的參數規則將作為新的共識規則作用于相應的參數。
如果提案在21600個區塊內沒有獲得所需的票數,那么它將被駁回,同時合約將接受新的提案。
DGP合約
DGP 合約是 solidity 合約,允許管理以下內容:
· 管理操作: 增加/刪除合約管理席位和治理席位
· 設置管理操作所需的管理席位的票數
· 設置接受 DGP 合約參數值席位提案所需的管理席位票數
· 設置接受 DGP 合約參數值席位提案所需的治理席位票數
· 針對提案啟動投票
· 獲取投票中的提案:當前的票數,以及 DGP 合約參數和所需投票的當前值
首次部署DGP合約時,該合約是沒有管理席位的。因此必須調用相應的setter方法(只能調用一次):setInitialAdmin(),來設置初始的管理席位。該方法將首次調用的發送者設置為第一個管理席位。設置完成后,該管理席位的代理人就可以發起提案并啟動投票。提案有以下三種類型:
席位增加提案(3 種子類型):
· 增加新的管理席位提案
· 增加新的治理席位提案
· 增加新的 DGP 合約參數值席位提案
席位刪除提案 (2種子類型):
· 刪除當前管理席位提案
· 刪除當前治理席位提案
所需票數更改提案 (3 種子類型):
· 更改接受 DGP 合約參數值席位增加提案所需的管理席票數
· 更改接受 DGP 合約參數值席位增加提案所需的治理席票數
· 針對管理席或治理席提案:席位增加/刪除提案,或所需票數更改提案,更改接受這兩類提案所需的管理席票數
提案一旦啟動投票,獲得的支持票數不能小于票數閾值,否則不能生效。
除了增加第一個管理席位之外,其他的任何操作(不包括標識提案過期操作)都需要創建提案并啟動投票。
當管理席位代理人創建提案時,提案在創建完成那一刻就自動獲得了該管理席位的投票。
任意給定時間,每種提案類型最多只能有一個提案啟動投票。
治理席位代理人只能給增加新的DGP合約參數值席位提案進行投票。提案一旦通過,需要設置DGP合約所需的合約地址,用于獲取共識下的該參數的值。
管理席位代理人除了可以投票給增加新的DGP合約參數值席位提案之外,還可以投票給管理提案,其中包括所有其他類型的提案。
示 例
下面通過一個例子來解釋說明。在下面的例子中,我們將運行一個* qtumd regtest*節點并使用DGP合約來修改最小Gas價格這一參數的值 (DGP合約: 0000000000000000000000000000000000000082)。
通過增加3個管理席位和2個治理席位,并將DGP合約參數席位增加提案生效所需的最少票數設置為2張管理席位投票和1張治理席位投票,從而將最小Gas價格參數修改為80 satoshi。我們還需要2張管理席位的投票,以便在添加第二個管理席之后能夠繼續添加更多管理席位或治理席位。
為實現上述目標,我們需要執行以下步驟:
· 設置初始的管理席位
· 由初始的管理席代理人創建提案,用于增加第2個管理席位
· 由任一管理席代理人創建提案,用于獲取2張管理席投票從而使管理提案生效
· 由任一管理席代理人創建提案,用于增加第3個管理席位
· 由另一個管理席代理人對步驟4中創建的提案進行投票,因為需獲取2張管理席投票從而使管理提案生效(現在我們已經有了3個管理席位)
· 由任一管理席代理人創建提案,用于增加第1個治理席位
· 由另一個管理席代理人對步驟6中創建的提案進行投票
· 由任一管理席代理人創建提案,用于增加第2個治理席位
· 由另一個管理席代理人對步驟8中創建的提案進行投票
· 由任一管理席代理人創建提案,用于獲取2張管理席投票,以便接受DGP參數值席位增加提案
· 由另一個管理席代理人對步驟10中創建的提案進行投票
· 由任一管理席代理人創建提案,用于獲取1張治理席投票,以便接受DGP參數值席位增加提案
· 由另一個管理席代理人對步驟12中創建的提案進行投票
· 基于minGasPrice-dgp-template模板創建參數值合約,并將最小Gas價格參數設置為80 satoshis,編譯合約并在鏈上部署
· 由任一管理席代理人創建提案,使用步驟14中的合約地址增加一個新的DGP參數值席位
· 由另一個管理席代理人對步驟15中創建的提案進行投票
· 由任一治理席代理人對步驟15中創建的提案進行投票(使更改后的最小Gas價格參數的值生效,對于所有合約來說,新共識下的最小Gas價格現在是80 satoshis)
評論