- 區(qū)塊鏈底層設(shè)計(jì)Java實(shí)戰(zhàn)
- 牛冬編著
- 930字
- 2019-07-25 11:59:21
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ā)效率。
- UI設(shè)計(jì)基礎(chǔ)培訓(xùn)教程
- Getting Started with Gulp(Second Edition)
- Docker技術(shù)入門(mén)與實(shí)戰(zhàn)(第3版)
- Java程序設(shè)計(jì)與實(shí)踐教程(第2版)
- Building a Recommendation Engine with Scala
- PySide GUI Application Development(Second Edition)
- Python數(shù)據(jù)分析從0到1
- 碼上行動(dòng):用ChatGPT學(xué)會(huì)Python編程
- Learning Zurb Foundation
- Visual Basic程序設(shè)計(jì)
- Building Dynamics CRM 2015 Dashboards with Power BI
- C指針原理揭秘:基于底層實(shí)現(xiàn)機(jī)制
- STM8實(shí)戰(zhàn)
- Head First Kotlin程序設(shè)計(jì)
- 一步一步學(xué)Spring Boot:微服務(wù)項(xiàng)目實(shí)戰(zhàn)(第2版)