Qtum量子鏈關鍵技術解讀

即Qtum量子鏈開發者meetup——深圳站演講實錄html

做者:鍾文斌git

今天咱們將就如下幾個主要的問題來進行探討:github

1. 爲何要創建Qtum量子鏈web

2. Qtum量子鏈的技術基礎算法

3. Qtum量子鏈的技術創新數據庫

4. Qtum量子鏈的生態系統編程

1.爲何要創建Qtum量子鏈

首先不少熟悉區塊鏈的開發者朋友確定會有這樣的疑惑,咱們已經有了比特幣和以太坊爲何還要創建Qtum量子鏈呢?若是要給Qtum量子鏈一個定義的話,我我的的理解是:Qtum量子鏈是首個基於UTXO模型,並採用PoS共識機制的智能合約平臺。其中包含了三個概念:UTXO模型、共識機制PoS還有智能合約平臺,稍後我會對他們一一進行詳解。瀏覽器

Qtum量子鏈項目從2016年3月就已經開始籌劃和執行,2017年6月時發佈了初版測試網絡,2017年9月時主網正式上線,因此Qtum量子鏈在產品的更新迭代方面仍是比較快的。另外Qtum量子鏈也能夠說是站在了巨人的肩膀上,結合一些成熟的區塊鏈生態的優點,稍後也會解釋。安全

先來看一下Qtum的一些基本參數,區塊大小:2MB;出塊時間:128秒;共識機制: MPoS;網絡

鏈上理論最大TPS: 70~100 筆交易/秒;初始發行量:100,000,000 QTUM;當前挖礦獎勵:4 QTUM,每四年減半;挖礦獎勵總額:約 7,884,000 QTUM;基礎代碼框架:比特幣Bitcoin core;支持以太坊虛擬機EVM。

關於Qtum的設計理念,不得不提比特幣和以太坊。首先要簡單解釋一下這二者,比特幣是點對點的電子貨幣系統,它主要考慮的是貨幣屬性,所以會主要考慮安全、穩定、去中心化以及存儲、傳輸價值的特性。此外,從安全性方面考慮,比特幣腳本被設計成非圖靈完備的。做爲數字貨幣,比特幣其實是比較成功的,從2009年至今,並無出現過任何一筆錯帳。但除此以外,你很難再在比特幣之上創建複雜應用,由於它從設計之初就僅僅考慮了其貨幣屬性。

而以太坊則是目前全球第二大的區塊鏈生態,是以平臺的角度去設計的。平臺必須可以保證其可擴展性和TPS,從而支持成千上萬種DApps。它同時也是個智能合約平臺,有用於執行智能合約的環境,好比EVM, x86VM。同時以太坊也須要有合理的經濟模型激勵開發者,從而促進生態發展。做爲平臺,多樣性、隱私性(不受網絡中其餘應用的影響)也是須要考慮的問題。以太坊有一套圖靈完備的語言,簡單說來就是能夠支持循環,從而能夠實現比較複雜的智能合約邏輯。

以太坊做爲一臺平臺可能並不那麼成功,首先它的TPS 不夠高。舉個簡單的例子以前在以太坊上有個應用叫雲擼貓,就把以太坊給搞宕機了。在安卓系統上你很難想象一個應用會由於另外一個應用得影響而遭殃,可是在區塊鏈上這種多是存在的。就比如雲擼貓,TPS都被用於擼貓,那麼正常的交易就沒法被保證了。以太坊做爲一個智能合約平臺,它得智能合約功能的確是能支持一些簡單的邏輯,可是編程語言僅僅侷限於Solidity(還有幾種語言基本無人使用),而不是你們比較熟悉得主流編程語言,因此在這一點上有所欠缺。

比特幣和以太坊各有優缺點,但做爲全球最大的兩個區塊鏈生態,它們是相互獨立的,沒有太多交集。Qtum設計的初衷是但願打通比特幣和以太坊這兩大生態,使開發者既能享受到貨幣的穩定性和安全性,又能具有去中心化應用平臺的便利。根據開源軟件思想,Qtum量子鏈決定不重複造輪子,取比特幣和以太坊的精華並在此基礎上繼續演進。

