?

基于以太坊的分層區塊鏈架構研究

2020-09-09 03:09黃振業
計算機應用與軟件 2020年9期
關鍵詞:以太比特合約

黃振業 蘇 波

1(浙江金融職業學院信息技術學院 浙江 杭州 310018)2(北京魔鏈科技有限公司 北京 100080)

0 引 言

2008年11月,有人以中本聰(Satoshi Nakamoto)為化名發表了一篇研究論文[1],介紹了一種名叫比特幣(Bitcoin)的新型電子現金系統。這種全新的數字貨幣具有使用方便、難以追蹤等特性,它組合了密碼學、工作證明和點對點網絡等技術[2],創新地提出了一種分布式時間戳服務器,可用于分布式系統中數據的有序存儲,這項技術在之后被稱為“區塊鏈”(Blockchain)[3]。世界各地的一些計算機愛好者利用設備和特殊軟件進行“挖礦”,并形成一個網絡來共同維持區塊鏈。經過幾年的發展,人們發現其潛力遠不止電子貨幣。以2015年10月英國《經濟學人》雜志發表的《信任的機器》(The Trust Machine)的封面文章為標志,大家意識到作為比特幣底層技術的區塊鏈,其價值甚至超過了比特幣本身的價值。

比特幣被稱為區塊鏈1.0,因為比特幣本身只是區塊鏈技術在金融領域的一個應用,并沒有太多辦法在其上開發其他去中心化的應用。2015年初,被稱為區塊鏈2.0的以太坊的第一個版本面世了。以太坊是一個去中心化區塊鏈應用的開發平臺,它對比特幣區塊鏈的一個最主要的增強是引入了圖靈完備的智能合約,開發者可以編寫智能合約代碼來實現其行業內在的業務邏輯,這為應用區塊鏈技術解決行業問題打開了廣闊的空間。

1 問 題

隨著區塊鏈技術在傳統行業中的大量應用,現有區塊鏈平臺的局限逐漸暴露出來,人們發現以太坊在實際行業應用落地中面臨著諸多問題。

在分布式系統領域有一個帽子(CAP)理論:一個分布式系統不可能同時實現一致性(Consistency),可用性(Availability)以及分區容忍性(Partition Tolerance)。它可滿足其中任意兩個要求,但不能同時滿足三個。對應在區塊鏈工程技術領域,也有一個“不可能三角”:完全去中心化、安全性和可擴展性,三者不可以兼得。如圖1所示。

(1) 完全去中心化(Fully Decentralized):網絡中在邏輯上不存在單個或多個中心節點。

(2) 安全性(Security):網絡是否存在被惡意攻擊導致癱瘓、區塊被篡改的可能性。

(3) 可擴展性(Scalability):可以通過增加計算資源等方式有效提高網絡的吞吐能力。

圖1 區塊鏈“不可能三角”

比特幣和以太坊做到了完全去中心化和安全性,所以可擴展性(效率)很差,比特幣的交易處理能力約為7 TPS,以太坊的交易處理能力大約為15 TPS,并且無法通過擴展服務器數量和計算能力來提高。

2 分 析

既然區塊鏈技術領域存在一個無法突破的“不可能三角”,那么怎樣在工程領域突破這個理論限制,讓區塊鏈技術可以在更廣闊的空間里得到應用?目前存在以下幾種探索的思路。

2.1 部分犧牲去中心化

犧牲“不可能三角”的一維,只實現部分的去中心,即可達到較好的可擴展性。時下比較熱門的EOS項目即采用這種辦法[4],使用委托權益證明機制(Delegated Proof of Stake,DPOS)共識算法,只有“授權代表”有記賬的權力?!笆跈啻怼笔菗碛谐売嬎隳芰Φ某壒濣c,由區塊鏈網絡中用戶投票選舉產生,因為總數不多且計算能力強,因此,提高了全網同步的速度及出塊的速度。

這種實現部分去中心的做法在實際應用中是有應用場景的,因為現實世界中很難找到可以完全去中心化的業務場景,所以很難說它不是比完全去中心化的區塊鏈更符合實際;缺點則是中心化導致的不安全、超級節點易被攻擊以及串通作惡等問題。

2.2 提高網絡吞吐能力

傳統的區塊鏈是鏈表式數據結構,每個區塊(Block)唯一記錄著前一個區塊內容的哈希值(Hash),每個區塊有固定的出塊時間,必須保證一定的時間間隔,才能在全網或者“授權代表”間達成共識。這種鏈表結構以及同步機制決定了傳統區塊鏈網絡的吞吐能力。

對此,有一種做法是采用圖論中的有向無環圖(Directed Acyclic Graph,DAG)進行改進。相比于一般圖,DAG的很多問題可以在多項式級甚至線性復雜度條件下得到解決,這使得通過DAG結構記錄交易賬本并取得分布式共識成為可能。

