QtumX技術白皮書

weixin_34239169發表於2018-07-16

QtumX技術白皮書

背景

Qtum企業版,也叫QtumX,旨在開發一套聯盟鏈系統。在聯盟鏈中,共識機制只能由一小部分授權的節點來執行,而讀和發交易仍舊對所有節點開放。

Qtum被市場證明了是一條成功的公有鏈,所以企業版仍會基於Qtum的框架進行開發。一些新的模組將會引入,從而滿足以下的企業需求:

  1. 高TPS(Transactions Per Second)和較短的確認時間
  2. 可定製的系統引數,保證系統適用於各種不同的環境

聯盟鏈

聯盟鏈和PoA共識

諸如比特幣、以太坊和量子鏈之類的區塊鏈稱之為公有鏈。它們沒有任何接入限制。任何人都可以在上面建立區塊和傳送交易。在這樣的區塊鏈中,誕生了很多共識演算法,例如PoW(Proof of Work)和PoS(Proof of Stake),用於保證大量使用者能夠對“誰可以建立下一個區塊”達成共識。這些區塊鏈被認為是完全去中心化的。

而聯盟鏈通常稱之為“部分去中心”的。在聯盟鏈中,共識的過程只能由少部分授權的節點進行執行。例如,一個由三家遊戲公司組成的聯盟打算執行一條區塊鏈,用於記錄它們旗下的所有遊戲中的金幣。它們中每一家執行一個節點,用於驗證交易和建立區塊。遊戲玩家則能夠讀取區塊和傳送交易。在這種情況下,只有這3個授權的節點需要對建立區塊的過程達成共識。

image

聯盟鏈的共識演算法通常叫做PoA(Proof of Authority)。PoW的原理是計算一個複雜的數學問題,PoS的原理是持有大量的鏈上代幣,而PoA則是使用一張授權礦工地址列表來決定哪些節點可以建立新的區塊。當一條鏈被列表中的大多數礦工簽名後,這條鏈就可以視作為一條永久的鏈。這樣做會更為高效和安全,因為礦工變少了且礦工是可信的。

一種BFT共識演算法

這裡我們介紹一種PoA共識演算法,該演算法將會在Qtum企業版中供使用者進行選擇。這是一種BFT(Byzantine Fault Tolerance)型別的演算法,通常被稱作拜占庭將軍問題的書面協議解法[1]。在這個演算法中,每個區塊需要由其礦工進行簽名,且大於等於一半的礦工節點掛掉之後系統才會停止製造新的區塊。我們首先將整個演算法的流程圖貼出來,然後再在下文中詳細闡述其邏輯。

image

為了便於解釋這個演算法,我們假定有5個授權的礦工,A、B、C、D、E,它們的公鑰儲存在一個有序列表中。這個列表在區塊鏈最開始的時候初始化,然後可以通過智慧合約進行更新修改。我們再次假定在區塊鏈高度

h1

的時候,

current_authorized_miner_list

[pubkey_A, pubkey_B, pubkey_C, pubkey_D, pubkey_E]

。然後這5個礦工會輪流建立一個新的區塊,從

h1

直至

h2

,如下圖。

image

當建立新的區塊的時候,礦工會用

secp256k1_ecdsa_sign_recoverable

函式來簽名這個區塊,然後將簽名結果附加到區塊中。通過這種方式,其他節點可以用

secp256k1_ecdsa_recover

函式從區塊中恢復出礦工的公鑰來,從而通過和

current_authorized_miner_list

進行比對來驗證該礦工是否有權建立區塊。

當一條鏈被大多數礦工簽名之後,這條鏈可以被視作為一條永久的鏈。例如在上圖中,從創世區塊到

h3

高度的鏈是一條永久的鏈,因為它已經被它接下來的幾位礦工D、E和A簽名了。如果任何礦工想要在高度

h3

下面製造分叉,這一分叉則無法被絕大多數礦工所認同。

因此,至少需要

n/2+1

位礦工來保持共識演算法的正常執行,這裡

n

是總共授權的礦工數量並且

n/2

是整數除法。在我們的例子中

n=5

,所以至少需要3個礦工節點。即,節點A、B、C可以在D、E節點關閉的時候繼續建立新的區塊。然後產出的區塊鏈就會如同ABCABC,是一條有效的鏈。這一共識演算法可以簡單定義如下:

一個礦工在以下情況可以建立新的區塊

  1. 它當前是被授權的;
  2. 最近的
    n/2
    個塊不是由它建立的。

根據這一定義,我們可以獲得真正被允許建立下一個區塊的礦工。只需要從

current_authorized_miner_list

中去掉最近

n/2

個塊的礦工即可。例如,在高度

h2

上,

next_block_miner_list

可以計算如下。

image

儘管B、C、D都可以建立下一個區塊,但必須指定它們的優先順序順序,從而避免它們之間為下一個區塊而競爭,並且保證區塊鏈被儘可能多的礦工簽名驗證過。因此,我們把