在此以前,在比特幣上運行圖靈完備的腳本語言是不可能的,因此Qtum創建了一個邏輯上的抽象層使之成爲分層的結構也就是AAL帳戶抽象層。還有就是目前全部的公有鏈的通病在於治理協議比較混亂,所謂的治理協議其實就是軟件的升級和迭代。在中心化的公司或者平臺好比App store上面開發者只要把更新好的App上傳供用戶下載就能夠了,可是在去中心化的系統上就不同了。一個用戶要對軟件進行更新,其餘人不必定會支持,那麼就須要一個治理協議去決定整個生態應該如何進行治理。Qtum量子鏈對這個問題有本身的想法,也就是DGP分佈式治理協議,可以自行對區塊鏈參數進行動態調整而沒必要進行硬分叉,實現了區塊鏈的自治。

從共識角度來講,咱們知道比特幣和以太坊所使用的都是PoW共識機制,優勢你們很清楚就不贅述了,可是缺點一樣突出那就是對能源消耗巨大。好比礦機很是耗電,這些電力也成爲了比特幣的挖礦成本。因此Qtum量子鏈使用的使PoS共識機制做爲更好的替代方案,其實它已經被提出好久的時間,目前Qtum用到如今通過不少次迭代也運行良好。另一個使用PoS的緣由是移動設備和物聯網設備上很難實現PoW。另外正如以前提到的以太坊虛擬機僅支持Solidity這個比較冷門、年輕的語言,有多少開發者會去爲了智能合約的編程再去從新學習一門全新的語言?因此Qtum目前在研發x86虛擬機,能讓大部分開發者用熟悉的主流編程語言好比C、C++更簡單地開發智能合約。這樣就能大大提升社區內開發者的工做效率,讓更多去中心化應用可以落地。

2. Qtum量子鏈的技術基礎

首先是UTXO模型,英文是Unspent Transaction Output(未花費的交易輸出)。咱們來看一下比特幣和以太坊網絡上的兩個典型交易。以太坊上的交易對於普通人來講相對好理解,就是從一個地址到另外一個地址,一筆Token的傳輸。而比特幣交易就沒那麼簡單了,它是由若干個input和output組成的,Output當它未被花費的時候就是UTXO,將成爲下一筆交易的輸入。因此全部比特幣網絡上的交易都是由input和output串聯起來的。UTXO的可取之處在於:

l 安全性 (解決雙花問題,支持原生多重簽名)

l 匿名性 (擁有多個地址,找零地址)

l 可擴展性(並行,離線交易)

l 輕錢包 (SPV,支持移動端驗證交易的合法性)

目前除了Qtum之外基於UTXO模型的各類幣的底層腳本語言都不是圖靈完備的,,因此Qtum量子鏈纔會開發帳戶抽象層AAL使UTXO模型與以太坊虛擬機帳戶模型可以無縫交互。

