肖堯 閆帥 蔣遂平
摘 要:區塊鏈技術在物聯網等大交易量場景中的應用面臨的突出問題之一是可擴展性。文中分析了區塊鏈可擴展性問題的來源、影響與主要解決方案。針對區塊鏈的可擴展性,引入區塊指針和狀態更新池的概念,提出了區塊數據的雙子鏈模型,并對雙子鏈模型解決可擴展性問題的可能性和安全性進行了討論。
關鍵詞:區塊鏈;可擴展性;數據結構;數據庫
中圖分類號:TP39文獻標識碼:A文章編號:2095-1302(2019)02-00-04
0 引 言
近年來,區塊鏈作為從比特幣[1]中提煉出來的技術,引起了科技企業、資本市場、金融機構及政府部門的巨大關
注[2]。作為最成功的區塊鏈應用,比特幣在資本領域獲得了巨大成功,截至2018年8月,比特幣市場已達千億美元。目前,區塊鏈已經從單純的數字貨幣應用擴展到物聯網、金融、醫療、保險等領域。
作為一種去中心化的分布式存儲技術,區塊鏈擁有巨大的發展前景,但仍面臨著眾多挑戰[3-4]。其中一個突出問題是可擴展性,尤其是在物聯網背景下,存在海量存儲和計算資源受限的小型節點,當把感知數據作為一種資產進行交易時,這些節點需要處理巨大的交易量,以區塊鏈規模為中心的可擴展性問題尤其嚴峻。
本文首先分析了可擴展性問題的原因及影響,介紹現有的相關工作,然后提出了新的解決方案模型,最后就模型的相關問題進行討論。
1 可擴展性問題分析
1.1 存在原因
可擴展性問題的關鍵在于區塊鏈規模的不斷增長,區塊鏈規模不斷增長的根本原因在于區塊數據結構和組鏈的方式。
區塊鏈中的數據以一個個區塊的形式存在,每個區塊包含區塊頭和區塊體兩部分。區塊頭封裝了前塊Hash、時間戳、隨機數、Merkle樹根值等信息,區塊體中則主要包含交易事務的完整信息。前塊Hash字段為前一區塊的摘要信息,可以防止前一區塊被任意篡改,并唯一指向了前一個區塊。通過前塊Hash字段,一個個獨立的區塊從邏輯上串聯成一條鏈,任何中間區塊的缺失或被篡改都會使后續區塊失效。
取得記賬權的節點需要利用所有歷史區塊的信息確認收到的交易信息,以構建新區塊,并通過前塊Hash字段鏈接到時間上最近的區塊,其他節點通過本地保有的完整區塊鏈對新區塊加以驗證,如果驗證成功就將其加入本地區塊鏈,形成新的區塊主鏈。從創世區塊(區塊鏈的第一個區塊)到當前區塊形成的一條最長主鏈記錄了區塊鏈的完整歷史。作為一種分布式數據庫,區塊鏈網絡中的每個節點都保留一份完整的區塊鏈,并以此作為新區塊的接收依據。
由此,區塊鏈的規模不斷增長,越來越龐大。對區塊鏈網絡中的節點而言,如果丟失中間任意區塊,就難以進行工作。由于節點需要保存完整的不斷增長的區塊鏈,因此導致了可擴展性問題的出現。
1.2 可擴展性問題影響
區塊鏈規模的增長速度與交易量密切相關,在比特幣每秒只記錄7筆交易的小交易量條件下,目前完整的比特幣區塊鏈占用存儲空間已達到180 GB,并且還在不斷增長。在物聯網、證券、發電權管理、智慧城市等大交易量場景下,單個節點的區塊數據存儲量將很快達到TB級。
區塊鏈規模的不斷增長使得節點初始化下載數據耗時較長,新節點的加入極為困難。此外,節點在挖礦和執行共識算法時也需要較多的算力與存儲能力,挖礦節點資源越來越多,導致算力分布愈加集中,威脅到系統的安全。對于大部分節點來說,保存業務上不需要的交易記錄會造成大量資源浪費[5]。物聯網區塊鏈網絡中大部分節點的存儲、算力及能源受到較大限制,即使作為輕型節點,只處理傳統區塊鏈的一小部分工作都難以完成。
由于可擴展性問題極大地影響了區塊鏈技術的應用與發展,因此迫切需要一種切實可行的解決方案。
2 相關工作
目前針對可擴展性問題,主要采用區塊鏈存儲優化和重新設計區塊鏈等方法。
2.1 區塊鏈存儲優化
2.1.1 全網節點放棄對全部歷史信息的保留
鑒于節點執行完整賬本相關功能的難度不斷加大,Bruce提出一個小型鏈(mini-blockchain)加密貨幣體系[6],結點可以不斷移除或遺忘舊的交易記錄,并通過一個名為“賬戶樹”的本地數據庫保存所有非空賬戶的余額。這樣,交易無需永遠存儲在區塊鏈中,只需要存儲最近的交易事務和賬戶樹即可。這種方法大大減少了區塊鏈網絡的存儲規模,大幅提高了可擴展性,并在氪石幣中得到應用。但是賬戶樹的更新較為復雜,節點間賬戶樹的同步同樣需要耗費資源。
2.1.2 通過輕量級節點減輕部分節點的存儲、計算壓力
中本聰在比特幣白皮書中指出:輕型節點可以只保留區塊頭,通過簡單支付驗證(SPV)的方式工作。每個比特幣區塊頭部固定為80 B,一年總增長為4.2 MB,需要時再向完整節點獲取相應的數據,極大地降低了節點存儲要求。
Hooff等人提出一種名為VerSUM的輕量級客戶端[7]。VerSUM允許輕量級客戶端將過大的計算量外包給其他服務器,通過比較多個服務器返回的結果以保證計算結果的正確性。
這類方法的本質是通過存儲或算力的外包,把負載轉移至其他節點。在這種模式下,擁有更多資源的節點會擁有更多話語權,強化了區塊鏈網絡的中心化程度,背離了去中心化的初衷,增加了系統風險。
2.1.3 通過鏈下離線交易來減輕網絡壓力
Lombrozo,Lau和Wuille提出見證隔離技術[8],將簽名數據從交易中分離出來,組成新的結構另行存儲。Poon和Dryja提出閃電網絡方案[9],通過離鏈進行頻繁的小額支付,以避免區塊鏈容量被大量小額交易占用。在此基礎上,文獻[10]提出雙向小額支付的通道協議,在保證安全的前提下,節點可以利用自建的離線通道實現無延遲實時支付。
以上利用鏈下離線交易來擴容的主要思路是盡可能把更多的信息放到鏈下存儲,緩解單個區塊數據量不夠、數據冗余以及鏈上數據過多的問題。
2.2 重新設計區塊鏈
文獻[11]提出下一代比特幣(比特幣NG)的思想。比特幣NG將傳統區塊分解為兩部分:領導者選舉的關鍵區塊和存儲交易的微區塊。該協議將時間劃分為不同時段。 在每個時段,節點必須散列以生成關鍵區塊。一旦生成關鍵區塊,該節點就成為負責生成微區塊的領導者。比特幣NG還擴展了最長鏈條策略,在這個策略中微區塊沒有權值。通過這種方式重新設計區塊鏈,并且已經解決了塊大小和網絡安全性之間的權衡問題。
對于大交易量的場景,以上多數方案并不能很好地解決區塊鏈規模不斷增大的問題,沒有從根本上解決可擴展性問題。文獻[6]把傳統的區塊鏈分為三個部分,但在更新賬戶樹時操作較為復雜,不易整體實現。
本文從數據層著手,改進區塊數據結構,引入狀態更新池的概念,提出新的區塊鏈數據模型,提供一種能使區塊鏈系統保持特定規模的解決方案。
3 雙子鏈模型
3.1 區塊指針
區塊鏈規模不斷增長的根本原因在于數據層的區塊數據結構和組鏈方式。僅有的前塊Hash字段使得區塊的組鏈方式較單一,只能抽象地組成一條拓撲結構簡單的區塊鏈,無法對區塊鏈本身進行操作,區塊鏈系統只能不斷增大規模,最多以鏈下存儲和只保留區塊頭的方式緩解這一問題。
為解決這一問題,本文將前塊Hash字段改進為區塊指針,如圖1所示。區塊指針包括指向區塊高度和指向區塊摘要兩個字段,分別表示區塊指針指向區塊的高度序號和哈希摘要。與傳統區塊鏈中的前塊Hash字段不同,區塊指針并不固定指向前一區塊,而是可以根據需要指向任意已存在的區塊。通過一個或多個區塊指針,區塊可組成更復雜的拓撲結構,使得區塊鏈的結構更加豐富、靈活。
3.2 狀態更新池
除了引入區塊指針外,還需要在區塊體中引入狀態更新池的概念,以便在業務邏輯上支持對新的區塊鏈結構進行相關操作,滿足新功能。
目前大部分區塊鏈系統的核心為交易數據,每個區塊中包含了以地址賬戶為主體的交易信息,節點依靠所有歷史信息判斷每筆新的交易是否合法,是否存在雙花等問題。這種檢查實質上是對輸出地址賬戶所持有通證(token)狀態的判定,即在時刻t相關賬戶的余額狀態,在區塊鏈中,就是截至前一區塊該賬戶的余額狀態。只要能安全得到這一條件,該賬戶的歷史交易信息便可丟棄,達到減少區塊鏈數據量的目的。
為此,本文引入狀態更新池的相關概念,如圖2所示。區塊體內加入區塊狀態更新子池,區塊頭部增加子池摘要,每份子池內包含一定數量的賬戶狀態信息,一份完整的狀態更新池由若干個存在于連續不間斷區塊中的狀態更新子池組成。
如在區塊Bm至區塊Bn這一串連續有限區塊中,包含一份狀態更新池,每個區塊內的子池均包含部分賬戶截至區塊Bm之前的狀態信息,整個狀態更新池中包含截至區塊Bm之前所有余額不為空的賬戶信息。這樣,區塊Bn之后節點驗證賬戶的余額只需要該狀態更新池和Bm到當前的區塊即可,Bm之前的區塊可以丟棄。
3.3 雙子鏈模型工作原理
利用區塊指針和狀態更新池的概念,本文提出一種雙子鏈模型。
雙子鏈模型的區塊結構如圖3(a)所示,區塊頭中加入兩個區塊指針和子池摘要,區塊體中加入狀態更新子池。簡單表示如圖3(b)所示。
雙子鏈模型的鏈結構如圖4所示。
圖4中,每個區塊的區塊指針1同傳統區塊鏈中的前塊Hash字段一致,唯一標定節點承認的前一個區塊,通過指針1各區塊在邏輯上依然構成一條傳統的不斷增長的鏈,如圖5所示。
通過區塊指針2,組成并維持雙子鏈結構。每條子鏈第一個區塊的區塊指針2固定指向創世區塊,后面的區塊同指針1依次指向前一區塊,形成一條子鏈。當子鏈達到約定長度后,則停止生長,新的區塊作為新子鏈第一個區塊連接向創世區塊,同時,丟棄最舊的子鏈,如圖6(a)所示。然后新的區塊在新子鏈上生長,如圖6(b)所示,直到新的子鏈到達最大高度,開始生成下一條子鏈。
這樣,區塊鏈網絡共同維護的數據規模不會超過創世區塊加兩條子鏈,從區塊拓撲結構上達到了控制總長度以及數據規模的目的。
為保證區塊鏈網絡的正常運行,丟棄部分區塊前需要把必需的歷史信息留下來。在雙子鏈模型中,通過每條子鏈包含的狀態更新池來完成。狀態更新池中記錄所在子鏈之前所有非空賬戶的狀態結果。其生成過程如下:
假定當前所在子鏈為C鏈,前一條子鏈為B鏈。遍歷B鏈中更新池信息交易信息,得到截至B鏈結束時存在的所有n個非空賬戶,即C鏈狀態更新池待記錄賬戶。約定C鏈長度為m,已存在t個有效區塊,其中已記錄更新s個非空賬戶的狀態。
節點生成新區塊,即C鏈上第t+1個、倒數第m-t個,B鏈中有n-s個賬戶需要被記錄。節點只需遍歷B鏈,從中找出未被記錄的前[(t-s)/(m-t)]個賬戶,計算得出B鏈結束時的狀態,記錄在區塊子池中并計算子池摘要即可。
這樣,每條子鏈的狀態更新池可包括上一條子鏈所有賬戶的結果狀態,子鏈上的交易信息則是本子鏈生成時間內產生的新的交易。每筆交易在驗證時無需對歷史上所有區塊遍歷,只需遍歷上一條子鏈的狀態更新池和交易信息,以及當前子鏈已產生的交易即可判斷賬戶的當前狀態。另外,若當前子鏈的狀態更新池中已更新賬戶狀態,又可省去遍歷上一子鏈的過程。
4 討 論
4.1 雙子鏈模型的數據規模
雙子鏈模型為可擴展性問題提供了一種解決方案,通過對數據結構的改進使得鏈上冗余信息被安全丟棄,將超過一定時間的歷史交易信息轉化為賬戶余額狀態,最終達到最大限度控制數據規模的目的。
以比特幣為例,當前的數據規模已達180 GB,共有3億多筆交易,而獨立地址賬戶只有40萬。因此,特定地址的所有歷史交易信息量遠大于只記錄地址和余額。丟棄歷史信息可極大地降低節點的存儲負載,進而解決區塊鏈的可擴展性問題。
4.2 分叉、安全性
對雙子鏈結構的組織和舊鏈的丟棄是節點基于區塊指針2視角的操作。從區塊指針1視角看,依然是傳統的單鏈結構,因此繼承了傳統區塊鏈結構的相關特性。分叉時主鏈的選擇方法、安全性分析等可以繼續使用現有方法[12]。現行區塊鏈應用中區塊確認長度[1]通常不超過100,只要雙子鏈模型中子鏈的長度超過該確認長度,即可認為本模型擁有不低于普通區塊鏈的安全性。
5 結 語
本文從區塊鏈的數據層著手,引入區塊指針和狀態更新池的概念,提出區塊數據的雙子鏈模型,形成新的區塊數據結構和組鏈形式,支持新的區塊間拓撲結構,使得區塊鏈系統對區塊鏈的操作變得可行。由于雙子鏈模型限制了區塊鏈的規模,并允許安全丟棄歷史區塊,可以有效緩解區塊鏈的可擴展性問題。
當然,本文提出的模型也有其適用范圍,要求使用場景對歷史數據不全部保存,只需明確相關賬戶當前狀態,對于嚴格要求完整歷史信息的業務場景還需進一步尋找可擴展性問題的解決方案。
參 考 文 獻
[1] NAKAMOTO S. Bitcoin: A peer-to-peer electronic cash system[Z].Consulted,2008.
[2]何蒲,于戈,張巖峰,等.區塊鏈技術與應用前瞻綜述[J].計算機科學,2017,44(4):1-7.
[3] ZHENG Z,XIE S,DAI H,et al. An overview of blockchain technology: architecture,consensus,and future trends[C]// IEEE International Congress on Big Data.IEEE,2017.
[4]邵奇峰,金澈清,張召,等.區塊鏈技術:架構及進展[J].計算機學報,2018,41(5):969-988.
[5] FERN?NDEZ-CARAM?S T M,FRAGA-LAMAS P. A review on the use of blockchain for the internet of things[J].IEEE access,2018(99):1.
[6] BRUCE J.The mini-blockchain scheme[EB/OL]. http://cryptonite.info/files/mbc-scheme-rev3.pdf.
[7] VAN DEN HOOFF J,KAASHOEK M F,ZELDOVICH N. Versum:verifiable computations over large public logs[C]// In Proceedings of the 2014 ACM SIGSAC Conference on Computer and Communications Security New York,NY,USA,2014:1304-1316.
[8] LOMBROZO E,LAU J,WUILLE P. BIP141:segregated witness(Consensus layer)[OL]. [2016-11-15]. https://github.com/bitcoin/bips/blob/master/bip-0141.mediawiki.
[9] POON J,DRYJA T. The bitcoin lightning network:scalable off-chain instant payments[OL].[2016-12-17]. https://lightning.network/lightning-network-paper.pdf.
[10] DECKER C,WATTENHOFER R. A fast and scalable payment network with bitcoin duplex micropayment channels[M].Stabilization,safety,and security of distributed systems. springer international publishing,2015:3-18.
[11] EYAL I,GENCER A E,SIRER E G,et al. Bitcoinng:a scalable block chain protocol[C]// In Proceedings of 13th USENIX Symposium on Networked Systems Design and Implementation (NSDI 16),Santa Clara,CA,USA,2016:45–59.
[12] GERVAIS A,KARAME G O,GLYKANTZIS V,et al. On the security and performance of proof of work blockchains[C]// ACM Sigsac Conference on Computer and Communications Security.ACM,2016:3-16.