next_block_miner_list

定義為一個有序列表,處於列表第一位的是在

current_authorized_miner_list

中排在當前礦工之後的那位礦工,並且以此類推。在我們的例子中,B、C、D的順序展示在了上圖中。

當優先順序順序確定了之後,接下來計算分配給每個礦工的

block_time

。在

next_block_miner_list

中排序更前的礦工會分配更早的

block_time

。每個礦工使用分配的

block_time

來建立新的區塊,並且在

block_time

到來前保持等待狀態。如果等待過程中沒有接收到新的區塊,礦工就會在等待結束時廣播自己建立的區塊。

block_time

的計算方式如下。

image

通過這種方式,如果一個礦工未能成功廣播新的區塊,下一個礦工會在

timeout

時間之後取代它。這裡舉一個例子。礦工B在產出高度為

h2+1

的區塊時掛了。隨後,B在

next_block_miner_list

中的下一位C,將會在

parent_block_time

interval+timeout

時間之後,廣播其建立的新區塊。

image

用DGP進行授權礦工的儲存與更新

DGP(Decentralized Governance Protocol)[2]是Qtum中應用的一項技術。它允許使用區塊鏈上的智慧合約去線上修改區塊鏈的引數,這樣就不會造成軟分叉或是硬分叉。

DGP工作的方式非常直接了當。首先,由DGP的一名管理員發起提議去改變某一個系統引數。隨後,所有的DGP管理員可以對這個提議進行投票。如果提議收到了足夠多的贊同票,則該提議中的引數修改生效。然後,提議的內容會被儲存在區塊鏈上,方便區塊鏈的軟體去獲取。

很明顯,DGP非常適合用來儲存和更新PoA中的授權礦工列表。授權的礦工可以看做是一個公鑰的列表,這個列表可以通過配置檔案初始化,然後再通過DGP進行更新。但這裡我們需要對DGP做一些修改從而讓礦工的更新過程更加安全。

由DGP更新的礦工列表需要至少延遲

n/2+1
個塊之後真正生效。

這裡,

n

是更新前列表的長度,

n/2

是整數除法。這一機制保證了礦工列表的更新操作會在其成為區塊鏈上的永久記錄之後才真正生效。否則,如果更新操作可以被另一個分叉否定掉,則列表更新前的礦工很有可能在這個分叉下繼續挖礦甚至產生硬分叉。

區塊獎勵

和PoS中的coinstake獎勵機制不同,PoA中的礦工會仍舊使用coinbase進行獎勵。Qtum中合同執行產生的退款,也會加入到coinbase中。這樣,PoA中的coinbase會包含一個或多個輸出。第一個輸出是給礦工的,金額等於區塊獎勵和區塊中所有交易的交易費。其餘的輸出則是合同退款。

可定製的系統引數

我們會盡可能地讓企業版中的大多數引數都是可配置的。因此係統可以輕鬆應用於各種各樣的環境中。部分可配置的引數如下。

  1. 創世區塊:
    block_time
    , coinbase;
  2. 網路引數:
    pchMessageStart
    ,
    seeds
  3. PoA共識演算法的引數:
    interval
    ,
    timeout
  4. 區塊獎勵引數:initial value,
    nSubsidyHalvingInterval

應用前景

image

聯盟鏈廣闊的應用前景是對QtumX價值的最好體現。這裡我們列舉了QtumX的3類應用場景。更多的應用方式還需要在實踐中進行探索。

積分系統

作為一個區塊鏈系統,最基本的應用就是token。使用QtumX可以輕鬆建立起一套積分的儲存和交易系統。這裡所指的積分,可以是:

  1. 遊戲中的金幣
  2. 商場、超市發放的儲值卡
  3. 航空公司贈送的里程

這些使用場景對高TPS、快速的交易確認和手機端輕節點等特性都是有強烈需求的。QtumX完全可以滿足這些需求。

合約系統

基於智慧合約的區塊鏈應用同樣值得期待。通過QtumX,把原本書面的合同、規則用智慧合約的形式記錄在區塊鏈上,讓合同變得透明、難以篡改、易於驗證。使用聯盟鏈部署和執行合約,僅需要開發者提供伺服器資源作為礦工節點,而不需要消耗高額的公鏈代幣。同時,QtumX支援EVM,這使得合約的相容性更好。

基於智慧合約的應用舉例如下:

  1. 預測市場
  2. 保險,例如車險、財產險
  3. 房屋租售
  4. 遊戲

數字身份

把一些重要的資訊記錄在區塊鏈上,用於公眾的驗證和追溯。使用聯盟鏈的方式實現,同樣可以節省成本。具體的使用場景包括:

  1. 供應鏈管理:追蹤商品從生產、運輸、到零售的過程
  2. 教育記錄:記錄學生的課程、學校經歷
  3. 奢侈品:記錄奢侈品的資訊用於購買者驗證

未來工作

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".


相關文章