采用DAG技術的區塊鏈中,交易不再是按照區塊進行組織,各個交易之間按照一定的規則組成DAG網絡,確實可以提高區塊鏈網絡的吞吐能力。原因在于,不必在一定的時間間隔后才能出塊,交易經過廣播后可以直接上鏈。但缺點是,即使上鏈了,仍然需要等待一段時間以得到足夠多的交易確認才算達成共識;同時系統的復雜度大大增加了。

圖2為采用DAG技術的區塊鏈網絡結構圖,來自Byteball項目白皮書[5]。

圖2 采用DAG的區塊鏈結構

2.3 系統分層

分層處理方法在計算機軟件系統設計中是一種經過驗證的比較普遍的系統設計思路,適用于設計復雜的軟件系統,可以提升系統的處理能力?;ヂ摼W最成功的分層設計就是網絡協議分層,就是我們熟知的七層網絡結構。其基本設計原則是:各層是獨立的,各自層做好自己的事即可;層和層之間的功能是不一樣的;層和層之間的交流都是通過接口通信,只要接口保持不變,層內部的設計可以改變,且不會影響別的層。

區塊鏈系統的技術堆??煞秩齻€層次:相互通信的計算機節點網絡;讓節點可以一致認可新區塊的共識算法;擁有自身狀態的應用層(區塊鏈狀態機,存儲智能合約的最終計算結果)。這三個部分構成一條完整的區塊鏈,如圖3所示。

圖3 區塊鏈系統分層結構圖

除此之外,區塊鏈系統還流行一種多鏈的技術架構,即:一個單一的區塊鏈網絡由多條區塊鏈組成,不同的鏈有不同的角色定位。如比特幣區塊鏈有閃電網絡作為側鏈[6],以太坊有Plasma作為二層鏈[7],卡爾達諾鏈分為兩層[8]。多鏈架構中的主鏈通常是完全去中心化,負責記賬結算;所謂的側鏈、子鏈或二層鏈有部分中心化的特征,以提高處理效率。

3 方 案

本文方案將以太坊區塊鏈的交易處理和智能合約的計算分離。這是一個雙層鏈:L1層是結算層,只處理交易數據,沒有智能合約,采用DAG技術,以提高網絡吞吐能力,提升終端用戶體驗;L2層是計算層,實現智能合約,采用高性能的超級計算節點,在后臺實現商業應用要求的復雜計算。L1層和L2層區塊鏈可解耦,將來L2層可以適配新的更高效的L1層區塊鏈; L1層可以采用適用于記賬結算的任何共識算法,L2層則必須采用委托權益證明共識算法或類似的“授權代表”算法。

3.1 技術架構

技術架構如圖4所示。

圖4 技術架構圖

如圖4所示,在系統中并行著兩條區塊鏈,基礎的是結算層。結算層記錄用戶之間的轉賬交易,也可以觸發對智能合約的調用;但是智能合約的發布和運行并不在結算層,是在計算層區塊鏈上。

我們在從頭同步一個以太坊全節點時會發現,區塊的同步很快就可以完成,通常是幾個小時的工作量;之后對狀態的同步經常要花費數天的時間才可以更新到最新的狀態。原因是區塊僅僅是記錄著交易,沒有計算的工作量,截至本文撰稿日時,一共有7 750 921個區塊,平均大概每分鐘產生一個區塊。但是狀態就不同了,狀態的數量是由智能合約中記錄的可持久變量和智能合約被調用的次數決定的。而且狀態的同步是需要每個節點在本地重新對智能合約進行運算來完成的。這對以太坊節點來說是個不可承受的工作量。

這就是將以太坊原有的結構分拆為兩條鏈的原因。讓結算層區塊鏈只完成記賬結算的功能,這樣結算層的節點以普通的計算機資源即可運行,可以加入更多的節點來去中心化;把智能合約的運算放在計算層,留給計算層的超級節點或者云來完成。兩者采用異步通信的方式。

3.2 技術實現

(1) 結算層。結算層采用DAG技術實現,賬戶系統采用未花費的交易輸出(Unspent Transaction Output,UTXO)模式[1],不像以太坊通過狀態記錄賬戶錢包余額,僅僅通過區塊即可計算賬戶余額。交易分為兩種,一種是用戶間轉賬,另一種是調用智能合約。對智能合約的調用是異步的,計算層將監聽對智能合約的調用進行實際的合約代碼執行。在結算層上可以采用去中心化效果較好的工作量證明(Proof of Work,PoW)或權益證明(Proof of Stake,PoS)共識算法,以獲得更多的用戶支持和更安全的網絡。對于普通的轉賬結算的用戶來說,只同步結算層的區塊鏈就可以了,不需要對計算層做同步,可以實現點對點支付、積分等簡單記賬類的應用。

