新年伊始,CSDN 以“讓區(qū)塊鏈回歸技術和應用的本質”為宗旨撰寫《區(qū)塊鏈開發(fā)者報告》包含技術掃描、公鏈選擇指南,以及公鏈與應用開發(fā)實戰(zhàn) 3 個部分。
其中公鏈與應用開發(fā)實戰(zhàn)部分,Qtum 量子鏈中國區(qū)技術負責人——鐘文斌,撰寫了《公鏈設計與開發(fā)實踐和開發(fā)細節(jié)》部分,講述了 Qtum 量子鏈基本特性、設計初衷,以及在Qtum量子鏈項目中所運用技術的詳細介紹,本文為上篇,包含以下部分:
· 背景介紹
· Qtum 量子鏈的基本特性
· 賬戶抽象層 ― UTXO 和比特幣腳本如何支持智能合約?
· PoS 共識機制
公鏈設計與開發(fā)細節(jié)揭秘 作者:鐘文斌
背景介紹
2018 年被稱為“公鏈元年”,各種形形色色的公鏈如雨后春筍,一時間幾乎所有項目都在開發(fā)各種各具特色的公鏈。Qtum 量子鏈作為國內最早的一批公鏈之一,在 2017 年 9 月上線了其主干網絡,其全球全節(jié)點數(shù)僅次于以太坊和比特幣,成為全球第三大去中心化區(qū)塊鏈網絡。
Qtum 兼容比特幣和以太坊這兩大生態(tài),可以說集合了主流公鏈開發(fā)的所有技術,并且在此基礎上提出并實現(xiàn)了多項技術創(chuàng)新。本文以 Qtum 為例,介紹了公鏈設計和開發(fā)需要注意的諸多細節(jié),供所有公鏈開發(fā)者參考。
Qtum 量子鏈的基本特性
Qtum 是首個建立在 UTXO 模型之上,采用 PoS 共識機制和去中心化治理模式,且兼容多虛擬機的智能合約平臺和價值傳輸網絡。
為了讀者有直觀理解,先羅列 Qtum 區(qū)塊鏈網絡的的基本特性和參數(shù) :
底層模型 :UTXO(Unspent Transaction Output)
區(qū)塊大小 :2 MB
平均區(qū)塊間隔 :144 秒
共識機制 :PoS(Proof-of-Stake,權益證明機制)
鏈上理論最大 TPS : 70~100 筆交易 / 秒
初始發(fā)行量 :100,000,000 QTUM
當前挖礦獎勵 :4 QTUM,每四年減半
挖礦獎勵總額 :約 7,884,000 QTUM(作為區(qū)塊生產者獎勵)
基礎代碼框架 :比特幣 Bitcoin core
支持智能合約,支持 EVM,x86VM 等多虛擬機
支持去中心化鏈上治理機制
這些特性和參數(shù)的確定并非一時興起,而是 Qtum 創(chuàng)始團隊在綜合考慮公鏈生態(tài)的現(xiàn)狀、應用場景、技術可行性以及未來發(fā)展方向等因素之后確定的。在正式開始介紹各部分設計前,不妨先回顧一下 Qtum 設計初衷,有助于理解后續(xù)的許多實現(xiàn)細節(jié)。
Qtum 量子鏈設計初衷
Qtum 量子鏈的想法誕生于 2016 年,當時的比特幣網絡已經穩(wěn)定運行了近 8 年,期間比特幣賬本從未出過一筆錯賬,足以看出比特幣 UTXO,PoW 等設計的優(yōu)越性。當時大部分項目都是對比特幣的簡單修改,本質上還是中本聰最初設計的雛形。然而比特幣的美中不足之處在于其非圖靈完備的腳本,無法支持真正意義上的智能合約。
Qtum 創(chuàng)始團隊最初始的想法很簡單 :讓比特幣支持智能合約。
然而,為什么團隊創(chuàng)造了一條新的公鏈,并且具有如此多與比特幣完全不同的特性呢?主要出于以下幾點考慮 :
1. 出于安全性、穩(wěn)定性、匿名性和可擴展性等方面考慮,選擇 UTXO 模型,而不是賬戶模型 ;
2. 比特幣的升級需要 Core 團隊和比特幣社區(qū)的共識,如此重大的升級幾乎不可行,因此需要一條新公鏈 ;
3. 支持智能合約需要虛擬機,EVM 具有良好的生態(tài),首先兼容
4. 不重復造輪子,并保持和比特幣及以太坊兩大社區(qū)的兼容性,復用比特幣和以太坊部分代碼
5. EVM 有其固有的缺點,因此 Qtum 也在自主研發(fā)更具兼容性的 x86 虛擬機
6. 同一條鏈上支持多種虛擬機,需要設計可擴展的賬戶抽象層
7. PoW 共識的缺陷,兼顧去中心化,因此采用 PoS 作為共識機制
8. 已有的區(qū)塊鏈項目都缺乏有效的鏈上治理模式,需要設計一套去中心化治理機制。
簡而言之,Qtum = UTXO+PoS+ 智能合約 + 多虛擬機兼容 + 去中心化治理,這與開篇提到的 :“Qtum 是首個建立在 UTXO 模型之上,采用 PoS 共識機制和去中心化治理模式,且兼容多虛擬機的智能合約平臺和價值傳輸網絡”完全吻合。上述設計涉及到較多技術實現(xiàn)細節(jié),接下來我們詳細解釋。
Qtum 技術實現(xiàn)細節(jié)
01 賬戶抽象層 : UTXO 和比特幣腳本如何支持智能合約?
UTXO v.s. 賬戶模型UTXO(Unspent TransacTIon Output,未花費的交易輸出)是比特幣采用的底層賬本模型。而以太坊則采用了賬戶模型。對于普通人來說,后者相對好理解,就是從一個地址到另一個地址,一筆 ETH 的傳輸,類似銀行賬戶。
而比特幣交易則相對復雜,它是由若干 input和 output 組成的,每個 output 包含特定”鎖定腳本”,該腳本規(guī)定了該 output 的花費規(guī)則,提供符合規(guī)則的”解鎖腳本“即可花費該 output,作為下一筆交易的 input。而尚未被花費的 output 就是 UTXO。比特幣網絡上的交易都是由 input 和 output 串聯(lián)起來的。
UTXO 的優(yōu)點在于 :
? 安全性:解決雙花問題的邏輯和處理方式都及其簡單,且支持原生多重簽名
? 匿名性:多入多出的交易,錢包可生成任意多個地址,每次生成新的找零地址
? 可擴展性:可并行處理,生成離線交易無需像以太坊一樣維護 nonce
? 輕錢包:SPV,支持輕錢包去中心化驗證交易的合法性,特別適合移動設備
? 兼容性:兼容諸如閃電網絡,跨鏈原子交換,隱私交易等其他基于 UTXO 的項目所采用的技術
UTXO 雖然有諸多優(yōu)點,但當時基于 UTXO 模型的各種項目的底層腳本語言都是非圖靈完備的,并且與以太坊虛擬機所采用的賬戶模型無法兼容。
為此 Qtum 開發(fā)賬戶抽象層(Account AbstracTIon Layer, AAL),實現(xiàn) UTXO 模型與賬戶模型的適配。這種分層設計實現(xiàn)了底層賬本和上層智能合約的完全解耦,也使 Qtum 后續(xù)兼容多種虛擬機(EVM,x86,WASM 等)成為可能。
AAL 要實現(xiàn)的工作其實很簡單:UTXO 模型賬戶模型。
由于篇幅有限,本文只對其基本原理和遇到的問題做簡要解釋,感興趣的讀者可以進一步閱讀《深度解析 Qtum 量子鏈賬戶抽象層》,文章從代碼層面對 AAL 進行了詳細剖析 。擴展比特幣腳本 ― UTXO 模型 -》 賬戶模型比特幣的 UTXO 模型采用了一套非圖靈完備的腳本語言,該腳本自帶的操作碼并不支持合約交易。Qtum 在比特幣腳本的基礎上增加了 3 個操作碼 :
1. OP_CREATE :創(chuàng)建智能合約
2. OP_CALL :調用智能合約 ( 向合約發(fā)送 QTUM)
3. OP_SPEND :花費智能合約中的 QTUM在產生新區(qū)塊時,除了對交易腳本做常規(guī)的檢查外,還需要檢查是否包含上述的操作碼。OP_CREATE 用于向 EVM 傳遞合約字節(jié)碼。OP_CALL 將 data、gasPrice、gasLimit、VMversion 等運行智能合約所需的關鍵參數(shù)通過交易腳本發(fā)送,最終傳遞到 EVM 中。OP_SEND 則用于合約執(zhí)行結果的 UTXO 轉換,稍后解釋。通過引入上述三個腳本,Qtum 的 UTXO 模型具備了識別和處理智能合約相關交易的能力。
02. 從 UTXO 獲取的合約如何在 EVM 中運行?
合約的執(zhí)行會引起狀態(tài)改變,對于合約的狀態(tài),Qtum 沿用了 EVM 的定義,所以能兼容所有的符合 EVM 規(guī)范的智能合約。從上述 OP_CREATE 或 OP_CALL 提取出合約交易參數(shù)之后,即可構建運行環(huán)境。合約的運行過程基本采用了 EVM 的引擎,為使其與 Qtum 區(qū)塊鏈進行正常交互,Qtum 完成了以下工作(這里只截取部分),供公鏈開發(fā)者參考 :
1. 針對每個獨立交易構建運行環(huán)境,最大限度的把不同交易的合約執(zhí)行過程隔離開,避免合約執(zhí)行過程中的交叉影響
2. 實現(xiàn) EVM 的永久存儲,當區(qū)塊成為孤塊或斷開時,可以實現(xiàn)狀態(tài)的回滾
3. 實 現(xiàn) EVM 和 Qtum 區(qū) 塊 鏈 間 的 接 口, 使 EVM 能夠獲取諸如 BLOCKHASH,COINBASE,DIFFICULTY,BLOCKNUMBER,GASLIMIT 等區(qū)塊基本信息 4. 實現(xiàn)已部署在鏈上的合約間的相互調用
5. 實現(xiàn)合約地址獲取自身余額的功能
6. 為 EVM 生成 debug 信息,方便調試智能合約
7. 重新設定各操作碼的 gas 價格,因為 QTUM 和 ETH 的價格差異較大,且 EVM 的 gas模型設計略不合理,因此需要重新優(yōu)化
8. 支持自毀操作碼,使合約可以自毀
9. ……
感興趣的讀者可以閱讀《Qtum 設計文檔》獲取更多設計方面的細節(jié)。在解決了上述問題之后,從 Qtum 交易傳入的智能合約代碼即可在 EVM 中成功運行了。該實現(xiàn)理論上適用于所有基于 UTXO 的項目。運行的結果會引起狀態(tài)改變,這時需要使用上述的 OP_SPEND 用于花費合約中的余額,上面已經提到,無論是比特幣還是 Qtum,都是通過私鑰”解鎖“ UTXO 腳本來花費 UTXO余額的,而 EVM 的執(zhí)行涉及不同賬戶之間的轉賬,所以需要通過 OP_SPEND 實現(xiàn)這些轉賬到 UTXO 模型交易的轉換,最終轉化為 Qtum 標準交易腳本(對比特幣交易腳本不熟悉的讀者建議閱讀《Mastering Bitcoin》)。
03、賬戶抽象層的安全性
上述的 UTXO 和賬戶模型的互相轉換雖然實現(xiàn)了 Qtum 區(qū)塊鏈與 EVM 的交互,但 AAL也引入了一個安全問題。由于合約地址本身也是一個 Qtum 的合法地址,并且底層都是UTXO 模型,這就意味著一個合約可以擁有多個 UTXO。這本身沒有問題,但卻給攻擊者提供了 DoS 攻擊的可能性。攻擊者可以通過給合約發(fā)送多個小額的 UTXO,然后一次性用 OP_SPEND 花費大量 UTXO,從而導致區(qū)塊大小超過限制,新區(qū)塊無法被接收,使得網絡無法產生新的區(qū)塊。這是 UTXO 與 智能合約相結合所帶來的必然問題。Qtum 的解決方案是在共識層面做優(yōu)化,規(guī)定合約地址只能擁有一個 UTXO。每次合約運行結束時,都會將原來的 UTXO 和新加入的 UTXO 進行合并,從而保證合約地址始終只有一個 UTXO。
Qtum 稱之為“Condensing transacTIon”。為了保證合約狀態(tài)以及 UTXO 的共識,Qtum 的區(qū)塊頭除了包含與比特幣相同的字段外,還需要額外加入 hashStateRoot 以及 hashUTXORoot 兩個字段,感興趣的讀者可以閱讀Qtum 的源碼。賬戶抽象層帶來的好處比特幣的 UTXO 模型相較于以太坊的賬戶模型有諸多優(yōu)越性,以太坊有一套圖靈完備的語言,可以實現(xiàn)比較復雜的智能合約邏輯。兩者都有強大的生態(tài)作為支撐,并且聚集了區(qū)塊鏈行業(yè)最優(yōu)秀的開發(fā)者。
Qtum 選擇不重復造輪子,而是在比特幣和以太坊的基礎上開發(fā)了賬戶抽象層 AAL,打通了兩個原本分離的生態(tài)。這一設計帶來的好處包括 :
1. 獲得與比特幣一致的穩(wěn)定底層基礎設施(UTXO);
2. 兼容比特幣后續(xù)所有包括性能上和安全性上的升級;(目前已同步升級到 0.16 版本,正在適配 0.17)
3. 兼容現(xiàn)有智能合約生態(tài),以太坊上的智能合約可以零成本遷移 ;(QRC-20,QRC-721等均兼容)
4. 比特幣和以太坊的開發(fā)者自動成為 Qtum 的開發(fā)者 ;
5. 兼容所有基于比特幣和以太坊虛擬機的技術,比如閃電網絡,雷電網絡,plasma,加密隱私,原子交換,分片等等 ;
6. 兼容以太坊上所有智能合約開發(fā)工具(當然有些需要做 RPC 的適配,Qtum 已經實現(xiàn)了這樣的適配),降低開發(fā)者學習成本。
04、小結
Qtum 首創(chuàng)的賬戶抽象層 AAL 實現(xiàn)了 UTXO 模型到賬戶模型的適配,從技術層面打通了比特幣和以太坊生態(tài),并未后續(xù)兼容多種虛擬機(如 x86,WASM)提供了可能,其設計思想和實現(xiàn)細節(jié)值得公鏈開發(fā)者參考。
PoS 共識機制 為什么需要挖礦?
說到共識機制,我們首先從字面上回顧一下什么叫“區(qū)塊鏈”,所謂區(qū)塊實際上是一段時間內交易的集合,每個區(qū)塊都有一個指向上一區(qū)塊的哈希指針,從而組成了一條鏈。所以簡單來說區(qū)塊鏈就是一個不可篡改的分布式數(shù)據(jù)庫,那為什么需要挖礦呢? 這里以 PoW 挖礦為例。
首先,區(qū)塊鏈主要分為 :公有鏈、私有鏈和聯(lián)盟鏈。它們的核心區(qū)別在于記賬權,公有鏈是去中心化的,賦予網絡上的每個節(jié)點記賬的權力,而私有鏈和聯(lián)盟鏈的記賬節(jié)點為少數(shù)幾個指定節(jié)點。
只有公有鏈才需要挖礦,其目的在于 :
1. 安全性:依靠區(qū)塊獎勵和手續(xù)費激勵節(jié)點記賬,去中心化地維護區(qū)塊鏈網絡的安全性
2. 隨機性:保證選出的記賬節(jié)點的隨機性,否則固定的記賬節(jié)點很容易被 DoS 攻擊,出現(xiàn)單點故障
3. 代幣分發(fā) :挖礦也是一個代幣分發(fā)的過程,從而把幣隨機地分發(fā)出去,而不是只在少數(shù)人手中
整個比特幣的精髓就在于它的激勵機制,但 PoW 共識機制也并非沒有問題,比如 :
? 加入網絡的門檻較高,當前需要花費很多錢買礦機才能成為比特幣的全節(jié)點進行挖礦,普通設備幾乎沒有機會 ;
? 越來越趨性中心化,大部分的挖礦所得被少數(shù)幾個大礦池占據(jù) ;
? 能源消耗巨大,礦機耗電甚至超過某些小國的耗電量(當然這些電量支撐起這么大的網絡并不算多,但我們應該尋找更好的方式替代)?;谶@些問題,2012 年時 Sunny King 提出 PoS(Proof-of-Stake,權益證明機制),其原理這里不做贅述,感興趣的讀者可以參考這篇文章。簡單來說,只要用戶持有該網絡的Token,就可以參與記賬。另外,代幣持有人作為利益相關者也更有動力維護網絡的安全。PoS 機制同樣也能達到比特幣的隨機性、安全性和代幣分發(fā)等功能,而且相比于 PoW 來說顯得更加去中心化(前提是代幣初始分發(fā)足夠分散)。中本聰在設計 PoW 共識機制時并 沒有想到會有礦機的出現(xiàn)從而使得比特幣越來越中心化,而 PoS 的挖礦根本不需要使用礦機,只需要一臺普通電腦、樹莓派就可以參與。
除此之外還有幾種共識機制比如 DPoS(代理權益機制)選出一些代理人來進行記賬。pBFT,dBFT 等則是改進后的拜占庭容錯機制解決方案。這幾個共識機制雖然效率較高,但都比較中心化的,容易導致一些中心化的問題。對于計算節(jié)點比較少的網絡,甚至一個節(jié)點掛掉都有可能導致整個網絡癱瘓,但這些在比特幣或者 Qtum 上都沒有發(fā)生過。
Qtum 項目出于去中心化程度和能源消耗方面的考慮,選擇采用 PoS 共識機制。
01、關于 PoS 的誤解
關于 PoS 共識機制,大多數(shù)人的理解還停留在其最原始的版本,即 PoS1.0。實際上 PoS 共識機制已經經歷過 3 次大的迭代 :
? PoS1.0 :依賴“幣齡”,長期不在線,雙花問題等 ;
? PoS2.0 :移除“幣齡”,增強安全性 ;
? PoS3.0 :針對“short-range”攻擊,采用區(qū)塊時間和交易時間確認 UTXO 的“年齡”。
“幣齡”這個概念其實早就從共識機制中移除,現(xiàn)在的 PoS3.0 系統(tǒng)已經可以解決很多初始版本遇到的安全性問題,甚至在抵抗 51% 攻擊上比 PoW 系統(tǒng)更具優(yōu)勢。
02、PoS + 智能合約帶來的問題
Qtum 沒有直接采用 PoS3.0,不是因為共識機制本身有問題,而是由于 PoS 和智能合約的結合可能帶來潛在的攻擊可能。攻擊者可以通過支付比較昂貴的 gas 發(fā)起一系列“垃圾合約”。雖然這將消耗很多的 gas,但由于礦工可以獲得交易中的 gas 作為獎勵,只要攻擊者的合約設計得當,就能保證其他節(jié)點無法正常處理該交易,而攻擊者則可利用先驗知識成為區(qū)塊的生產者,從而將攻擊成本全部收回,實現(xiàn)零成本的 DoS 攻擊。
但是為何現(xiàn)有用 PoS 共識機制的區(qū)塊鏈項目就不會有這個問題,因為它們大部分只支持非圖靈完備的腳本語言,無法支持上述的“垃圾合約”(實際上需要循環(huán)操作)。但是在Qtum 上既支持 PoS,又支持智能合約,使上述攻擊成為可能。
Qtum 的解決方案是 :通過和其他節(jié)點分享收益并將收益延遲化,增加攻擊的成本。Qtum 在 PoS3.0 的基礎上修改激勵返還機制,實現(xiàn)了 MPoS(Mutualized Proof-of-Stake)。
MPoS 的基本原理 :每個區(qū)塊獎勵由 10 個礦工平分,其余獎勵延遲 500 區(qū)塊。即 1/10 區(qū)塊獎勵立刻獲得,其余 9/10 獎勵在 500 個區(qū)塊之后連續(xù) 9 個塊中獲得。挖礦獎勵 = 區(qū)塊所得 + 手續(xù)費 + 運行智能合約 gas 費用。這個簡單改進在不改變 PoS3.0 的核心邏輯的前提下,使攻擊者無法預測獲得區(qū)塊獎勵的多少,也無法立即獲得區(qū)塊獎勵,從而極大提高了發(fā)動上述“垃圾合約”攻擊的成本(僅存在理論可能性,實際操作中完全無法實現(xiàn))。
03、PoS 的實現(xiàn)細節(jié)
Qtum 的底層代碼源于比特幣,其采用的是 PoW 共識機制。如何將 PoS 應用到其中,并進一步實現(xiàn) MPoS 呢?Qtum 團隊做了以下實現(xiàn),供公鏈開發(fā)者參考 ,實現(xiàn) PoS 區(qū)塊驗證和挖礦功能,具體細節(jié)如下 :
? 同時支持 PoW 和 PoS 區(qū)塊,因為在初始階段需采用 PoW 生成初始代幣,在一定高度后變?yōu)榧?PoS
? 每個區(qū)塊的 stake modifier 都會發(fā)生改變
? coinage(幣齡)不能改變 PoS 哈希值
? 交易費不會作為共識規(guī)則
? 需要最近的 500 個區(qū)塊用于驗證 PoS,這里區(qū)塊不宜太多,否則數(shù)據(jù)量太大難以處理
? 沒有幣齡概念,只需要幣達到一定的確認數(shù)(如 500 個區(qū)塊)就可以進行 PoS 挖礦
? 增加 PoS 相關的共識參數(shù):區(qū)塊簽名,區(qū)塊類型(PoW 還是 PoS),前一個 stake 位置,以及 staking 交易創(chuàng)建時間等
? 區(qū)塊出 coinbase 交易外(實際上 coinbase 交易已經沒有實際作用),還需要增加coinstake 交易,用于生成和分配區(qū)塊獎勵
? 接收區(qū)塊時要檢查區(qū)塊頭,因為處理 PoS 區(qū)塊時,需要處理重復哈希和孤塊問題
? Staker 只需要才成功發(fā)現(xiàn) stake 后才繼續(xù)處理交易,否則將導致交易被多次處理,特別是對于合約交易,多次處理可能會浪費大量時間,這點與 PoW 區(qū)塊的交易處理略有不同
? 由于 AAL 引入了智能合約,PoS 區(qū)塊的交易不僅需要估計交易本身自帶的 sigop 的大小,還需要考慮由于智能合約產生的“condensing 交易”所引入的額外交易,否則將導致有可能生成超過區(qū)塊大小限制的交易,影響系統(tǒng)安全性。
關于 MPoS 的實現(xiàn)細節(jié)包括 :
? 發(fā)送給 MPoS staker 的區(qū)塊獎勵必須來自于 staking 區(qū)塊 ? stake 交易必須包含至少 10 個輸出(outputs),1 個給區(qū)塊創(chuàng)建者,9 個給 MPoS staker
? stake 交易的第 1 個 10 個 outputs 是共識相關的,必須準確地按照 MPoS staker 挖礦的區(qū)塊高度正確地排列,且創(chuàng)建者為第一個 output
? stake 交易可以包含額外的 outputs,例如,將一個大的 staking UTXO 分成多個 UTXO,input 也可以包含多個輸入,比如講零散的 UTXO 自動合并成較大的 UTXO。在第 10個 output 后,對于 output 不應該有任何特殊的共識規(guī)則,只要交易的 output 值不會41超過輸入值 + 區(qū)塊獎勵 + 費用
? 前 500 個 PoS 區(qū)塊不使用 MPoS,因此區(qū)塊的創(chuàng)建者獲得全部的獎勵,不需要使用前面的規(guī)則
點擊閱讀原文查看,Qtum 原始設計文檔及源碼
04、小結
Qtum 是首個采用純 PoS 共識機制的智能合約平臺,并解決了其潛在的安全隱患。公鏈開發(fā)者在采用新的共識規(guī)則時應該首要考慮不同的技術組合帶來的安全性問題,不能完全照搬照套。
分布式自治協(xié)議
01、基本原理
區(qū)塊鏈治理要解決的是在一個去中心化網絡怎樣對軟件系統(tǒng)進行升級、迭代等等問題。比特幣之前分叉成 BTC 和 BCH,分歧僅在于區(qū)塊的大小(當然這背后包含很多利益糾葛,但技術上只是一個參數(shù)的分歧),正因為比特幣是一個沒有完整鏈上治理機制的去中心化網絡,所以導致這個爭論持續(xù)了很長一段時間。又比如 BCH 分叉的算力之爭。
分叉并不能說是絕對意義上的壞事,但基本的區(qū)塊鏈參數(shù)完全可以在無分叉的情況下實現(xiàn)升級,因此 Qtum 設計了 DGP(Decentralized Governance Protocol,分布式自治協(xié)議)。
影響分叉的因素大致可分為以下三類 :
? 算法、功能的改變:共識算法、加密算法、交易腳本、虛擬機
? 策略、參數(shù)改變:區(qū)塊大小、出塊時間、交易數(shù)量、Gas 策略
? 關鍵漏洞的修復、回滾:DAO、Parity 多重簽名錢包
策略方面的的因素其實是最容易達成共識的,另外兩類有時必須通過分叉來解決。DGP 本身的框架是通過若干部署在創(chuàng)始區(qū)塊的智能合約來實現(xiàn)的,其基本的治理結構是這樣,在整個社區(qū)內部的礦工、區(qū)塊生成者和持有者都是區(qū)塊鏈治理的參與者,通過投票去完成治理的過程。最終讓區(qū)塊鏈能夠實現(xiàn)自我管理、升級和迭代的系統(tǒng)。
02、DGP 實現(xiàn)
DGP 的實現(xiàn)需要某種可編程技術,UTXO 和 EVM 其實都提供了這種特性,所以理論上有兩種實現(xiàn)方式 :
? 一是基于比特幣交易腳本,通過在交易腳本上實現(xiàn)協(xié)議邏輯。然而由于比特幣腳本非圖靈完備,這種實現(xiàn)會比較復雜
? 二是基于智能合約,具有圖靈完備的可編程能力,可以靈活實現(xiàn)復雜的邏輯。Qtum 選擇了后者。DGP 核心邏輯的實現(xiàn),是由一系列的智能合約(包括框架合約,特性合約)組成。
DGP 框架合約實現(xiàn)以下功能 :
? 提案和投票 :每個參數(shù)改變包括內部治理席位管理需要先被提議,然后對它進行投票。如果投票符合所選擇的條件,則該提議被接受,并執(zhí)行該操作。投票使用“msg.sender”計算,這樣公鑰哈希地址或合約地址都可以作為參與者參與投票
? 治理席位管理 :可以添加和刪除參與者,也可以修改治理席參數(shù),比如一個提案被接受需要多少個治理席位同意,添加一個治理席位需要多少個治理席位同意等等
? 發(fā)送正確格式的數(shù)據(jù)給 DGP 特性合約
? 允許自己被禁用,這樣在不使用硬分叉的情況下就不能進行進一步的 DGP 修改(防止重大的漏洞或問題)
? 一次只允許一個提案,提案只能由參與者提出。每個提案的有效期不超過 5000 個區(qū)塊。每個提案在到期后,或者在投票結束后,完全可以拒絕或者批準。
? (可選功能)維護管理員的列表,管理員可以刪除提案,管理員也可以是唯一允許添加提案的人。
DGP 特性合約則更簡單,它只需要完成以下兩件事情 :
1. 只從合適的 DGP 框架合約接收信息 / 數(shù)據(jù)(使用 msg.sender )
2. 使用“SSTORE”以一種標準化的形式存儲共識數(shù)據(jù),以便區(qū)塊鏈在不運行 EVM 的情況下就能在 RPL 中檢索和解析該數(shù)據(jù)。區(qū)塊鏈核心代碼在共識過程中執(zhí)行協(xié)議的智能合約,獲得當前的共識狀態(tài)。同時它能通過TransacTIon 完成區(qū)塊鏈網絡的狀態(tài)轉換,升級無需區(qū)塊鏈網絡軟件更新。
理論上,采用了圖靈完備的智能合約可以實現(xiàn)任意復雜度的協(xié)議設計,甚至是區(qū)塊鏈的核心協(xié)議,如共識部分的代碼等;權衡效率和安全性方面考慮,當前協(xié)議僅適用于在安全范圍內對特定參數(shù)進行更改,同時對參數(shù)生效時間采取一定的時間限制。
未來 DGP 可以不斷迭代,實現(xiàn)更多更復雜的治理?;氐骄唧w實現(xiàn),創(chuàng)世塊嵌入了常見的區(qū)塊鏈參數(shù)治理的智能合約,每個治理的主題都由獨立的框架合約控制 ( 模板 ),這意味著每個功能有獨立的治理、授權機制以及內置限制條件 Block size, Min GasPrice, Block GasLimit, Gas Schedule。
此外 DGP 合約還具備自毀功能,能在提案治理上發(fā)生意外時啟動,治理參數(shù)退回到默認狀態(tài)。
03、小結
鏈上治理往往是公鏈開發(fā)者容易忽略的一環(huán),然而其實際上非常重要,是去中心化網絡后續(xù)升級迭代的重要基礎設施。Qtum 的分布式自治協(xié)議是行業(yè)內真正意義上的鏈上治理機制,其設計思想可以引入到很多其他項目中。
Qtum x86 虛擬機
01、Qtum 已經兼容 EVM,為何還需要 x86VM ?
雖然 EVM(以太坊虛擬機)是當下最流行的智能合約虛擬機,但正如絕大多數(shù)新生事物一樣(比如 Javascript),它存在諸多缺點。并且由于它的設計比較非主流,很難有主流的 編程語言能夠移植到 EVM 上。這種設計可以說對于近50年來的大多數(shù)編程范例來說都不太友好。這里羅列一些其明顯的缺點(詳細描述可以參考這篇分析):
? 編程語言局限性(Solidity)
? 缺少標準庫
? 256bit 整數(shù),大部分處理器不能原生支持,運行效率降低 ? Gas 模型不合理,難以估計 Gas 消耗
? 生成的 bytecode 較大,浪費區(qū)塊存儲資源
? 難以測試和調試
02、Qtum-x86 虛擬機的設計目標
正因為 EVM 存在諸多缺陷,Qtum 決定開發(fā)自己的虛擬機。x86 虛擬機兼容了被工業(yè)界充分驗證過的 x86 指令集,對基于 x86 架構之上的所有技術和基礎設施都有很好的兼容性。
Qtum-x86 的基本特性包括 :
? 支持多種主流編程語言 : C/C++/Go/Rust 等等
? 豐富的標準庫,提高開發(fā)效率
? 更加優(yōu)化的 Gas 模型 :為標準庫函數(shù)設定合理的 gas 模型,可以準確估計 Gas 消耗
? 解鎖 AAL 的強大功能 : 支持合約的 P2SH 交易,segwit 交易等
? 馮 · 諾依曼結構,加強版的智能合約 : 代碼即數(shù)據(jù),多任務協(xié)作,支持中斷和恢復
? 第一類預言機 :無需運行合約即可獲得某些合約數(shù)據(jù)
? 區(qū)塊鏈動態(tài)分析 :更全面地分析區(qū)塊鏈狀態(tài)
? 選擇性數(shù)據(jù)存儲 :節(jié)省寶貴的區(qū)塊鏈上資源
? 清晰的依賴關系樹 :有可能并行運行智能合約,降低 gas 費用由于Qtum-x86 還沒正式發(fā)布,其具體設計文檔暫時無法透入太多細節(jié)。但其設計目標的描述可以參考這篇文章。
03、小結
Qtum 的賬戶抽象層使兼容多虛擬機,使集成 x86 成為可能。未來 Qtum 將同時支持多種 虛擬機,充分發(fā)揮不同虛擬機的優(yōu)勢。虛擬機是支持智能合約的區(qū)塊鏈系統(tǒng)不可或缺的部 分,Qtum 的 x86 虛擬機無論從設計上還是實現(xiàn)上都對公鏈開發(fā)者有極大的參考價值。其 發(fā)布后也可輸出到其他區(qū)塊鏈項目中。
Qtum 的可擴展性
上面已經介紹了 Qtum 區(qū)塊鏈的底層設計和實現(xiàn)。由于 Qtum 兼容 UTXO 以及 EVM,使得很多已有的區(qū)塊鏈相關技術都能夠很容易地移植到 Qtum 上,這些都得益于 Qtum 優(yōu)秀的架構設計。
下面的一些技術已經成功在 Qtum 上實現(xiàn),感興趣的讀者可以在 https://github.com/ qtumproject 上查看所有實現(xiàn)細節(jié)。
? Qtum 閃電網絡
? Qtum 支付通道
? Qtum-IPFS
? Qtum-Plasma
? qtumjs
? QRC20,QRC721 等(與 ERC20,ERC721 保持一致)
? Qmix(類似 Remix)
? Qrypto (類似 metamask)
總結
Qtum 是首個建立在 UTXO 模型之上,采用 PoS 共識機制和去中心化治理模式,且兼容多 45 虛擬機的智能合約平臺和價值傳輸網絡。
1. Qtum 創(chuàng)新性的賬戶抽象層打通了以比特幣為代表的 UTXO 以及以以太坊為代表的智 能合約生態(tài),兼容大部分主流區(qū)塊鏈項目的技術,可擴展性極高
2. Qtum 采用了 PoS 共識機制,在保證去中心化的前提下解決了 PoW 固有的能源消耗問題,并在此基礎上進一步提高安全性,支持靈活的智能合約
3. Qtum 提出的分布式自治協(xié)議完成了去中心化鏈上治理,實現(xiàn)無分叉的區(qū)塊鏈升級,未來可應用于更多場景
Qtum-x86 虛擬機支持主流的 x86 指令集,將主流語言和主流開發(fā)工具引入到智能合約,開發(fā)領域,大大降低了智能合約和 DApp 開發(fā)的門檻
4. Qtum 作為較早上線的主鏈,是典型的結合了區(qū)塊鏈領域多種主流技術,并包含多項技術創(chuàng)新的公鏈項目,其良好的擴展性可以支撐后續(xù)技術迭代,同時也為其他公鏈項目的開發(fā)提供了良好的范本,其 AAL,DGP,x86 虛擬機等都可以適配到其他公鏈項目,對公鏈開發(fā)者來說是很好的參考。