關(guān)鍵詞: 區(qū)塊鏈; 分片; master/slave; 狀態(tài)通道; 哈希時間鎖
1 引言
區(qū)塊鏈(Blockchain)是一種塊鏈?zhǔn)酱鎯?、不可篡改、安全可信的去中心化分布式賬本[1]. 從誕生初期的比特幣網(wǎng)絡(luò)開始,區(qū)塊鏈逐漸演化為一項全球性技術(shù). 區(qū)塊鏈的特點包括去中心化、不可篡改、透明、安全和可編程性等. 每個數(shù)據(jù)塊都鏈接到前一個塊以形成連續(xù)的鏈,保障了交易歷史的完整性. 隨后,以太坊(Ethereum)等新一代區(qū)塊鏈平臺的出現(xiàn)進一步擴展了應(yīng)用領(lǐng)域[2]. 以太坊等新平臺使用的智能合約技術(shù)使區(qū)塊鏈可編程,支持更廣泛的應(yīng)用. 因此區(qū)塊鏈在金融、供應(yīng)鏈、醫(yī)療和不動產(chǎn)等領(lǐng)域得到了前所未有的廣泛應(yīng)用.
但是作為主流區(qū)塊鏈之一的以太坊仍面臨一些技術(shù)挑戰(zhàn)和缺陷,主要體現(xiàn)在:(1) 交易節(jié)點擁堵:所有的交易和智能合約集中在同一條主鏈上執(zhí)行和驗證,因此限制了以太坊的交易吞吐量. 當(dāng)網(wǎng)絡(luò)交易量增加時就會導(dǎo)致交易節(jié)點擁堵,并影響網(wǎng)絡(luò)延遲和交易費用上漲,導(dǎo)致用戶體驗和網(wǎng)絡(luò)效率變差.(2) 可拓展性低:由于網(wǎng)絡(luò)擁堵的問題,以太坊1. 0 難以支持大規(guī)模的去中心化應(yīng)用和用戶,如果要讓更多的人使用以太坊,就需要提高網(wǎng)絡(luò)的可擴展性,即增加網(wǎng)絡(luò)的處理能力和容量[3]. 現(xiàn)有分片架構(gòu)雖然優(yōu)化了交易處理,但面對復(fù)雜交易處理的速度仍然較慢,可拓展性不強.(3) 跨片交易緩慢:跨片通信涉及不同分片之間的數(shù)據(jù)交換和狀態(tài)同步、跨片交易需要多個分片共同達成共識、跨片協(xié)議驗證步驟的繁瑣等多種因素導(dǎo)致了跨片交易的延遲. 目前以太坊各種優(yōu)化技術(shù)方案都權(quán)衡著區(qū)塊鏈不可能三角,如表1 所示. 即在區(qū)塊鏈技術(shù)和系統(tǒng)的設(shè)計實施中面臨的3個關(guān)鍵要素——去中心化(Decentralization)、安全性(Security)和可擴展性(Scalability)[4]之間的困境. 這3 個要素在當(dāng)前的技術(shù)條件下,很難在一個系統(tǒng)中同時實現(xiàn)3 個要素都有最優(yōu)表現(xiàn),最多只能實現(xiàn)其中一項或兩項的優(yōu)化. 因此解決以太坊以上3 個關(guān)鍵問題迫在眉睫.
為解決區(qū)塊鏈不可能三角問題,常用的區(qū)塊鏈優(yōu)化方案有:(1) 提高Gas 限制和優(yōu)化Gas 費用;(2) 將多個交易打包成一個交易;(3) 優(yōu)化智能合約,減少執(zhí)行合約所需的計算資源和時間;(4) Mempool 優(yōu)化,更高效的交易排序和處理機制;(5) 使用更好的不依賴于高耗能計算的共識機制;(6) 區(qū)塊協(xié)議優(yōu)化,例如將交易數(shù)據(jù)與簽名數(shù)據(jù)分離,減少交易占用的區(qū)塊空間;(7) 側(cè)鏈和跨鏈橋協(xié)議,在其他鏈進行資產(chǎn)轉(zhuǎn)移和數(shù)據(jù)交換;(8) 高效的計算硬件加速、P2P 網(wǎng)絡(luò)優(yōu)化等. 但上述方案存在需要平衡網(wǎng)絡(luò)的去中心化和安全性、對區(qū)塊本身數(shù)據(jù)進行重構(gòu)等大量的底層改進,因此實際落地的技術(shù)效果并不理想.
在以太坊優(yōu)化的眾多方案中,分片概念是比較優(yōu)秀的一種,其基本思想是: 將網(wǎng)絡(luò)中的節(jié)點分成不同的碎片,各分片可以并行處理不同交易,這樣可以并行處理相互之間未建立連接的交易,以提高網(wǎng)絡(luò)并發(fā)量. 該方案的特點是: 隨著節(jié)點數(shù)目的增加,網(wǎng)絡(luò)吞吐量也隨之增加. 分片概念最早應(yīng)用于分布式數(shù)據(jù)庫,它將一個數(shù)據(jù)庫分成若干塊[5],放在不同的服務(wù)器上分而治之. 在區(qū)塊鏈系統(tǒng)中的分片包含3 種類型:網(wǎng)絡(luò)分片、交易分片和狀態(tài)分片,分片的目的是要提高每秒交易量TPS.目前主流區(qū)塊鏈中,現(xiàn)在比特幣網(wǎng)絡(luò)TPS 約為5~7,以太坊網(wǎng)絡(luò)約為15[6],都非常低,用戶如果交易,就無限地拉高Gas 費,這就造成了惡性的價格戰(zhàn). 相比之下,Hyperledger Fabric 超級賬本TPS是20 000,在現(xiàn)實生活中visa 信用卡TPS 是47 000,淘寶最高是54 萬TPS. 然而,實際以太坊的TPS 也受到網(wǎng)絡(luò)負載、節(jié)點性能和其他技術(shù)因素的影響,相比visa 和淘寶等傳統(tǒng)架構(gòu)而言,以太坊的分片負載能力還有很大的提升空間.
針對以太坊數(shù)據(jù)節(jié)點擁堵和分片跨片交易緩慢問題,本文提出了一種改進現(xiàn)有分片優(yōu)化的交易結(jié)構(gòu),以縱向和橫向的矩陣結(jié)構(gòu)將功能冗雜的信標(biāo)鏈和分片鏈的交易處理、任務(wù)協(xié)調(diào)功能解耦出來進行單獨處理,其創(chuàng)新點總結(jié)如下:
(1) 在保留現(xiàn)有以太坊主鏈及信標(biāo)鏈的共識認證/驗證者管理功能的基礎(chǔ)上,將其任務(wù)協(xié)調(diào)、交易處理功能解耦出來給master/slave 鏈單獨處理,每部分各司其職,進行任務(wù)協(xié)同.
(2) 解耦出的縱向結(jié)構(gòu)上設(shè)立master 鏈來承擔(dān)主要計算/交易壓縮/任務(wù)協(xié)調(diào)/數(shù)據(jù)備份等任務(wù),slave 鏈用于任務(wù)周期內(nèi)的交易執(zhí)行,通過State Channel 狀態(tài)通道方法將master 鏈、slave 鏈與分片鏈進行縱向鏈接. 解耦出的橫向結(jié)構(gòu)上,通過哈希時間鎖技術(shù)來承擔(dān)跨片交易任務(wù),減輕原分片鏈臃腫的跨片任務(wù)處理機制,大幅提升跨片交易速度.
(3) 本文進行了3 項實驗從縱向和橫向分別證明了該分片區(qū)塊鏈矩陣框架能大幅提升現(xiàn)有分片跨鏈交易性能,其中縱向結(jié)構(gòu)性能不止1 倍優(yōu)于現(xiàn)有分片,橫向結(jié)構(gòu)啟用HTLC 越多,TPS 越高,時延越小,交易失敗率越低.
2 相關(guān)工作
為了解決以太坊交易節(jié)點擁堵/可拓展性低/跨片交易緩慢等問題,以太坊社區(qū)提出了一系列候選的擴容方案,來提升以太坊網(wǎng)絡(luò)的性能和可持續(xù)性,按照技術(shù)路線可以分為鏈上擴容(Layer1)和鏈下擴容(Layer 2)兩種. 兩者各有優(yōu)缺點,但目標(biāo)都是提升網(wǎng)絡(luò)的交易吞吐量,降低交易成本,改善用戶體驗. 本文提出的改進結(jié)構(gòu)是基于鏈上擴容(Layer 1)中的分片Sharding 方向.
2. 1 鏈上擴容(Layer 1)
以太坊的鏈上擴容(Layer 1)是指通過改進主鏈的底層協(xié)議和架構(gòu),直接提升網(wǎng)絡(luò)的處理能力,主要有以下幾種類型:(1) 分片(Sharding): 一種將整個以太坊網(wǎng)絡(luò)分成多個分片(Shards)的技術(shù),每個分片都可以獨立處理交易和智能合約[7]. 不同分片之間并行運行,來大幅提高網(wǎng)絡(luò)的吞吐量,減少節(jié)點的計算和存儲負擔(dān).(2) 權(quán)益證明(Proof ofStake, PoS): 一種共識機制,與工作量證明(Proof of Work, PoW)相比,PoS 依賴驗證者的質(zhì)押來驗證交易和生成區(qū)塊,因此其大幅降低了能耗[8],比PoW 更加環(huán)保,其懲罰機制也確保了網(wǎng)絡(luò)的安全性和去中心化.(3) 優(yōu)化共識機制Casper 協(xié)議:Casper 是以太坊社區(qū)開發(fā)的一種PoS 協(xié)議[9],通過部分共識驗證機制減少了網(wǎng)絡(luò)達成共識的時間,縮短了區(qū)塊的生成時間.(4) 區(qū)塊大小和出塊時間的調(diào)整: 通過增加區(qū)塊的大小或減少區(qū)塊的生成時間,以直接提高網(wǎng)絡(luò)的吞吐量,通過增加每個區(qū)塊可以容納的交易數(shù)量或縮短每個區(qū)塊生成的時間間隔,使網(wǎng)絡(luò)每秒能夠處理更多的交易.(5) EIP-1559 和Gas 費市場改進: EIP-1559 是以太坊的一項提案,旨在改進以太坊的Gas 費用市場機制[10]. 其引入了基礎(chǔ)費用(Base Fee)和小費(Tip)的機制,旨在穩(wěn)定交易費用并減少費用波動. 這兩者的結(jié)合可以在高峰時段平滑交易費用,減輕網(wǎng)絡(luò)負載.
除了上述不同類型的優(yōu)點外,鏈上擴容的缺點和技術(shù)難點也應(yīng)重視,例如分片間的通信和數(shù)據(jù)的一致性、權(quán)益證明可能受到長程攻擊和驗證者抽逃的潛在風(fēng)險、頻繁的出塊時間導(dǎo)致網(wǎng)絡(luò)不穩(wěn)定,增加區(qū)塊鏈的分叉風(fēng)險等.
2. 2 鏈下擴容(Layer 2)
以太坊鏈下擴容(Layer 2)是指在主鏈(Layer 1)之外的層次上處理部分交易和計算,從而減輕主鏈的負擔(dān). 這種擴容方法不需要對以太坊主鏈進行大規(guī)模改動,而是通過在鏈下執(zhí)行大部分交易,只有最終結(jié)果才會提交到鏈上,從而提高網(wǎng)絡(luò)的交易吞吐量、降低交易成本. 鏈下擴容有如下幾種類型:(1) Rollups: 一種將大量鏈下交易打包處理后,將數(shù)據(jù)壓縮并提交到鏈上的技術(shù). 主要有OptimisticRollups 和ZK Rollups( 零知識Rollups)[11]兩種類型,都實現(xiàn)了數(shù)據(jù)鏈下交易的打包處理.(2) 側(cè)鏈(Sidechains): 一種獨立運行的區(qū)塊鏈,側(cè)鏈可以與主鏈進行交互,但擁有自己的共識機制和治理方式. 側(cè)鏈與主鏈通過雙向錨定機制連接,用戶可以在兩者之間轉(zhuǎn)移資產(chǎn),其定期與主鏈進行狀態(tài)同步.(3) Validium:Validium 與ZK Rollups類似,但不同之處在于,Validium 通過零知識證明向鏈上提交證明,在鏈下存儲數(shù)據(jù),而ZK Rollups在鏈上存儲數(shù)據(jù)[12].(4) Rollup 鏈的合并(Layer 3):在Layer 2 之上構(gòu)建額外的一層(Layer 3)的方案,以實現(xiàn)更多樣化的功能和更高效的擴展,如隱私保護、特定行業(yè)解決方案等. 只是設(shè)計復(fù)雜度增加,鏈間通信和數(shù)據(jù)一致性等問題都需要解決.
鏈下擴容通過在主鏈之外處理大量交易,顯著提升了網(wǎng)絡(luò)的吞吐量和效率. 不同的Layer 2 方案各有優(yōu)缺點,適合不同的應(yīng)用場景.
2. 3 分片sharding
在鏈上擴容(Layer 1)中,分片Sharding 概念的提出相當(dāng)出色,其架構(gòu)如圖1 所示.
在現(xiàn)有分片路線中,以太坊主鏈作為錨定層,負責(zé)傳播消息、管理以太坊狀態(tài). 信標(biāo)鏈作為協(xié)調(diào)/共識層,將以太坊的共識機制從PoW 切換成PoS,信標(biāo)鏈負責(zé)處理區(qū)塊和證明、運行分叉選擇算法以及管理獎勵和懲罰等,如驗證者名單的管理,以及分片驗證者任務(wù). 數(shù)據(jù)層的處理則交付給多個分片鏈進行(分片內(nèi)的區(qū)塊提議者為本分片收集交易數(shù)據(jù),并將這些交易納入到驗證者們選出的區(qū)塊中). 數(shù)據(jù)層之下是執(zhí)行層,負責(zé)處理交易或智能合約交互. 但分片方案也面臨很多難題與挑戰(zhàn),包括跨分片交易的原子性和分片間負載均衡.
跨分片交易指的是分片區(qū)塊鏈中的一個交易可能依賴于多個分片,跨分片交易的原子性是指驗證跨分片交易中賬戶的輸入和輸出. 相對于分片內(nèi)交易,跨分片交易必須等待輸入分片的確認,才能在輸出分片中進行驗證,因此跨分片交易使得分片內(nèi)和分片間的通信開銷、交易驗證時間都增加了.
分片間的負載均衡是指不同分片中賬戶/交易的數(shù)量均衡,實現(xiàn)分片間的負載均衡能有效提高并行度,減少交易的排隊時間. 例如包含較多賬戶/交易的熱分片,其存儲了交易活躍的賬戶,需要花費大量的時間用于交易驗證,很容易導(dǎo)致網(wǎng)絡(luò)擁堵.
3 主從模式的分片區(qū)塊鏈矩陣框架
本文提出一種主從模式的分片區(qū)塊鏈矩陣框架,主要由現(xiàn)有分片基礎(chǔ)(信標(biāo)鏈/分片鏈基礎(chǔ)結(jié)構(gòu))、master 鏈和slave 鏈、master/slave 鏈的2 種連接關(guān)系(State Channel 狀態(tài)通道、哈希時間鎖)構(gòu)成. 通過以上模塊和連接關(guān)系的結(jié)構(gòu),構(gòu)成立體的分片區(qū)塊鏈矩陣,以解決現(xiàn)有分片方案存在的交易節(jié)點擁堵/可拓展性低/跨片交易緩慢等問題,其結(jié)構(gòu)如圖2 所示.
3. 1 主從分片矩陣
本文提出的框架,不對現(xiàn)有以太坊核心架構(gòu)進行大的修改. 其核心思想是:保留原以太坊主鏈及信標(biāo)鏈的共識認證/驗證者管理功能,將原來分片鏈冗雜的數(shù)據(jù)處理功能從縱向和橫向解耦劃分給不同的master/slave 鏈來執(zhí)行;master/slave 鏈通過State Channel 狀態(tài)通道方法與分片鏈進行縱向鏈接,橫向平行的master/slave 鏈間交易(跨分片交易)通過形成交易組,并對交易數(shù)據(jù)修剪完成瘦身;隨后通過哈希時間鎖方式在限定時間內(nèi)完成跨片交易,通過在現(xiàn)有分片架構(gòu)上實現(xiàn)橫向與縱向的結(jié)構(gòu)分層形成分片間矩陣,以此來優(yōu)化大量存在的片內(nèi)/跨片數(shù)據(jù)交易.
在圖2 所示的虛線框中,不同虛線框內(nèi)的部分構(gòu)成縱向結(jié)構(gòu),相同顏色的不同master/slave 鏈間通過哈希時間鎖構(gòu)成橫向結(jié)構(gòu),縱向和橫向的結(jié)構(gòu)共同構(gòu)成了分片間矩陣框架. 縱向結(jié)構(gòu)上有3個要素:State Channel 狀態(tài)通道、master 鏈和slave鏈,結(jié)構(gòu)圖如圖3 所示. 我們在每個分片的縱向結(jié)構(gòu)上設(shè)立master 鏈承擔(dān)主要計算/交易壓縮/任務(wù)協(xié)調(diào)/數(shù)據(jù)備份等任務(wù),基于地址標(biāo)簽(例如交易所冷熱錢包/支付機構(gòu)周期性結(jié)算地址)、任務(wù)周期(例如設(shè)立一周合約簽訂/交易結(jié)算有效期)等因素創(chuàng)建State Channel 狀態(tài)通道;并據(jù)此生成平行于master 鏈的slave 鏈用于任務(wù)周期內(nèi)的交易執(zhí)行;執(zhí)行完成后回傳master 鏈計算結(jié)果,并于交易周期結(jié)束后/狀態(tài)過期等情況銷毀slave 鏈以節(jié)省存儲空間,即分片鏈、master 鏈持久存在,slave 鏈依數(shù)據(jù)情況動態(tài)生成(多子鏈串行)或銷毀(定期刪除的Blob 數(shù)據(jù)).
State Channel 狀態(tài)通道允許兩個或多個參與者在鏈下進行多次交互,而無需每次交易都發(fā)布到鏈上,只有當(dāng)通道關(guān)閉時,才會將最終狀態(tài)提交到以太坊主鏈上[20]. 縱向設(shè)計上,傳遞數(shù)據(jù)是通過batch 壓縮而不是通過交易修剪來實現(xiàn)的. 理論上slave 鏈可以再生成多層子slave 鏈以串鏈并行(child‘s child walking side by side),其實際原理是slave 鏈僅負責(zé)數(shù)據(jù)計算和合約執(zhí)行,因此可將復(fù)雜交易計算進行分批/分層/遞歸等類型交付不同層次的slave 鏈來執(zhí)行. Master 鏈僅負責(zé)任務(wù)協(xié)調(diào)和結(jié)果匯總,slave 鏈負責(zé)計算、處理交易數(shù)據(jù),核心的數(shù)據(jù)驗證仍交由shard 分片和基礎(chǔ)的信標(biāo)鏈/以太坊主鏈來實現(xiàn),shard 分片負責(zé)State Root 狀態(tài)根、Tx Data 交易數(shù)據(jù)、ZK proof 有效性證明等數(shù)據(jù)類型的驗證,以此保證數(shù)據(jù)可用性與狀態(tài)有效性.
橫向結(jié)構(gòu)上也有3 個要素:哈希時間鎖、mas?ter 鏈、slave 鏈如圖4 所示,哈希時間鎖(HashTime Lock Contracts,HTLC)即在智能合約的基礎(chǔ)上進行鎖定資產(chǎn),并在有限的時間內(nèi)輸入正確哈希值的原值以完成交易[21],該技術(shù)具有“時間限制”和“強制執(zhí)行交易”的機制,使得交易各方無法在合約簽訂后私自中斷合約交易,從而構(gòu)建出了一張快捷支付的安全網(wǎng)絡(luò),能有效解決跨鏈、跨片或在不同網(wǎng)絡(luò)上交易的問題,使多方支付成為可能,以低成本給交易雙方帶來安全性和可信賴性.上文介紹了master 鏈承擔(dān)主要計算/交易壓縮/任務(wù)協(xié)調(diào)/數(shù)據(jù)備份等任務(wù),slave 鏈用于任務(wù)周期內(nèi)的交易執(zhí)行,執(zhí)行完成后回傳master 鏈計算結(jié)果.因此,當(dāng)系統(tǒng)識別到非本分片實體的交易即通過master 鏈進行任務(wù)協(xié)調(diào),指派任務(wù)至slave 鏈進行交易計算,slave 鏈通過哈希時間鎖機制突破分片隔離,完成跨片交易.
轉(zhuǎn)賬發(fā)送/轉(zhuǎn)賬接收賬戶如果都在本分片內(nèi)則系統(tǒng)可用快速匹配并進行轉(zhuǎn)賬驗證,也即同一分片內(nèi)的交易可以被立即確認寫入以太坊主鏈內(nèi). 而非本分片實體的交易(即轉(zhuǎn)賬發(fā)送/轉(zhuǎn)賬接收賬戶不在本分片內(nèi))有兩種情況:(1) 轉(zhuǎn)賬發(fā)送賬戶A 在本分片shard #1 內(nèi),接收賬戶B 在shard#2(其他分片)內(nèi).(2) 轉(zhuǎn)賬接收賬戶A 在本分片shard #1 內(nèi),轉(zhuǎn)賬發(fā)送賬戶B 在shard #2(其他分片)內(nèi). 現(xiàn)有以太坊分片使用了receipt 收據(jù)的概念來執(zhí)行跨分片通信,但這種方法還是難以解決跨片交易數(shù)量多,且receipt 收據(jù)需要通過更底層的信標(biāo)鏈來協(xié)調(diào)處理,因此在面對大量不同分片鏈的不同交易組的跨片交易時必然力不從心,導(dǎo)致交易堵塞. 因此對上述兩種情況通過哈希時間鎖機制,可以在規(guī)定時間內(nèi)完成對手交易.
3. 2 跨片間交易
現(xiàn)有以太坊跨分片通信的原理,是通過票據(jù)(Shard Receipt)在不同分片之間傳遞信息和證明交易完成[22],其幫助協(xié)調(diào)和驗證跨分片交易,使得分片之間能夠保持一致性和完整性. 跨分片交易涉及以下幾個步驟:(1) 發(fā)起交易:用戶在分片A上發(fā)起一個跨分片交易(例如將資產(chǎn)發(fā)送到分片B上的另一個用戶).(2) 生成分片票據(jù):分片A 處理完這筆交易后,會生成一個分片票據(jù),其包含了交易的詳細信息,如發(fā)送者/接收者/金額/該交易在分片A 上的狀態(tài).(3) 分片票據(jù)的傳播:分片A 將生成的分片票據(jù)發(fā)送到分片B. 分片票據(jù)會通過網(wǎng)絡(luò)中繼器或其他分片間通信協(xié)議傳遞到目標(biāo)分片.(4) 接收分片票據(jù):分片B 接收到來自分片A的分片票據(jù),并驗證票據(jù)的合法性(票據(jù)的簽名和其他加密證明)以確保交易的真實性和完整性.(5) 執(zhí)行交易:分片B 在驗證通過后,執(zhí)行票據(jù)中指定的交易,將資產(chǎn)轉(zhuǎn)移給接收者,并在分片B 的狀態(tài)中更新.(6) 確認和反饋:分片B 在執(zhí)行完交易后,生成一個確認消息,可能會將該消息發(fā)送回分片A,以確認交易的完成.
分片票據(jù)的如上步驟有這些特點:(1) 證明和狀態(tài)傳遞:分片票據(jù)主要用于證明交易的合法性和狀態(tài),確保不同分片在處理同一筆跨片交易時能夠保持?jǐn)?shù)據(jù)一致.(2) 異步處理:跨分片交易和分片票據(jù)的處理通常是異步的,即交易在分片A完成后,分片B 可能在稍后的時間點才處理該交易.(3) 安全性:分片票據(jù)通過加密和簽名機制,確??绶制灰椎陌踩?,防止數(shù)據(jù)篡改或重放攻擊. 正因為上述異步交易原理,也導(dǎo)致了通過票據(jù)進行跨分片通信的延遲,其需要在多個分片之間傳遞信息和等待確認,涉及多個分片的協(xié)調(diào)和通信. 在未來對票據(jù)的優(yōu)化可能包括更高效的分片間通信協(xié)議、快速票據(jù)驗證機制、片內(nèi)交易組結(jié)構(gòu)優(yōu)化等,以進一步減少延遲和提升跨片交易的性能. 現(xiàn)有分片內(nèi)的交易組結(jié)構(gòu)如表2 所示,包含數(shù)據(jù)頭部、簽名、交易數(shù)據(jù)等. 為了提升通信效率,可在此基礎(chǔ)上進一步優(yōu)化通信算法和數(shù)據(jù)結(jié)構(gòu)來提升交易易用性.
正是由于現(xiàn)有票據(jù)跨片通信仍存在一些問題,所以本文選擇了另外一種技術(shù)—— 哈希時間鎖機制(Hash Time Lock Contracts,HTLC):其原理是在智能合約的基礎(chǔ)上,雙方先鎖定資產(chǎn),如果都在有限的時間內(nèi)輸入正確哈希值的原值,即可完成交易. 由于以太坊官方團隊在一系列改進的設(shè)計版本上,將分片減少至64 個,分片個數(shù)少了,但交易數(shù)量增長,自然每個分片內(nèi)需要容納的可用交易數(shù)量就更多了. 而根據(jù)地址標(biāo)簽畫像(對以太坊地址去匿名化,做用戶畫像),交易對手較多的地址(例如交易所熱錢包、支付機構(gòu)結(jié)算地址等)必然有相當(dāng)多的交易對會存在跨片交易的可能,如果用戶為了提升轉(zhuǎn)賬時效性,可能采用交易所內(nèi)/支付機構(gòu)內(nèi)部地址進行結(jié)算,其一般為常規(guī)服務(wù)器結(jié)算架構(gòu)(例如支付寶、PayPal 等),不涉及轉(zhuǎn)賬上鏈過程. 而重要交易(例如用戶為了交易取證、避免雙花攻擊等)其安全與時效性往往在用戶可接受范圍內(nèi). 因此在單個分片內(nèi)存在大量跨片交易的情況下,折中考慮安全性、轉(zhuǎn)賬時效性、技術(shù)落地可能性,最終選擇了哈希時間鎖技術(shù)來連接不同的slave 鏈,其獨有的“時間限制”和“強制執(zhí)行交易”的機制,能保證跨片交易安全可靠且及時得完成.
在實際應(yīng)用場景中,通過異步通信的哈希時間鎖方式,可以對不同類型的Dapp 進行跨分片通信. 比如,在分片M 上的Dapp 生成一個收據(jù),分片N 上相應(yīng)交易收到并使用這個收據(jù)來執(zhí)行某些操作,并據(jù)此向分片M 返回一個回調(diào)結(jié)果. 比如跨分片通信在旅行場景中的應(yīng)用:小李想通過Dapp 訂一張周末飛往三亞的機票,并希望在同一天預(yù)定一間酒店,此時,2 個預(yù)約要求要么同時成功,要么同時失敗,才能實現(xiàn)小李旅行目的,即這兩個預(yù)約要求可以看成一個原子事務(wù)(不可分割). 如果機票預(yù)訂和酒店預(yù)訂的Dapp 信息在同一分片中,我們可以創(chuàng)建一個同時實現(xiàn)這兩個預(yù)約任務(wù)的交易信息,并且配置為兩個預(yù)約同時成功,否則交易失敗,并回滾至原狀態(tài). 而如果兩個Dapp 信息在不同的分片中,則通過異步通信進行機票預(yù)訂,然后酒店預(yù)訂,直到兩個預(yù)訂都成功,再對兩個預(yù)訂進行確認. 預(yù)訂系統(tǒng)需要在一定的時間內(nèi)防止其他任何人進行搶訂,而哈希時間鎖自帶的“ 時間限制”和“ 強制執(zhí)行交易”的機制恰好能完美地實現(xiàn)上述功能.
此外,基于不同標(biāo)簽實體交易的占比類型較多,而每個分片會盡可能搜集本片內(nèi)交易組(創(chuàng)建自己的交易群,包括交易群頭和交易群主體,如表2 所示),因此就產(chǎn)生了大量交易排隊擁擠等待被打包進交易組、不同交易組的跨片交易量很大的問題. 而采用了橫向加縱向的矩陣結(jié)構(gòu),將原本屬于分片鏈的交易處理功能解耦剝離給master/slave鏈,shard 分片鏈僅負責(zé)打包交易組、master 鏈回傳的結(jié)果驗證,實際負責(zé)交易協(xié)調(diào)處理與計算的是master/slave 鏈,各自負責(zé)本部分任務(wù)處理并匯總,因此構(gòu)建起的MS2 矩陣能大大提高整體交易處理速度、解決跨片交易緩慢問題.
3. 3 共識驗證機制
以太坊分片間的共識驗證機制主要依賴于信標(biāo)鏈的協(xié)調(diào)驗證功能和PoS 權(quán)益證明的共識機制. 這種組合機制的設(shè)計旨在確保每個分片鏈的狀態(tài)能夠與整個網(wǎng)絡(luò)保持一致,并且在所有分片鏈之間實現(xiàn)全局共識. 由于本文解耦的架構(gòu)體系未改變現(xiàn)有分片結(jié)構(gòu),底層的PoS 共識驗證機制仍由原來的信標(biāo)鏈負責(zé),其主要處理區(qū)塊和證明、運行分叉選擇算法以及管理獎勵和懲罰等. 信標(biāo)鏈?zhǔn)且蕴?. 0 的核心組件,承擔(dān)著協(xié)調(diào)整個網(wǎng)絡(luò)、管理和協(xié)調(diào)PoS 驗證過程、分片鏈的共識以及驗證者的管理/輪換、區(qū)塊提議和驗證等. 同時,PoS 驗證機制和信標(biāo)鏈的結(jié)合,通過質(zhì)押和驗證過程,還提供了一種高效、低能耗的共識方法,通過經(jīng)濟激勵和懲罰機制,確保了以太坊網(wǎng)絡(luò)的安全性和去中心化,同時為分片鏈中的驗證者提供了公平的機會來參與區(qū)塊生成.
3. 4 流程邏輯
以下流程分別是縱向交易數(shù)據(jù)分配至分片并同步至master 協(xié)調(diào)、橫向跨片交易的邏輯表示.
流程1: 交易縱向隨機指派
1) 初始化數(shù)組 shards,用于存儲每個分片中的交易;添加交易對象添加到 transactions 列表;
2) 隨機選擇分片ID;
3) 分配交易到分片列表并同步至master;
master 進行交易組內(nèi)容和狀態(tài)判斷,進行任務(wù)協(xié)調(diào);
4) 循環(huán)輸出每個分片中的交易數(shù)量.
流程2: 橫向跨片交易
1) 定義結(jié)構(gòu)體HTLC,用于存儲跨片交易的信息;
2) mapping 映射來存儲每筆HTLC 交易;
3) 跨片通信事件,CrossShardTransfer,用于跨片通知目標(biāo)分片交易的信息;
4) 創(chuàng)建HTLC 信息,觸發(fā)跨片通信事件,將HTLC 信息發(fā)送到目標(biāo)分片;
5) 處理跨片通信消息,在目標(biāo)分片上存儲對應(yīng)的HTLC 信息;
6) 接收者領(lǐng)取資金(檢查HTLC 領(lǐng)取情況/時間鎖是否過期等);
7) 發(fā)送者退款(檢查調(diào)用者/HTLC 是否已被領(lǐng)取/時間鎖是否過期等);
8) 查詢HTLC 狀態(tài).
4 實驗與分析
4. 1 架構(gòu)實現(xiàn)
MS2 矩陣框架采用Solidity 語言和eWASM 虛擬機實現(xiàn),數(shù)據(jù)存儲采用MongoDB,本架構(gòu)在傳統(tǒng)分片結(jié)構(gòu)的區(qū)塊鏈基礎(chǔ)上進行改進.
4. 2 實驗數(shù)據(jù)
本實驗采取控制變量法,設(shè)定和現(xiàn)實以太坊交易盡量相同的實驗環(huán)境,僅研究不同架構(gòu)下對交易效率的提升程度. 因此模擬了64 個分片,采用和現(xiàn)實類似的Gas Price 限制/平均轉(zhuǎn)賬額度,采用NoSQL 的MongoDB 數(shù)據(jù)庫中生成10 萬筆交易并隨機分配至各個分片中,部分交易數(shù)據(jù)如表3所示.
4. 3 實驗結(jié)果
實驗1 首先實驗現(xiàn)有信標(biāo)鏈分片鏈結(jié)構(gòu),根據(jù)mongoDB 的交易數(shù)據(jù)依次讀取并分配到各個分片鏈中,待實驗完成后統(tǒng)計轉(zhuǎn)賬效率. 隨后實驗改進了的MS2 分片矩陣結(jié)構(gòu). 兩次實驗的交易筆數(shù)和所花費時間比較,結(jié)果如圖5 所示.
對64 個分片的交易時間進行分析,每個分片平均分配到的交易數(shù)為:100 000/64=1562. 5 筆交易,如果每個分片每秒可以處理X 筆交易,那么每個分片處理1562. 5 筆交易所需時間為1562. 5/X s,總時間等于單個分片處理所有交易所需的時間,即1562. 5/X( 64個分片并行處理). 假設(shè)每個分片每秒處理50 筆交易(設(shè)理想情況下X=50 TPS,但以太坊實際到不了這個數(shù)值,常規(guī)為10 多TPS,本文設(shè)定中間件時延小,無網(wǎng)絡(luò)波動等理想情況可以大幅提升TPS 效率). 則處理10 萬筆交易的理想平均時間約為:1562. 5/50=31. 25 s.
這個計算是基于理想化的假設(shè)條件,實際處理時間可能因網(wǎng)絡(luò)延遲、負載均衡、節(jié)點性能等因素有所不同. 所以我們可以看到,藍色線是常規(guī)分片處理(分片并行,無優(yōu)化,無擁堵)為花費時間為40 s,綠色線是通過MS2 分片矩陣結(jié)構(gòu)優(yōu)化后的跨片交易結(jié)果,因為保留了原來的橫向分片基礎(chǔ),縱向分配給不同slave 結(jié)構(gòu)的快速計算大幅縮短了所需處理的時長,僅用時約15 s. 由于模擬數(shù)據(jù)跨片交易數(shù)量的標(biāo)簽還不夠豐富(類似熱錢包等標(biāo)簽的地址少),實際交易中多交易對手的實體交易數(shù)據(jù)量非常大. 在此基礎(chǔ)上,結(jié)合橫向哈希時間鎖機制,理論上能大幅縮短跨片所需時長,矩陣結(jié)構(gòu)能應(yīng)對擁有更多交易對實體的交易,改進后的TPS能實現(xiàn)指數(shù)級的效率提高.
之所以縱向結(jié)構(gòu)交易處理速度快,其實很好理解,分片的作用是讓以太坊從網(wǎng)絡(luò)上的每個節(jié)點都要驗證每一筆交易的模式,轉(zhuǎn)型到只需要小部分的節(jié)點來驗證每一筆交易的模式. 而既要讓分片進行交易組打包,又要進行跨片交易處理,還要進行驗證,必然導(dǎo)致一個結(jié)構(gòu)臃腫的部分各方面處理效率都很低. 因此縱向和橫向解耦后將協(xié)調(diào)任務(wù)給master 鏈,交易計算給slave 鏈,分片鏈負責(zé)交易組打包和最終結(jié)果給信標(biāo)鏈驗證,各司其職就會大大提高整體的處理速度.
實驗2 現(xiàn)有各個分片的跨片交易都是基于信標(biāo)鏈的憑據(jù),改進后的本架構(gòu)是通過哈希時間鎖HTLC 來實現(xiàn)跨片交易的,因此本實驗通過啟用各master/slave 鏈上HTLC 功能的前后交易數(shù)據(jù)對比,來展示橫向交易能力的提升,實驗結(jié)果如圖6 所示.
可以看到,通過分別啟用不同鏈間的4、8、16、32 個HTLC,來橫向?qū)Ρ冉灰讜r延. 啟用數(shù)量較少的鏈,處理時延明顯更多,因為存儲于mongoDB 的跨片交易總量恒定,單位時間內(nèi)無法完成跨片交易的數(shù)量在交易隊列中一直排隊(嘗試匹配本片內(nèi)的交易對手),狀態(tài)無法從unpacked 變?yōu)閟uccess,所以其處理時延相對更大. 而啟用數(shù)量更多HTLC 的鏈,單位時間內(nèi)的跨片交易很快能匹配到交易對手,因此在總跨片交易量恒定的情況下,能用更少時間完成跨片交易. 同時,對比4、8、16、32 個HTLC 單位時間內(nèi)處理交易TPS 的情況,明顯發(fā)現(xiàn)啟用HTLC 數(shù)量更多,單位時間能處理的交易量也相應(yīng)更多. 而黃色折線不是平滑的線性增長,也跟機器節(jié)點處理性能(例如單個節(jié)點交易容納能力有限)和并發(fā)等因素有關(guān).
實驗3 在前面兩個實驗中,我們設(shè)定理想狀態(tài)下網(wǎng)絡(luò)延遲低、中間件性能好,但實際情況中受到共識機制同步率低、節(jié)點作惡、Gas 費設(shè)置較低、出塊緩慢等多種因素影響,并非所有交易都能最終成為success 狀態(tài),因此我們設(shè)定部分隨機交易Gas 費低達不到打包標(biāo)準(zhǔn),交易對手地址不存在(例如通過TP 錢包自定義生成靚號地址但還未上鏈)等常見情況,來模擬可能交易失敗的情形,以實驗啟用不同HTLC 面對無法處理的交易時應(yīng)對情況如何,如圖7 所示.
從圖7 可以明顯看到,啟用更多HTLC 的鏈的交易失敗率更低,因為部分交易除了Gas 費低無法被優(yōu)先打包外. 還有本分片內(nèi)無法匹配到交易對手,導(dǎo)致在隊列中一直被掛起,而HTLC 在低費率情況下盡可能幫助這些本片內(nèi)無交易對手的交易嘗試匹配. 因此當(dāng)存在更多匹配可能時,更多的成功交易將形成橫向分片間更少的交易失敗率.
5 結(jié)論
本文改進現(xiàn)有以太坊分片的優(yōu)化交易結(jié)構(gòu),提出基于主從模式的分片區(qū)塊鏈矩陣框架MS2framework. 其保留了現(xiàn)以太坊主鏈及信標(biāo)鏈的共識認證/驗證者管理功能的基礎(chǔ)上,將任務(wù)協(xié)調(diào)和交易處理功能解耦出來給master/slave 鏈單獨處理,每部分各司其職,進行任務(wù)協(xié)同. 解耦出的縱向結(jié)構(gòu)上設(shè)立master 鏈來承擔(dān)主要計算/交易壓縮/任務(wù)協(xié)調(diào)/數(shù)據(jù)備份等任務(wù),slave 鏈用于任務(wù)周期內(nèi)的交易執(zhí)行,通過State Channel 狀態(tài)通道方法將master 鏈、slave 鏈與分片鏈進行縱向鏈接.解耦出的橫向結(jié)構(gòu)上,通過哈希時間鎖技術(shù)來承擔(dān)跨片交易任務(wù),減輕原分片鏈臃腫的跨片任務(wù)處理機制,大幅提升跨片交易速度.
通過3 個實驗證明了縱向和橫向結(jié)構(gòu)上都有相當(dāng)不錯的交易性能提升. 該交易矩陣能極大地改善現(xiàn)有分片架構(gòu)交易能力的不足,且該結(jié)構(gòu)保留了分片進一步優(yōu)化拓展的可能性,對于實際落地應(yīng)用有相當(dāng)大的意義. 未來還可以對HTLC 橫向時間敏感性、拓寬縱向狀態(tài)通道協(xié)議兼容性等方向做進一步優(yōu)化.