即Qtum量子鏈開發者meetup——深圳站演講實錄
作者:鍾文斌
今天我們將就以下幾個主要的問題來進行探討:
1. 為什麼要建立Qtum量子鏈
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量子鏈也會為他們提供一些技術支援和經濟支援。謝謝大家!