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