官术网_书友最值得收藏!

2.4 區(qū)塊鏈通用架構(gòu)

至此,我們已經(jīng)了解了比特幣、以太坊和Hyperledger的架構(gòu)設(shè)計(jì),三者根據(jù)使用場(chǎng)景的不同而有不同的設(shè)計(jì),但還是能抽象出一些共同點(diǎn),我們可以基于這些共同點(diǎn)設(shè)計(jì)企業(yè)級(jí)聯(lián)盟鏈的底層架構(gòu)。

本書(shū)提供的聯(lián)盟鏈底層架構(gòu)如圖2-4所示。

圖2-4 聰盟鏈底層架構(gòu)

在圖2-4中,我們將區(qū)塊鏈底層分為6層,從下至上分別是存儲(chǔ)層、數(shù)據(jù)層、網(wǎng)絡(luò)層、共識(shí)層、激勵(lì)層和應(yīng)用層。

存儲(chǔ)層主要存儲(chǔ)交易日志和交易相關(guān)的內(nèi)容。其中,交易日志基于LogBack實(shí)現(xiàn)。交易的內(nèi)容由內(nèi)置的SQLite數(shù)據(jù)庫(kù)存儲(chǔ),讀寫(xiě)SQLite數(shù)據(jù)庫(kù)可以基于JPA實(shí)現(xiàn);交易的上鏈元數(shù)據(jù)信息由RocksDB或LevelDB存儲(chǔ)。

數(shù)據(jù)層由區(qū)塊和區(qū)塊“鏈”(區(qū)塊的鏈?zhǔn)浇Y(jié)構(gòu))組成。其中,區(qū)塊中還會(huì)涉及交易列表在Merkle樹(shù)中的存儲(chǔ)及根節(jié)點(diǎn)哈希值的計(jì)算。交易的內(nèi)容也需要加密處理。由于在聯(lián)盟鏈中有多個(gè)節(jié)點(diǎn),為有效管理節(jié)點(diǎn)數(shù)據(jù)及保障數(shù)據(jù)安全,建議為不同節(jié)點(diǎn)分配不同的公、私鑰,以便加密使用。

網(wǎng)絡(luò)層主要提供共識(shí)達(dá)成及數(shù)據(jù)通信的底層支持。在區(qū)塊鏈中,每個(gè)節(jié)點(diǎn)既是數(shù)據(jù)的發(fā)送方,又是數(shù)據(jù)的接收方。可以說(shuō)每個(gè)節(jié)點(diǎn)既是客戶(hù)端,又是服務(wù)端,因此需要基于長(zhǎng)連接來(lái)實(shí)現(xiàn)。在本書(shū)中,我們可以基于WebSocket用原生方式建立長(zhǎng)連接,也可以基于長(zhǎng)連接第三方工具包實(shí)現(xiàn)。

共識(shí)層采用PBFT(Practical Byzantine Fault Tolerance)共識(shí)算法。不同于公鏈的挖礦機(jī)制,聯(lián)盟鏈中更注重各節(jié)點(diǎn)信息的統(tǒng)一,因此可以省去挖礦,直奔共識(shí)達(dá)成的目標(biāo)。

激勵(lì)層主要是幣(Coin)和Token的頒發(fā)和流通。在公鏈中,激勵(lì)是公鏈的靈魂;但在聯(lián)盟鏈中不是必需的。本書(shū)不對(duì)聯(lián)盟鏈中幣或Token如何建立經(jīng)濟(jì)模型和高效使用,甚至是增值進(jìn)行說(shuō)明,僅從技術(shù)維度實(shí)現(xiàn)幣或Token的相關(guān)邏輯。

應(yīng)用層主要是聯(lián)盟鏈中各個(gè)產(chǎn)品的落地。一般聯(lián)盟鏈的應(yīng)用層都是面向行業(yè)的,解決行業(yè)內(nèi)的問(wèn)題。

Java版聯(lián)盟鏈的部署架構(gòu)如圖2-5所示。

圖2-5 Java版聯(lián)盟鏈的部署架構(gòu)

聯(lián)盟鏈由1個(gè)超級(jí)節(jié)點(diǎn)和若干個(gè)普通節(jié)點(diǎn)組成,超級(jí)節(jié)點(diǎn)除具備普通節(jié)點(diǎn)的功能外,還具備在聯(lián)盟中實(shí)施成員管理、權(quán)限管理、數(shù)據(jù)監(jiān)控等工作。因此相較于完全去中心化的公鏈,聯(lián)盟鏈?zhǔn)遣糠秩ブ行幕模蛘哒f(shuō)聯(lián)盟的“鏈”是去中心化的,但是聯(lián)盟鏈的管理是中心化的。

整個(gè)開(kāi)發(fā)環(huán)境建議基于Spring Boot 2.0實(shí)現(xiàn)。基于Spring Boot開(kāi)發(fā),可以省去大量的xml配置文件的編寫(xiě),能極大簡(jiǎn)化工程中在POM文件配置的復(fù)雜依賴(lài)。Spring Boot還提供了各種starter,可以實(shí)現(xiàn)自動(dòng)化配置,提高開(kāi)發(fā)效率。

主站蜘蛛池模板: 通榆县| 永州市| 育儿| 河曲县| 潍坊市| 瓮安县| 汤原县| 唐河县| 南丹县| 刚察县| 乾安县| 顺昌县| 卢湾区| 株洲市| 宜良县| 拜城县| 台南市| 泽库县| 宕昌县| 灌阳县| 方城县| 北宁市| 长宁区| 斗六市| 连平县| 阜新市| 彭山县| 莱州市| 张家口市| 青龙| 岗巴县| 准格尔旗| 永善县| 法库县| 巢湖市| 定日县| 肥乡县| 浮梁县| 湖南省| 黄龙县| 惠安县|