再來講一下共識機制的問題,首先回顧一下什麼叫區塊鏈,剛纔提到交易,接下來用戶對每一筆交易進行簽名以保證其安全性,擁有私鑰才能花費一筆資產。每十分鐘內的全部交易被打包爲區塊,每一個區塊中全部交易的組織形式爲Merkle樹(https://zhidao.baidu.com/question/1047592469520906459.html),它是一個二叉樹,每一個葉子節點都表明一筆交易,而非葉子節點均爲其子節點的哈希值,任何一筆交易被篡改都會影響根節點的哈希值。最後,每一個區塊都有一個指向上一區塊的哈希指針。因此簡單來講區塊鏈就是一個不可篡改的分佈式數據庫,那爲何須要挖礦呢?這裏以PoW挖礦爲例。首先,區塊鏈主要分爲:公有鏈、私有鏈和聯盟鏈。它們的核心區別在於記帳權,公有鏈是去中心化的,賦予網絡上的每一個節點記帳的權力,而私有鏈和聯盟鏈的記帳節點爲少數幾個指定節點。只有公有鏈才須要挖礦,由於要維持節點不斷地在網絡上記帳,那麼挖礦就成了網絡對記帳節點的激勵機制。依靠區塊獎勵鼓勵節點記帳,共同維護區塊鏈網絡的生態。那爲何你們挖礦用戶也要去監聽記錄別人的交易呢?由於手續費也會做爲區塊獎勵。挖礦的另外一個緣由了保證記帳節點的的隨機性,不然固定的記帳節點很容易被DoS攻擊。另外,挖礦也是一個代幣分發的過程,從而把幣隨機地分發出去,而不是隻在個別人手中。整個比特幣的精髓就在於它的激勵機制,但PoW共識機制也並不是沒有問題,好比:

l 加入網絡的門檻較高,須要花費不少錢買礦機才能成爲比特幣的全節點進行挖礦

l 愈來愈趨性中心化,大部分的挖礦所得被少數幾個大礦池佔據

l 能源耗費巨大

基於這些問題,2012年時有人提出PoS(權益證實機制),原理很簡單,只要用戶擁有該網絡的Token並證實這一點,就能夠參與記帳。另外,代幣持有人也更有動力維護網絡的安全。PoS機制一樣也能達到比特幣的隨機性、安全性和Token分發等功能,並且相比於PoW來講顯得更加去中心化。中本聰在設計PoW共識機制時並無想到會有礦機的出現從而使得比特幣愈來愈中心化,而PoS的挖礦根本不須要使用礦機,只須要一臺普通電腦、樹莓派就能夠參與。

除此以外還有幾種共識機制好比DPoS(代理權益機制)選出一些代理人來進行記帳。pBFT,dBFT等則是改進後的拜占庭容錯機制解決方案。上述幾個共識機制都是相對比較偏中心化的,比較容易致使一些中心化的問題或者被攻擊。像某些網絡的計算節點比較少,一些節點掛掉就會致使整個網絡癱瘓,但這些在比特幣或者Qtum上都沒有發生過。

第三個技術基礎就是智能合約,簡單來講就是能夠在區塊鏈上運行且達成共識的一段代碼。以太坊是目前最流行的智能合約平臺,目前以太坊虛擬機也是惟一一個能夠真正意義上運行智能合約的虛擬機,可是它卻有很多缺點:

l 移動端不友好

l solidity等少數語言,具備侷限性

l 安全性(DAO,Parity)

第四個技術基礎是去中心化網絡。只有在去中心化的網絡上Token纔有它的價值,不然就跟Q幣沒什麼區別,只能在騰訊的體系內使用而並不會有什麼價值的提高。說了去中心化那麼多好,也來談談它的缺點。在分佈式領域有個CAP理論也就是一致性、可用性和分區容忍性不能同時知足。因此去中心化的程度與TPS是有矛盾的,去中心化程度越高越難達成共識,那就很難再很短期內達到交易的確認。因此若是用戶但願追求比較高的TPS,那必然會犧牲去中心化。但若是真的想要二者兼得,則要藉助分層網絡來實現,閃電網絡、雷電網絡這些技術都可以用來實現較高的TPS。比特幣上的閃電網絡和以太坊的雷電網絡目前都在開發中且發佈了測試版。而Qtum量子鏈由於可以兼容這兩個生態,因此往後這兩個技術開發完備以後Qtum也都能使用。

3. Qtum量子鏈的技術創新

首先是AAL帳戶抽象層,由於Qtum量子鏈兼容兩種生態,UXTO模型不支持智能合約功能,因此咱們須要帳戶抽象層的上層兼容以太坊虛擬機編寫智能合約。這種分層設計可以讓上層的應用層和底層相互解耦,Qtum設計的抽象層使上下層可以通訊適配。

至於如何實現實際上是在比特幣腳本中增長3個新的opcode:OP_CREATE:建立智能合約、

OP_CALL:調用智能合約(向合約發送QTUM)以及OP_SPEND:花費智能合約中的QTUM。這樣一來比特幣底層就能夠識別上述三種操做,並將他們做爲信號發送給上層的以太坊虛擬機,使其在運行智能合約的同時也能將一些信息反饋回底層。

因此對於開發者來講,這仍是一個比較容易理解的帳戶模型,而它的底層仍是跑在UTXO這樣一個比較安全的模型上的。帳戶抽象層的優點以下:

l 容許EVM在UTXO模型上運行

l 兼容多種虛擬機(不只是以太坊虛擬機,還有目前以太坊,eos正在研發的webassembly和將來Qtum的 x86虛擬機)

l 底層具備比特幣的安全性

l 智能合約開發者只須要關注「帳戶模型」

l 解除底層協議與上層應用的耦合

這裏我想再強調一下PoS共識機制,它一共經歷了3次大的迭代:

l PoS1.0:依賴「幣齡」,長期不在線,雙花問題

l PoS2.0:移除「幣齡」,加強安全性

l PoS3.0:針對「short-range」攻擊,採用區塊時間和交易時間確認UTXO的年齡

想解釋一下爲何Qtum沒有用PoS3.0,由於它存在一個問題,攻擊者能夠經過支付比較昂貴的gas發起一些惡意的智能合約從而傷害到整個網絡。剛剛也提到礦工是能夠得到transaction中的gas做爲獎勵的,那也就是說這些攻擊者可以將他們用於攻擊的gas所有收回,那麼他們就能夠不斷地進行攻擊。

可是爲什麼現有用PoS共識機制的區塊鏈項目就不會有這個問題,由於它們大部分只支持非圖靈完備的腳本語言,可是在Qtum上既要保證PoS,又要可以調用智能合約有可能出現這個問題。因此Qtum的解決辦法就是:經過和其餘節點分享收益並將收益延遲化,增長攻擊的成本。換句話說,攻擊的成本若是能很快還給攻擊者,那麼他會不斷進行攻擊,但若是延遲五個小時再還給他,那麼勢必能有效下降攻擊的頻率,讓攻擊者要花上不少倍的成本進行攻擊。

接下來我再解釋一下咱們的MPoS機制,它基於基於PoS 3.0: 修改激勵機制,每一個區塊所得10人平分,其他獎勵延遲500區塊。1/10 獎勵馬上得到,其他9/10獎勵在500個區塊以後連續9個塊中得到。挖礦獎勵 = 區塊所得+手續費+運行智能合約gas費用。這是Qtum在激勵機制上作的一個簡單的改進,可是效果仍是不錯的。

不少朋友確定會比較關心如何進行Qtum的挖礦,其實很是簡單,只要你擁有必定數量的Qtum,下載Qtum錢包,把Qtum打入Qtum錢包,等待500個區塊確認以後,只要錢包是未加密狀態你就能夠開始挖礦了。這其實幣比特幣的挖礦要簡單地多,一臺PC就能夠搞定,你也可用用樹莓派等設備或者其餘帶有Qtum節點的物聯網設備上進行挖礦。

比特幣目前全球的全節點大約是12000個,以太坊接近20000,而Qtum運行了6個月到如今已經擁有了3000多個全節點,分佈在全球各地。正式由於進入的門檻低,因此纔會有那麼多的節點。全節點數量和網絡的去中心化程度是成正比的。

下一個Qtum量子鏈的技術創新是DGP分佈式自治協議,治理咱們以前有提到,在一個去中心化網絡怎樣對軟件系統進行升級、迭代等等問題。比特幣以前分叉成BTC和BTH,分叉的分歧就僅僅於區塊大小問題,正由於比特幣是個去中心化網絡因此致使這個爭論持續了很長一段時間。分叉並不能說是絕對意義上的壞事,但咱們認爲爲了這個問題爭論了那麼久、浪費如此多的口舌是挺沒有意義的。影響分叉的因素分爲如下三類:

l 算法、功能的改變(共識算法、加密算法、交易腳本、虛擬機)

l 策略、參數類(區塊大小、出塊時間、交易數量、Gas策略)

l 關鍵漏洞(DAO、Parity多重簽名錢包)

策略方面的的因素實際上是最容易達成共識的,另外兩類有事必須經過分叉來解決。而好比區塊大小的改變並不必定須要經過分叉來進行。因此Qtum就考慮是否能讓區塊鏈進行無縫的升級,分佈式自治協議DGP就是這麼來的。其實它自己也是經過智能合約來實現的,其基本的治理結構是這樣,在整個社區內部的礦工、區塊生成者和持有者都是區塊鏈治理的參與者,經過投票去完成治理的過程。最終讓區塊鏈可以實現自我管理、升級和迭代的系統。

那麼Qtum分佈式自治協議技術選擇有兩種:自治協議的實現須要某種可編程技術,UTXO和EVM提供這種特性。一是基於交易腳本,經過在交易腳本上實現協議邏輯,非圖靈完備,實現比較複雜。二是基於智能合約,具備圖靈完備的可編程能力,能夠靈活實現複雜的邏輯。

自治協議核心邏輯的實現,是由一系列的智能合約組成,區塊鏈核心代碼在共識過程當中執行協議的智能合約,得到當前的共識狀態。同時它能經過Transaction完成區塊鏈網絡的狀態轉換,升級無需區塊鏈網絡軟件更新。出於安全性考慮,智能合約本質是一段代碼。理論上,採用了圖靈完備的智能合約能夠實現任意複雜度的協議設計,甚至是區塊鏈的核心協議,如共識部分的代碼等;權衡效率、安全等;當前協議僅適用於在安全範圍內對特定參數進行更改,同時對參數生效時間採起必定的時間限制。而參數的更改提案經過後,在必定數量的區塊後生效,避免產生可能分叉。

在合約部分:創世塊嵌入了常見的區塊鏈參數治理的智能合約,每一個治理的主題都由獨立的智能合約控制(模板),這意味着每一個功能有獨立的治理、受權機制以及內置限制條件Block size, Min GasPrice, Block GasLimit, Gas Schedule。此外DGP合約還具有自毀功能,能在提案治理上發生意外時啓動,治理參數退回到默認狀態。

最後咱們再來講一下Qtum x86虛擬機,以太坊虛擬機的缺點不少,以前也提過,再羅列一下:

l 編程語言侷限性(Solidity)

l 缺乏標準庫

l 256bit整數,大部分處理器不能原生支持,運行效率下降

l Gas模型不合理,難以估計Gas消耗

l 生成的bytecode較大,浪費區塊存儲資源

l 難以測試和調試

那麼針對以太坊虛擬機的這些弊端呢,咱們Qtum正在設計x86虛擬機,設計目標以下:

l 支持多種主流編程語言: C/C++/Go/Rust 等等

l 豐富的標準庫,提升開發效率

l 更加優化的Gas模型 -- 爲標準庫函數設定合理的gas,便於估計,利用DGP

l 解鎖AAL的強大功能 – 合約P2SH交易,segwit

l 馮·諾依曼結構,增強版的智能合約 – 代碼即數據,多任務協做,中斷和恢復

l 第一類Oracles – 無需運行合約便可得到某些合約數據

l 區塊鏈動態分析 -- 更全面地分析區塊鏈狀態

l 選擇性數據存儲,節省寶貴的區塊鏈上資源

l 清晰的依賴關係樹,有可能並行運行智能合約,下降gas費用

到這裏,咱們技術創新方面也就介紹到這裏了。咱們的slogan是「從新定義區塊鏈經濟」,讓不一樣種類的應用可以快速落地,這也反映了咱們Qtum團隊真正想讓區塊鏈技術快速會滲透到人們的生活中去。

4. Qtum量子鏈生態系統

Qtum目前的生態系統對於在座各位更多的是如何去體驗,咱們的桌面錢包能夠支持:

收發QTUM、收發QRC20 Token、智能合約交互、調用智能合約、部署智能合約、發Token

和PoS挖礦,這是咱們比較主要的一個錢包,幾乎擁有一切功能。另外就是手機移動端錢包,Qtum的一個優點就在於你能夠在手機端收發Token,只須要花上20秒。你一樣也可使用它發行Token和crowdsale。上述的這一切在網頁版錢包中也是能夠實現的,它甚至能夠從其餘客戶端恢復錢包和發送離線交易。

那比較注重安全性的用戶會比較傾向於使用冷錢包,也就是硬件錢包。那用的比較多的好比Ledger錢包也是能夠支持Qtum的,而且能夠配合Electrum使用。Qtum Electrum是能夠支持多重簽名輕錢包,也一樣可以支持Qtum的收發和智能合約,並且還可鏈接硬件錢包。

另外一個就是區塊鏈瀏覽器,能夠說它是區塊鏈世界的入口,在上面能夠查詢到區塊記錄、追溯每一個區塊的出塊時間、大小、還有交易時的ID等等。

除了這些,對於Qtum感興趣的朋友能夠去查看如下連接,全部的資源都是開源的,若是你們有一些比較細節的問題,在這裏也能夠找到詳細的答案:

Qtum官方開源倉庫:https://github.com/qtumproject

Qtum開發者指南:https://github.com/qtumproject/qtumbook

Qtum百科:https://github.com/qtumproject/qtum/wiki

Qtumjs:https://github.com/qtumproject/qtumjs

非官方Qtum Web.js:https://github.com/bodhiproject/qweb3.js

最後呢Qtum的生態系統發展到如今已經擁有超過50個去中心化應用了,其中幾個比較具備表明性的像預測市場菩提、還有清潔能源的交易解決方案Energo等。這些項目就不一一介紹了,你們有興趣也能夠登錄http://eco.qtum.org,更加鼓勵你們投入到Qtum的網絡上開發本身的去中心化應用。

5. 總結:

今天我分享了關於Qtum量子鏈的一些設計理念或者技術創新等,在座各位必定也有不少想法,若是你是認同這些觀點的,那你必定是自然的Qtum開發者,歡迎你們上Github爲咱們的底層技術作些貢獻,也會得到比較豐厚的回報。固然也會有人不認同咱們的觀點,好比你認爲去中心化沒用,TPS反而更重要或者PoW纔是最佳共識機制。咱們的社區也一樣歡迎相似的開發者以質疑的態度作一個全新的產品。說這些是想告訴各位Qtum的社區對任何開發者都會秉持開放的態度,只要開發者是真心願意去爲整個區塊鏈生態作一些努力和開發工做,Qtum量子鏈也會爲他們提供一些技術支持和經濟支持。謝謝你們!

相關文章
相關標籤/搜索