(2) 計算層。在計算層我們采用超級節點的方法,超級節點提供智能合約的計算服務??梢栽诔壒濣c上提供強大的計算資源,甚至在超級節點的背后采用云計算、并行計算技術來提供充足的算力。超級節點讀取到結算層發起的對智能合約的調用請求,采用委托權益證明共識機制,選舉一個出塊人,執行智能合約的計算,并應用計算結果修改狀態機的全局最終狀態,將此全局最終狀態打包進區塊并用私鑰簽名,廣播給其他節點進行驗證;其他節點驗證無誤后添加自己的簽名,該區塊最終獲得足夠多的簽名確認,被區塊鏈網絡所接受。智能合約的調用者可以選擇信任某個超級節點,訂閱事件通知,異步收到智能合約的調用結果;有一定算力的用戶也可以同步計算層的狀態,以在本地進行驗證。

(3) 層間通信。結算層不知道計算層的存在,計算層可以看到結算層,并監聽和讀取結算層的區塊數據。兩者的數據分開存儲:交易數據存儲在結算層,狀態數據存儲在計算層。

4 測 試

本文給出的設計架構仍然在設計開發階段,并沒有得到實際的測試數據來檢驗是否能夠達到預期的改進目標。

一份對采用DAG技術的區塊鏈Byteball主網的最新測試給出了三點結論:

(1) 交易處理速度僅能達到15 TPS左右;

(2) 網絡容易遭受DoS攻擊,大量突發式的惡意交易會阻塞網絡、降低網絡的交易處理速度;

(3) 隨著交易數量增加,交易確認時間可以保持平穩。

作為DAG基礎鏈,這個壓力測試和大家的預期很不相符,顯然沒有充分發揮DAG技術的優勢。不同于傳統區塊鏈交易處理速度受限于區塊大小,Byteball網絡的交易處理速度與代碼執行速度、網絡傳輸時延、硬件處理能力等都可能有關系。Byteball的創始人認為其代碼實現中大量的SQL連接操作增加了處理時延,這可能是影響Byteball處理性能的重要原因。

顯然,如果僅僅是SQL查詢導致的性能問題,這實際上是區塊鏈技術限制之外的領域,是比較容易進行優化的。但仍然需要在實際的產品測試中不斷地去檢驗其產品的設計架構是否滿足預期,并適時調整。

5 應用案例

我們已經計劃使用以上的設計架構來實現一些行業應用的需求,比如在藝術品行業,我們正在開展一個全新的基于區塊鏈的藝術品平臺,在此之上建立一個開放的藝術品價值發現平臺,通過技術手段為藝術品建立可信的價值評判體系。如表1所示,藝術品行業存在的行業痛點,以及期待采用區塊鏈技術可以解決的問題。

表1 藝術品行業痛點

為解決以上的痛點,規劃該藝術品區塊鏈的三大功能模塊:登記平臺、定價平臺和交易平臺,如圖5所示。為了完成藝術品的完整交易流程,在區塊鏈上實現對藝術品的登記追溯、定價投票和在線交易。

圖5 藝術品區塊鏈功能結構圖

以上業務流程需要在智能合約中實現,包含大量的計算工作量,需要良好的用戶體驗,這在目前的以太坊區塊鏈上是無法進行的,而本文提出的方案可以解決這個問題。

6 結 語

本文介紹了區塊鏈2.0時代的代表——以太坊在當前階段面臨的問題,同時面臨著解決當前問題的“不可能三角”,在此種情況下根據區塊鏈行業技術的最新發展,提出幾種可能的改進方向,包括:部分犧牲去中心化、應用DAG技術和系統分層。

同時,基于這幾種改進的方向,提出一個分層的區塊鏈設計架構,在底層結算層應用DAG技術提供交易的吞吐量,建立一個“第二層”——計算層實現智能合約功能。

雖然該設計架構并未得到實際測試數據的支持,但在一定程度上代表著區塊鏈技術的演進方向,至少是一種短期內有效的臨時解決方案,因為不可否認,目前對于區塊鏈技術來講還是處于早期的發展演進階段,長期的解決方案仍然在技術構想或者正在開發中。

猜你喜歡
以太比特合約
基于活躍節點庫的以太坊加密流量識別方法
以太萬物理論概述
車易鏈:做汽車業的“以太坊”
比特幣還能投資嗎
比特幣分裂
比特幣一年漲135%重回5530元
A Study on the Contract Research Organization
神秘的比特幣
91香蕉高清国产线观看免费-97夜夜澡人人爽人人喊a-99久久久无码国产精品9-国产亚洲日韩欧美综合