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