Qtum企業版,也叫QtumX,旨在開發一套聯盟鏈系統。在聯盟鏈中,共識機制只能由一小部分受權的節點來執行,而讀和發交易仍舊對全部節點開放。算法
Qtum被市場證實了是一條成功的公有鏈,因此企業版仍會基於Qtum的框架進行開發。一些新的模塊將會引入,從而知足如下的企業需求:安全
諸如比特幣、以太坊和量子鏈之類的區塊鏈稱之爲公有鏈。它們沒有任何接入限制。任何人均可以在上面建立區塊和發送交易。在這樣的區塊鏈中,誕生了不少共識算法,例如PoW(Proof of Work)和PoS(Proof of Stake),用於保證大量用戶可以對「誰能夠建立下一個區塊」達成共識。這些區塊鏈被認爲是徹底去中心化的。服務器
而聯盟鏈一般稱之爲「部分去中心」的。在聯盟鏈中,共識的過程只能由少部分受權的節點進行執行。例如,一個由三家遊戲公司組成的聯盟打算運行一條區塊鏈,用於記錄它們旗下的全部遊戲中的金幣。它們中每一家運行一個節點,用於驗證交易和建立區塊。遊戲玩家則可以讀取區塊和發送交易。在這種狀況下,只有這3個受權的節點須要對建立區塊的過程達成共識。網絡
聯盟鏈的共識算法一般叫作PoA(Proof of Authority)。PoW的原理是計算一個複雜的數學問題,PoS的原理是持有大量的鏈上代幣,而PoA則是使用一張受權礦工地址列表來決定哪些節點能夠建立新的區塊。當一條鏈被列表中的大多數礦工簽名後,這條鏈就能夠視做爲一條永久的鏈。這樣作會更爲高效和安全,由於礦工變少了且礦工是可信的。框架
這裏咱們介紹一種PoA共識算法,該算法將會在Qtum企業版中供用戶進行選擇。這是一種BFT(Byzantine Fault Tolerance)類型的算法,一般被稱做拜占庭將軍問題的書面協議解法[1]。在這個算法中,每一個區塊須要由其礦工進行簽名,且大於等於一半的礦工節點掛掉以後系統纔會中止製造新的區塊。咱們首先將整個算法的流程圖貼出來,而後再在下文中詳細闡述其邏輯。函數
爲了便於解釋這個算法,咱們假定有5個受權的礦工,A、B、C、D、E,它們的公鑰存儲在一個有序列表中。這個列表在區塊鏈最開始的時候初始化,而後能夠經過智能合約進行更新修改。咱們再次假定在區塊鏈高度區塊鏈
的時候,3d
是cdn
。而後這5個礦工會輪流建立一個新的區塊,從blog
直至
,以下圖。
當建立新的區塊的時候,礦工會用
函數來簽名這個區塊,而後將簽名結果附加到區塊中。經過這種方式,其餘節點能夠用
函數從區塊中恢復出礦工的公鑰來,從而經過和
進行比對來驗證該礦工是否有權建立區塊。
當一條鏈被大多數礦工簽名以後,這條鏈能夠被視做爲一條永久的鏈。例如在上圖中,從創世區塊到
高度的鏈是一條永久的鏈,由於它已經被它接下來的幾位礦工D、E和A簽名了。若是任何礦工想要在高度
下面製造分叉,這一分叉則沒法被絕大多數礦工所認同。
所以,至少須要
位礦工來保持共識算法的正常運行,這裏
是總共受權的礦工數量而且
是整數除法。在咱們的例子中
,因此至少須要3個礦工節點。即,節點A、B、C能夠在D、E節點關閉的時候繼續建立新的區塊。而後產出的區塊鏈就會如同ABCABC,是一條有效的鏈。這一共識算法能夠簡單定義以下:
一個礦工在如下狀況能夠建立新的區塊
- 它當前是被受權的;
- 最近的
n/2個塊不是由它建立的。
根據這必定義,咱們能夠得到真正被容許建立下一個區塊的礦工。只須要從
中去掉最近
個塊的礦工便可。例如,在高度
上,
能夠計算以下。
儘管B、C、D均可以建立下一個區塊,但必須指定它們的優先級順序,從而避免它們之間爲下一個區塊而競爭,而且保證區塊鏈被儘量多的礦工簽名驗證過。所以,咱們把
定義爲一個有序列表,處於列表第一位的是在
中排在當前礦工以後的那位礦工,而且以此類推。在咱們的例子中,B、C、D的順序展現在了上圖中。
當優先級順序肯定了以後,接下來計算分配給每一個礦工的
。在
中排序更前的礦工會分配更早的
。每一個礦工使用分配的
來建立新的區塊,而且在
到來前保持等待狀態。若是等待過程當中沒有接收到新的區塊,礦工就會在等待結束時廣播本身建立的區塊。
的計算方式以下。
經過這種方式,若是一個礦工未能成功廣播新的區塊,下一個礦工會在
時間以後取代它。這裏舉一個例子。礦工B在產出高度爲
的區塊時掛了。隨後,B在
中的下一位C,將會在
的
時間以後,廣播其建立的新區塊。
DGP(Decentralized Governance Protocol)[2]是Qtum中應用的一項技術。它容許使用區塊鏈上的智能合約去在線修改區塊鏈的參數,這樣就不會形成軟分叉或是硬分叉。
DGP工做的方式很是直接了當。首先,由DGP的一名管理員發起提議去改變某一個系統參數。隨後,全部的DGP管理員能夠對這個提議進行投票。若是提議收到了足夠多的贊同票,則該提議中的參數修改生效。而後,提議的內容會被存儲在區塊鏈上,方便區塊鏈的軟件去獲取。
很明顯,DGP很是適合用來存儲和更新PoA中的受權礦工列表。受權的礦工能夠看作是一個公鑰的列表,這個列表能夠經過配置文件初始化,而後再經過DGP進行更新。但這裏咱們須要對DGP作一些修改從而讓礦工的更新過程更加安全。
由DGP更新的礦工列表須要至少延遲
n/2+1個塊以後真正生效。
這裏,
是更新前列表的長度,
是整數除法。這一機制保證了礦工列表的更新操做會在其成爲區塊鏈上的永久記錄以後才真正生效。不然,若是更新操做能夠被另外一個分叉否認掉,則列表更新前的礦工頗有可能在這個分叉下繼續挖礦甚至產生硬分叉。
和PoS中的coinstake獎勵機制不一樣,PoA中的礦工會仍舊使用coinbase進行獎勵。Qtum中合同運行產生的退款,也會加入到coinbase中。這樣,PoA中的coinbase會包含一個或多個輸出。第一個輸出是給礦工的,金額等於區塊獎勵和區塊中全部交易的交易費。其他的輸出則是合同退款。
咱們會盡量地讓企業版中的大多數參數都是可配置的。所以系統能夠輕鬆應用於各類各樣的環境中。部分可配置的參數以下。
聯盟鏈廣闊的應用前景是對QtumX價值的最好體現。這裏咱們列舉了QtumX的3類應用場景。更多的應用方式還須要在實踐中進行探索。
做爲一個區塊鏈系統,最基本的應用就是token。使用QtumX能夠輕鬆創建起一套積分的存儲和交易系統。這裏所指的積分,能夠是:
這些使用場景對高TPS、快速的交易確認和手機端輕節點等特性都是有強烈需求的。QtumX徹底能夠知足這些需求。
基於智能合約的區塊鏈應用一樣值得期待。經過QtumX,把本來書面的合同、規則用智能合約的形式記錄在區塊鏈上,讓合同變得透明、難以篡改、易於驗證。使用聯盟鏈部署和運行合約,僅須要開發者提供服務器資源做爲礦工節點,而不須要消耗高額的公鏈代幣。同時,QtumX支持EVM,這使得合約的兼容性更好。
基於智能合約的應用舉例以下:
把一些重要的信息記錄在區塊鏈上,用於公衆的驗證和追溯。使用聯盟鏈的方式實現,一樣能夠節省成本。具體的使用場景包括:
QtumX項目旨在創建一套商用解決方案,從而幫助來自各行各業的公司、團體、高校經過區塊鏈技術落地本身的想法。因此,它將不只僅是當前白皮書中提出的聯盟鏈。更多的內容將會在咱們完成相關專利申請後再公開。
[1] Driscoll, Kevin; Hall, Brendan; Sivencrona, Håkan; Zumsteg, Phil. "Byzantine Fault Tolerance, from Theory to Reality".
[2] qtum.org. "Qtum's Decentralized Governance Protocol".