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