








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