李春曉, 陳 勝, 鄭龍帥, 左 春, 蔣步云, 梁 賡
1(中國科學(xué)院 軟件研究所,北京 100190)
2(北京連琪科技有限公司,北京 100086)
區(qū)塊鏈(blockchain)作為一種分布式可信賬本[1],以其具備的分布式、去中心化、可追溯、不可篡改等特點(diǎn),在全球金融和IT等領(lǐng)域掀起一波發(fā)展熱潮,誕生了更靈活的商業(yè)模式[2],并推動(dòng)了信任經(jīng)濟(jì)時(shí)代的快速發(fā)展.
然而迄今為止,區(qū)塊鏈技術(shù)中最具影響力的領(lǐng)域仍然局限于以比特幣實(shí)驗(yàn)和以太坊為代表的公有鏈和虛擬貨幣領(lǐng)域[3-6],對(duì)于區(qū)塊鏈技術(shù)在企業(yè)級(jí)場(chǎng)景的應(yīng)用仍然處于探索階段[7,8].區(qū)塊鏈的核心價(jià)值是通過可被多方驗(yàn)證的賬本數(shù)據(jù)建立多方信任,公有鏈系統(tǒng)中固化的用戶匿名、激勵(lì)機(jī)制、完全去中心化、競(jìng)爭(zhēng)性共識(shí)都是在其特定場(chǎng)景下采用的技術(shù)手段而非核心價(jià)值,在企業(yè)應(yīng)用中,必須根據(jù)具體場(chǎng)景對(duì)其重新審視.現(xiàn)有的公有鏈開源程序難以為企業(yè)級(jí)場(chǎng)景所利用.
許可鏈對(duì)于參與組網(wǎng)的節(jié)點(diǎn)采取身份準(zhǔn)入,并在此基礎(chǔ)上建立安全的通信信道.相對(duì)于公有鏈提高了節(jié)點(diǎn)之間的信任程度,以此為基礎(chǔ),可以通過減少參與共識(shí)節(jié)點(diǎn)的數(shù)量、用協(xié)同性的共識(shí)代替公有鏈的競(jìng)爭(zhēng)性共識(shí),從而達(dá)到提高實(shí)時(shí)性和交易通量的企業(yè)應(yīng)用目標(biāo).因此,企業(yè)應(yīng)用場(chǎng)景通常選擇許可鏈的組網(wǎng)方式.現(xiàn)階段也出現(xiàn)了一些基于許可鏈面向企業(yè)應(yīng)用的開源組件,但它們或多或少存在以下問題.
· 系統(tǒng)缺乏模塊化設(shè)計(jì),系統(tǒng)各組成部分耦合高,難以對(duì)模塊進(jìn)行替換或裁剪;
· 設(shè)計(jì)的目標(biāo)場(chǎng)景過于多樣化,導(dǎo)致系統(tǒng)臃腫,當(dāng)面對(duì)單一場(chǎng)景時(shí),其裁剪工作量巨大;
· 缺乏性能的可擴(kuò)展性設(shè)計(jì),在BAAS(blockchain as a service)模式下,理想的超級(jí)節(jié)點(diǎn)應(yīng)該能做到節(jié)點(diǎn)整體或節(jié)點(diǎn)內(nèi)的某個(gè)處理環(huán)節(jié)自適應(yīng)業(yè)務(wù)壓力,算力可伸縮;
· 缺少直觀的對(duì)區(qū)塊如何形成的展示過程.
為了解決上述問題,本文提出了響應(yīng)式許可鏈的基礎(chǔ)組件——RepChain.目前,國內(nèi)并沒有同類的開源基礎(chǔ)組件,本文的原創(chuàng)性貢獻(xiàn)如下.
(1) 采用無協(xié)商隨機(jī)抽簽算法(consultation-free random draw algorithm with distributed environment,簡(jiǎn)稱CFRD)協(xié)同性共識(shí)代替公有鏈的競(jìng)爭(zhēng)性共識(shí);
(2) 以異步消息交互代替?zhèn)鹘y(tǒng)的方法調(diào)用,實(shí)現(xiàn)了模塊之間松耦合,方便根據(jù)不同場(chǎng)景對(duì)模塊進(jìn)行替換;
(3) 專注于提供必須的基礎(chǔ)模塊,用做加法的項(xiàng)目實(shí)施思路代替減法思路;
(4) 利用 Actor集群化[9],可以實(shí)現(xiàn)節(jié)點(diǎn)或節(jié)點(diǎn)內(nèi)部細(xì)粒度的自適應(yīng)彈性計(jì)算,根據(jù)業(yè)務(wù)壓力動(dòng)態(tài)地申請(qǐng)或釋放算力資源;
(5) 利用 Actor的位置透明性,根據(jù)合約信任程度的不同采用不同的合約部署策略,從而合理解決了合約的安全隔離與執(zhí)行性能之間存在的沖突;
(6) 采用圖形化的實(shí)時(shí)狀態(tài)顯示,搜集和直觀展示各節(jié)點(diǎn)入網(wǎng)與離網(wǎng)、數(shù)據(jù)同步、交易提交與傳播、出塊節(jié)點(diǎn)選舉、候選塊背書、正式出塊的完整過程.
本文第 1節(jié)介紹區(qū)塊鏈的核心價(jià)值和響應(yīng)式編程的特點(diǎn),并對(duì)比公有鏈和許可鏈的組網(wǎng)方式.第 2節(jié)介紹RepChain的系統(tǒng)結(jié)構(gòu),共分6個(gè)層次,對(duì)每一個(gè)層次的含義進(jìn)行說明.第3節(jié)介紹RepChain的各個(gè)組成模塊,對(duì)每個(gè)模塊的設(shè)計(jì)方案進(jìn)行說明.第4節(jié)介紹RepChain性能實(shí)驗(yàn).最后總結(jié)全文并進(jìn)行展望.
區(qū)塊鏈系統(tǒng)的核心價(jià)值是建立信任,區(qū)塊+鏈這種獨(dú)特的數(shù)據(jù)結(jié)構(gòu)[10]忠實(shí)、完整地記錄了行為主體簽名認(rèn)可的授權(quán)行為[11].用戶可以不信任區(qū)塊鏈系統(tǒng),但它出具的每條數(shù)據(jù)皆有其授權(quán)來源,是可追溯并可驗(yàn)證的.區(qū)塊鏈的實(shí)施要避免類似傳統(tǒng)系統(tǒng)越過行為主體的授權(quán)自行其是,并且好的區(qū)塊鏈系統(tǒng)應(yīng)該讓行為主體在做出授權(quán)之前,清楚認(rèn)識(shí)到其授權(quán)行為將可能面臨的風(fēng)險(xiǎn)[12,13].
區(qū)塊鏈的數(shù)據(jù)結(jié)構(gòu)如圖 1(a)所示,它是由一系列前后銜接的區(qū)塊組成,每個(gè)區(qū)塊里面包含按順序排列的交易[14-16],每一個(gè)交易包含行為主體對(duì)授權(quán)行為的簽名認(rèn)可,以此來滿足達(dá)共識(shí)[17]、可追溯[18]、防篡改[19]的目標(biāo),獨(dú)特的鏈?zhǔn)浇Y(jié)構(gòu)確保了數(shù)據(jù)只能增加不能刪除.
傳統(tǒng)應(yīng)用數(shù)據(jù)結(jié)構(gòu)如圖 1(b)所示,它是由各種表組成,數(shù)據(jù)本身缺乏可驗(yàn)證的授權(quán)來源,用戶只能選擇信任這個(gè)系統(tǒng);而對(duì)于區(qū)塊鏈來說,防篡改是指防止系統(tǒng)偽造或篡改數(shù)據(jù),用戶不需要信任系統(tǒng),只需要信任系統(tǒng)出具的可被驗(yàn)證的數(shù)據(jù).
通過區(qū)塊鏈和傳統(tǒng)應(yīng)用數(shù)據(jù)結(jié)構(gòu)的對(duì)比可以發(fā)現(xiàn):區(qū)塊鏈最大的用處是通過對(duì)參與方授權(quán)行為完整的、忠實(shí)的記錄來建立各個(gè)行為主體之間的信任,將對(duì)傳統(tǒng)系統(tǒng)的信任切換到對(duì)系統(tǒng)出具的可驗(yàn)證數(shù)據(jù)的信任,這是區(qū)塊鏈的本質(zhì)特征.
公有鏈通常采用匿名、開放的組網(wǎng)策略[20],采用激勵(lì)機(jī)制吸引更多的算力加入組網(wǎng);反過來,在龐大算力上形成的多數(shù)共識(shí),又確保了共識(shí)結(jié)果的可信.但同時(shí),公有鏈采用的這種大規(guī)模組網(wǎng)上的競(jìng)爭(zhēng)性共識(shí)導(dǎo)致其交易實(shí)時(shí)性差,交易通量不高.許可鏈面向企業(yè)聯(lián)盟式行業(yè)應(yīng)用,在身份準(zhǔn)入的基礎(chǔ)上建立安全信道,降低參與共識(shí)節(jié)點(diǎn)的規(guī)模,用協(xié)同性的共識(shí)算法取代公有鏈競(jìng)爭(zhēng)性的共識(shí)算法,這樣能夠較大地提高交易實(shí)時(shí)性和交易通量.
兩者的組網(wǎng)方式如圖2所示.
在圖 2(a)的公有鏈中,用戶節(jié)點(diǎn)B不需要其他節(jié)點(diǎn)(如在網(wǎng)節(jié)點(diǎn)A)審核并驗(yàn)明身份;在圖 2(b)的許可鏈中,用戶節(jié)點(diǎn)B入網(wǎng)申請(qǐng)需經(jīng)過其他節(jié)點(diǎn)(如在網(wǎng)節(jié)點(diǎn)A)進(jìn)行核驗(yàn)身份,并簽名擔(dān)保.在公有鏈中,密鑰是證明用戶身份的唯一手段;而在許可鏈中,負(fù)責(zé)核驗(yàn)的節(jié)點(diǎn)后續(xù)可以協(xié)助用戶恢復(fù)密鑰.通過兩者的比較可以發(fā)現(xiàn):許可鏈在準(zhǔn)入機(jī)制的基礎(chǔ)上更容易支持密鑰對(duì)的恢復(fù),更好地保障用戶的權(quán)益,同時(shí)還能更好地保護(hù)數(shù)據(jù)隱私.
傳統(tǒng)面向?qū)ο缶幊棠P驮趹?yīng)對(duì)高并發(fā)分布式系統(tǒng)時(shí)存在局限性.例如多個(gè)線程調(diào)用同一個(gè)方法時(shí),需要用分布式鎖保證共享變量的一致性,但加鎖嚴(yán)重限制并發(fā)、多臺(tái)機(jī)器通信的網(wǎng)絡(luò)延遲過高且容易導(dǎo)致死鎖.
Actor模型[21]是響應(yīng)式編程[22]的一種實(shí)現(xiàn),在Actor系統(tǒng)中,每個(gè)實(shí)體都是一個(gè)響應(yīng)消息的Actor,Actor的內(nèi)部狀態(tài)是私有的,以消息驅(qū)動(dòng)代替?zhèn)鹘y(tǒng)的方法調(diào)用完成交互.經(jīng)過驗(yàn)證,采用Akka Actor模型的scala語言顯著降低了通信延遲,且在維持分布式系統(tǒng)中的休眠進(jìn)程時(shí)表現(xiàn)最佳[23].
RepChain的實(shí)現(xiàn)采用了Actor模型[24],表現(xiàn)出良好的容錯(cuò)性/韌性;同時(shí),易于對(duì)系統(tǒng)的瓶頸環(huán)節(jié)進(jìn)行算力調(diào)整.例如,在RepChain的性能優(yōu)化過程中發(fā)現(xiàn),請(qǐng)求背書環(huán)節(jié)存在比較嚴(yán)重的阻塞(耗時(shí)約120ms),拖累了整個(gè)系統(tǒng)的每秒交易數(shù)(transactions per second,簡(jiǎn)稱TPS).因此,決定將背書請(qǐng)求的處理從原來的單Actor實(shí)例串行改為多Actor實(shí)例并行:將負(fù)責(zé)背書請(qǐng)求的模塊調(diào)整為負(fù)責(zé)調(diào)度的Actor和負(fù)責(zé)背書處理的子Actor;同時(shí)保持對(duì)外服務(wù)的背書請(qǐng)求消息格式不變,子Actor對(duì)背書請(qǐng)求消息的處理邏輯不變.改進(jìn)后背書處理耗時(shí)降低了40ms,系統(tǒng)的TPS指標(biāo)提高了60,改動(dòng)的代碼數(shù)不到300行[25].而同類系統(tǒng)采用Kubernetes等工具在容器級(jí)別進(jìn)行算力調(diào)度,難以實(shí)現(xiàn)類似的模塊/子模塊級(jí)別的細(xì)粒度算力調(diào)整.
參考工信部白皮書的分層模型[2],RepChain針對(duì)企業(yè)級(jí)應(yīng)用場(chǎng)景去掉了激勵(lì)層,增加了 API層和監(jiān)控層.RepChain系統(tǒng)共分為 6層,從底層到上層分別是數(shù)據(jù)層、網(wǎng)絡(luò)層、共識(shí)層、合約層、API層、監(jiān)控層,如圖 3所示.
(1) 數(shù)據(jù)層:負(fù)責(zé)數(shù)據(jù)格式定義,數(shù)據(jù)結(jié)構(gòu)采用Protocol Buffers定義文件,并以此為基礎(chǔ)實(shí)現(xiàn)數(shù)據(jù)的交換、驗(yàn)證、存儲(chǔ)、讀取及檢索;
(2) 網(wǎng)絡(luò)層:采用JDK內(nèi)置的TLS實(shí)現(xiàn),支持入網(wǎng)許可驗(yàn)證,在此基礎(chǔ)上進(jìn)行去中心化的gossip組網(wǎng),網(wǎng)絡(luò)傳播支持P2P和Pub/Sub兩種方式;
(3) 共識(shí)層:完成區(qū)塊的輸入共識(shí)和輸出共識(shí).采用兼顧實(shí)時(shí)性和安全性的CFRD算法,既照顧到交易的實(shí)時(shí)性要求,又能在一定程度防止節(jié)點(diǎn)串通作弊;輸入共識(shí)對(duì)入塊的交易順序達(dá)成一致,輸出共識(shí)對(duì)交易順序執(zhí)行的結(jié)果達(dá)成一致;
(4) 合約層:為合約執(zhí)行提供上下文環(huán)境,支持合約的動(dòng)態(tài)部署、運(yùn)行時(shí)加載和編譯執(zhí)行;
(5) API層:提供外部接口,允許第三方應(yīng)用以Restful的形式與系統(tǒng)交互,并允許開發(fā)者通過 Swagger UI進(jìn)行在線測(cè)試.API層提供交易簽名提交、區(qū)塊和交易檢索等基本功能;
(6) 監(jiān)控層:在區(qū)塊鏈網(wǎng)絡(luò)中收集事件/日志,并將其以Protocol Buffers的格式推送至Web端,以H5圖形技術(shù)進(jìn)行實(shí)時(shí)狀態(tài)的可視化展示和日志回放.
RepChain采用輕量化和標(biāo)準(zhǔn)化設(shè)計(jì),相比重新開發(fā)的非標(biāo)準(zhǔn)實(shí)現(xiàn)更穩(wěn)定和易于升級(jí)(例如組網(wǎng)信道從TLS1.2升級(jí)到TLS1.3).在目前已開源的功能完整的許可鏈基礎(chǔ)組件中,RepChain代碼體量遠(yuǎn)小于同類實(shí)現(xiàn),全部代碼僅有11 000行左右,更適合在工程實(shí)踐中根據(jù)業(yè)務(wù)場(chǎng)景進(jìn)行定制修改.
RepChain模塊化設(shè)計(jì)具備高內(nèi)聚低耦合的特點(diǎn),每個(gè)組網(wǎng)節(jié)點(diǎn)對(duì)應(yīng)一個(gè)ActorSystem,主要功能模塊均封裝為Actor,包括API服務(wù)、合約執(zhí)行、共識(shí)策略、事件訂閱,如圖4所示.去掉一個(gè)Actor不會(huì)影響其他Actor之間的消息交互,也不會(huì)產(chǎn)生編譯依賴的問題,便于進(jìn)行系統(tǒng)調(diào)整.
(1) 合約執(zhí)行
合約的安全隔離與執(zhí)行性能是困擾開發(fā)者的普遍問題,為了避免非信任合約執(zhí)行時(shí)對(duì)節(jié)點(diǎn)主機(jī)造成資源(CPU、內(nèi)存、存儲(chǔ))過度占用,通常都會(huì)對(duì)合約的執(zhí)行采取進(jìn)程隔離措施.但是由于合約執(zhí)行仍然依賴節(jié)點(diǎn)主進(jìn)程維護(hù)的WorldState,因此不得不付出跨進(jìn)程通信的性能代價(jià).
RepChain采用的Actor模型具備位置透明性,因此能夠?qū)崿F(xiàn)在合約執(zhí)行時(shí),按照合約的受信任程度,決定在節(jié)點(diǎn)進(jìn)程內(nèi)加載執(zhí)行,還是獨(dú)立的 JVM 進(jìn)程執(zhí)行,抑或在遠(yuǎn)程主機(jī)執(zhí)行.根據(jù)合約信任程度的不同,采用不同的合約部署策略,從而合理解決了合約的安全隔離與執(zhí)行性能之間存在的沖突.
另外,根據(jù)具體場(chǎng)景,Actor模型能夠?qū)霞s的執(zhí)行方式進(jìn)行調(diào)度:首先,執(zhí)行請(qǐng)求被發(fā)送到根路由 Actor,根路由 Actor將根據(jù)合約機(jī)制,決定哪些合約需要串行執(zhí)行,哪些合約能夠并發(fā)執(zhí)行;然后,根路由Actor將串行執(zhí)行請(qǐng)求發(fā)送給單例合約容器,將并發(fā)執(zhí)行請(qǐng)求發(fā)送給下一子路由Actor,以便調(diào)度更多Actor參與并發(fā)執(zhí)行.如圖5所示.
(2) 存儲(chǔ)
RepChain存儲(chǔ)模塊由文件存儲(chǔ)和LevelDB構(gòu)成,文件用來存放區(qū)塊數(shù)據(jù)以及鏈信息,LevelDB存放區(qū)塊和交易的索引信息以及供合約讀寫的 WorldState信息.存儲(chǔ)模塊提供快照以及狀態(tài)回滾以支持交易預(yù)執(zhí)行,對(duì)正式出塊的交易執(zhí)行結(jié)果進(jìn)行數(shù)據(jù)驗(yàn)證之后持久化.
RepChain存儲(chǔ)結(jié)構(gòu)設(shè)計(jì)如圖6所示,功能包括:
· 支持區(qū)塊的讀寫,對(duì)區(qū)塊信息及交易信息的索引和檢索;
· 支持在WorldState快照之上的讀寫以及交易預(yù)執(zhí)行的狀態(tài)回滾;
· 支持對(duì)WorldState進(jìn)行Merkle計(jì)算.
在文件系統(tǒng)API之上,采用分段存儲(chǔ)技術(shù),避免單個(gè)大文件導(dǎo)致區(qū)塊鏈數(shù)據(jù)的寫入/讀入性能下降;并且為了實(shí)現(xiàn)區(qū)塊數(shù)據(jù)的快速檢索,在LevelDB中建立對(duì)區(qū)塊數(shù)據(jù)的內(nèi)容索引,以支持高性能的檢索.
(3) 通信
通信模塊建立在 Akka Cluster之上,組網(wǎng)節(jié)點(diǎn)之間以及節(jié)點(diǎn)與 Web端之間消息的序列化均采用 Protocol Buffers(簡(jiǎn)稱 Protobuf)協(xié)議.
Akka Cluster采用去中心化的gossip協(xié)議組網(wǎng),它具備以下功能.
· 節(jié)點(diǎn)之間采用TLS1.2作為安全通信信道;
· 通過訂閱系統(tǒng)事件,每個(gè)節(jié)點(diǎn)可以維持一張全網(wǎng)在線節(jié)點(diǎn)視圖;
· 支持節(jié)點(diǎn)之間采用發(fā)布/訂閱方式通信;
· 支持節(jié)點(diǎn)之間采用P2P方式通信.
(4) 共識(shí)
引入合約機(jī)制之后,不僅需要對(duì)打包入塊的交易及其順序進(jìn)行輸入共識(shí),還需要對(duì)順序執(zhí)行交易對(duì)“賬本”產(chǎn)生的影響進(jìn)行輸出共識(shí).如圖7所示.
完成數(shù)據(jù)同步是參與共識(shí)的前提,只有數(shù)據(jù)達(dá)到最新區(qū)塊高度的節(jié)點(diǎn)才有能力參與共識(shí).RepChain共識(shí)采用CFRD算法,各節(jié)點(diǎn)在無須協(xié)商的前提下,采用全網(wǎng)一致的偽隨機(jī)種子抽簽決定出塊節(jié)點(diǎn)順位序列.在每個(gè)時(shí)間段,只有唯一的一個(gè)節(jié)點(diǎn)擁有全網(wǎng)認(rèn)可的出塊資格.如果當(dāng)前出塊節(jié)點(diǎn)不能正常出塊,隨著時(shí)間的推移,出塊權(quán)將順位給下一個(gè)出塊節(jié)點(diǎn).
RepChain采用兩階段共識(shí):第1階段出塊節(jié)點(diǎn)負(fù)責(zé)將收集到并通過簽名驗(yàn)證的交易按順序打包入塊,附上預(yù)執(zhí)行獲得的輸出結(jié)果之后,簽名形成預(yù)出塊,然后向參與共識(shí)的節(jié)點(diǎn)發(fā)送預(yù)出塊并請(qǐng)求背書;第2階段出塊節(jié)點(diǎn)收集到足夠的背書之后,將背書附加到預(yù)出塊形成正式出塊,向全網(wǎng)廣播.兩階段機(jī)制能夠避免惡意節(jié)點(diǎn)的非法出塊.
(5) 事件訂閱與推送
RepChain事件模塊通過Akka Cluster的Sub/Pub,以Event Topic廣播到提供事件服務(wù)的Event Actor.Event Actor訂閱Event Topic并接收事件消息,通過EventServer將消息序列化為Protocal Buffers字節(jié)流并推送到瀏覽器,瀏覽器通過WebSocket Client接收到推送的字節(jié)流后將其反序列化為Event對(duì)象,然后調(diào)用可視化模塊進(jìn)行實(shí)時(shí)狀態(tài)展示.主要過程如圖8所示.
(6) 可視化
可視化模塊將從系統(tǒng)中收集的實(shí)時(shí)狀態(tài),以圖形化的方式呈現(xiàn)給用戶.
RepChain提供的實(shí)時(shí)狀態(tài)圖如圖9所示:左邊是圖形區(qū);右上部分是塊堆棧區(qū),顯示不斷生成的區(qū)塊以及包含的交易內(nèi)容;右下部分是日志區(qū),以文本方式滾動(dòng)顯示接收到的事件.圖形區(qū)圓周代表組網(wǎng),圓周上的小圓代表當(dāng)前參與組網(wǎng)的節(jié)點(diǎn).小圓的不同顏色代表節(jié)點(diǎn)處于不同狀態(tài):亮綠色代表出塊節(jié)點(diǎn),深綠色代表背書節(jié)點(diǎn),藍(lán)色代表當(dāng)前未完成數(shù)據(jù)同步的節(jié)點(diǎn).
圖形區(qū)有以下幾個(gè)Topic.
1) RepChain:組網(wǎng)節(jié)點(diǎn)的個(gè)數(shù);
2) Transaction:節(jié)點(diǎn)間發(fā)生交易請(qǐng)求;
3) Endorsement:節(jié)點(diǎn)需要背書;
4) Block:交易達(dá)成出塊;
5) Sync:當(dāng)新加入的節(jié)點(diǎn)與已有節(jié)點(diǎn)區(qū)塊高度不一致時(shí),發(fā)出數(shù)據(jù)同步請(qǐng)求.
組網(wǎng)節(jié)點(diǎn)與Topic之間的連線代表消息通信,其中,紅線代表發(fā)送Topic消息,綠線代表從訂閱的Topic接收到消息.實(shí)時(shí)圖能夠直觀展示節(jié)點(diǎn)入網(wǎng)與離網(wǎng)、數(shù)據(jù)同步、交易提交與傳播、出塊節(jié)點(diǎn)選舉、候選塊背書、正式出塊的完整過程.
Pongnumkul[26]完成了以太坊(版本 geth 1.5.8)在局域網(wǎng)上的性能測(cè)試實(shí)驗(yàn).作為對(duì)比,本文在局域網(wǎng)上設(shè)計(jì)了RepChain(版本improved_tps_20181026)的性能測(cè)試實(shí)驗(yàn)[24],實(shí)驗(yàn)結(jié)果見表1.
Table 1 Contract of experimental result表1 實(shí)驗(yàn)結(jié)果對(duì)比
實(shí)驗(yàn)結(jié)果顯示:交易量從100~1 000時(shí),以太坊的交易通量下降、時(shí)延顯著增加,RepChain的交易通量上升、時(shí)延有所增加;在上述實(shí)驗(yàn)條件下,RepChain的交易通量均高于以太坊,時(shí)延均低于以太坊,且隨著交易量的增大優(yōu)勢(shì)更加明顯.
實(shí)驗(yàn)結(jié)果表明,CFRD協(xié)同性共識(shí)算法比公有鏈的競(jìng)爭(zhēng)性共識(shí)算法在交易通量 TPS和時(shí)延方面有較大改善,從而提升了響應(yīng)式許可鏈的整體性能.
另外,本文在 30個(gè)節(jié)點(diǎn)組網(wǎng)的環(huán)境下,采用手動(dòng)終止節(jié)點(diǎn)進(jìn)程的方式模擬個(gè)別節(jié)點(diǎn)的機(jī)器故障,系統(tǒng)都能夠在90s內(nèi)重新同步全網(wǎng)節(jié)點(diǎn)狀態(tài)并繼續(xù)正確運(yùn)轉(zhuǎn).實(shí)驗(yàn)結(jié)果表明:在分布式環(huán)境下,RepChain具備良好的容錯(cuò)性/韌性.因?yàn)锳ctor模型的消息驅(qū)動(dòng)只確保消息達(dá)到的順序,不確保消息一定送達(dá),所以程序邏輯不能假設(shè)發(fā)出的消息一定收到預(yù)期的回應(yīng).在這種編程約束下,系統(tǒng)能夠應(yīng)對(duì)分布式環(huán)境下的各類異常.
區(qū)塊鏈通過忠實(shí)完整地記錄行為主體的授權(quán)行為,在參與者之間共享可驗(yàn)證、防篡改、可追溯授權(quán)的記錄以建立信任.傳統(tǒng)應(yīng)用中的數(shù)據(jù)存在著被非法篡改的風(fēng)險(xiǎn),而區(qū)塊鏈應(yīng)用通過對(duì)交易簽名,保證了只有行為主體可以增加數(shù)據(jù);通過對(duì)鏈?zhǔn)絽^(qū)塊的簽名,保證了已生成數(shù)據(jù)的固定(即不可刪除或修改),因而在行為主體之間建立起了基于可信數(shù)據(jù)的信任.當(dāng)前,區(qū)塊鏈以公有鏈方式實(shí)現(xiàn)的數(shù)字資產(chǎn)應(yīng)用引人矚目,但在企業(yè)場(chǎng)景的應(yīng)用探索才剛剛起步.
RepChain以企業(yè)應(yīng)用為目標(biāo)場(chǎng)景,提供了國內(nèi)第一款響應(yīng)式、輕量級(jí)的許可鏈基礎(chǔ)組件,優(yōu)化了交易的實(shí)時(shí)性和交易通量.考慮到應(yīng)用場(chǎng)景的多樣性,RepChain專注于基礎(chǔ)功能,并且盡量保持模塊之間的松耦合,以方便在具體實(shí)施中進(jìn)行調(diào)整.
目前,RepChain已經(jīng)應(yīng)用到存證溯源、供應(yīng)鏈升級(jí)、消費(fèi)積分等領(lǐng)域.基于RepChain的服裝供應(yīng)鏈實(shí)現(xiàn)了各參與方的權(quán)益保障,進(jìn)一步地各參與方通過可信及時(shí)的銷售數(shù)據(jù)反饋,能夠有效提高其市場(chǎng)應(yīng)變能力.RepChain為傳統(tǒng)集中化的電子證據(jù)存證服務(wù)注入防篡改和可追溯的特性,使其存證要素可被驗(yàn)證,從而保護(hù)了電子證據(jù)的完整性,并奠定了其可采用性的基礎(chǔ).
我們希望對(duì)RepChain的開源能夠賦予它更多的實(shí)踐機(jī)會(huì),在歷練中不斷改進(jìn),在實(shí)體經(jīng)濟(jì)加區(qū)塊鏈的創(chuàng)新發(fā)展中發(fā)揮應(yīng)有的作用.