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