資料介紹
軟件簡(jiǎn)介
md_blockchain是一個(gè)Java區(qū)塊鏈平臺(tái),基于Springboot開發(fā)的區(qū)塊鏈平臺(tái)。
理想中的區(qū)塊鏈平臺(tái):
項(xiàng)目說明
主要有存儲(chǔ)模塊、網(wǎng)絡(luò)模塊、PBFT共識(shí)算法、加密模塊、區(qū)塊解析入庫等。
該項(xiàng)目屬于"鏈",非"幣"。不涉及虛擬幣和挖礦。
存儲(chǔ)模塊
Block內(nèi)存儲(chǔ)的是類Sql語句。聯(lián)盟間預(yù)先設(shè)定好符合業(yè)務(wù)場(chǎng)景需要的數(shù)據(jù)庫表結(jié)構(gòu),然后設(shè)定好各個(gè)節(jié)點(diǎn)對(duì)表的操作權(quán)限(ADD,UPDATE,DELETE),將來各個(gè)節(jié)點(diǎn)就可以按照自己被允許的權(quán)限,進(jìn)行Sql語句的編寫,并打包至Block中,再全網(wǎng)廣播,等待全網(wǎng)校驗(yàn)簽名、權(quán)限等信息的合法性。如果Block合法,則進(jìn)入PBFT共識(shí)算法機(jī)制,各節(jié)點(diǎn)開始按照PrePrepare、Prepare、Commit等狀態(tài)依次執(zhí)行,直到2f+1個(gè)commit后,開始進(jìn)行本地生成新區(qū)塊。新區(qū)塊生成后,各節(jié)點(diǎn)進(jìn)行區(qū)塊內(nèi)容解析,并落地入庫的操作。
場(chǎng)景就比較廣泛了,可以設(shè)定不同的表結(jié)構(gòu),或者多個(gè)表,進(jìn)而能完成各自類型信息的存儲(chǔ)。譬如商品溯源,從生產(chǎn)商、運(yùn)輸、經(jīng)銷商、消費(fèi)者等,每個(gè)環(huán)節(jié)都可以對(duì)某個(gè)商品進(jìn)行ADD信息的操作。
存儲(chǔ)采用的是key-value數(shù)據(jù)庫rocksDB,了解比特幣的知道,比特幣用的是levelDB,都是類似的東西??梢酝ㄟ^修改yml中db.levelDB為true,db.RocksDB為false來動(dòng)態(tài)切換使用哪個(gè)數(shù)據(jù)庫。
結(jié)構(gòu)類似于sql的語句,如ADD(增刪改) tableName(表名)ID(主鍵) JSON(該記錄的json)。這里設(shè)置了回滾的邏輯,也就是當(dāng)你做了一個(gè)ADD操作時(shí),會(huì)同時(shí)存儲(chǔ)一條Delete語句,以用于將來可能的回滾操作。
網(wǎng)絡(luò)模塊
網(wǎng)絡(luò)層,采用的是各節(jié)點(diǎn)互相長(zhǎng)連接、斷線重連,然后維持心跳包。網(wǎng)絡(luò)框架使用的是t-io,也是oschina的知名開源項(xiàng)目。t-io采用了AIO的方式,在大量長(zhǎng)連接情況下性能優(yōu)異,資源占用也很少,并且具備group功能,特別適合于做多個(gè)聯(lián)盟鏈的SaaS平臺(tái)。并且包含了心跳包、斷線重連、retry等優(yōu)秀功能。
在項(xiàng)目中,每個(gè)節(jié)點(diǎn)即是server,又是client,作為server則被其他的N-1個(gè)節(jié)點(diǎn)連接,作為client則去連接其他N-1個(gè)節(jié)點(diǎn)的server。同一個(gè)聯(lián)盟,設(shè)定一個(gè)Group,每次發(fā)消息,直接調(diào)用sendGroup方法即可。
但仍需要注意的是,由于項(xiàng)目采用了pbft共識(shí)算法,在達(dá)到共識(shí)的過程中,會(huì)產(chǎn)生N的3次方數(shù)量的網(wǎng)絡(luò)通信,當(dāng)節(jié)點(diǎn)數(shù)量較多,如已達(dá)到100時(shí),每次共識(shí)將會(huì)給網(wǎng)絡(luò)帶來沉重的負(fù)擔(dān)。這是算法本身的限制。
共識(shí)模塊PBFT
分布式共識(shí)算法是分布式系統(tǒng)的核心,常見的有Paxos、pbft、bft、raft、pow等。區(qū)塊鏈中常見的是POW、POS、DPOS、pbft等。
比特幣采用了POW工作量證明,需要耗費(fèi)大量的資源進(jìn)行hash運(yùn)算(挖礦),由礦工來完成生成Block的權(quán)利。其他多是采用選舉投票的方式來決定誰來生成Block。共同的特點(diǎn)就是只能特定的節(jié)點(diǎn)來生成區(qū)塊,然后廣播給其他人。
區(qū)塊鏈分如下三類:
私有鏈:這是指在企業(yè)內(nèi)部部署的區(qū)塊鏈應(yīng)用,所有節(jié)點(diǎn)都是可以信任的,不存在惡意節(jié)點(diǎn);
聯(lián)盟鏈:半封閉生態(tài)的交易網(wǎng)絡(luò),存在不對(duì)等信任的節(jié)點(diǎn),可能存在惡意節(jié)點(diǎn);
公有鏈:開放生態(tài)的交易網(wǎng)絡(luò),為聯(lián)盟鏈和私有鏈等提供全球交易網(wǎng)絡(luò)。
由于私有鏈?zhǔn)欠忾]生態(tài)的存儲(chǔ)系統(tǒng),因此采用Paxos類共識(shí)算法(過半同意)可以達(dá)到最優(yōu)的性能;聯(lián)盟鏈有半公開半開放特性,因此拜占庭容錯(cuò)是適合選擇之一,例如IBM超級(jí)賬本項(xiàng)目;對(duì)于公有鏈來說,這種共識(shí)算法的要求已經(jīng)超出了普通分布式系統(tǒng)構(gòu)建的范疇,再加上交易的特性,因此需要引入更多的安全考慮。所以比特幣的POW是個(gè)非常好的選擇。
我們這里可選的是raft和pbft,分別做私鏈和聯(lián)盟鏈,項(xiàng)目中我使用了修改過的pbft共識(shí)算法。
先來簡(jiǎn)單了解pbft:
(1)從全網(wǎng)節(jié)點(diǎn)選舉出一個(gè)主節(jié)點(diǎn)(Leader),新區(qū)塊由主節(jié)點(diǎn)負(fù)責(zé)生成。
(2)每個(gè)節(jié)點(diǎn)把客戶端發(fā)來的交易向全網(wǎng)廣播,主節(jié)點(diǎn)將從網(wǎng)絡(luò)收集到需放在新區(qū)塊內(nèi)的多個(gè)交易排序后存入列表,并將該列表向全網(wǎng)廣播。
(3)每個(gè)節(jié)點(diǎn)接收到交易列表后,根據(jù)排序模擬執(zhí)行這些交易。所有交易執(zhí)行完后,基于交易結(jié)果計(jì)算新區(qū)塊的哈希摘要,并向全網(wǎng)廣播。
(4)如果一個(gè)節(jié)點(diǎn)收到的2f(f為可容忍的拜占庭節(jié)點(diǎn)數(shù))個(gè)其它節(jié)點(diǎn)發(fā)來的摘要都和自己相等,就向全網(wǎng)廣播一條commit消息。
(5)如果一個(gè)節(jié)點(diǎn)收到2f+1條(包括自己)commit消息,即可提交新區(qū)塊到本地的區(qū)塊鏈和狀態(tài)數(shù)據(jù)庫。
(6)客戶端收到f + 1個(gè)成功(即便有f個(gè)失敗、再f個(gè)惡意返回的錯(cuò)誤信息,f + 1個(gè)正確的也是多數(shù)派)的返回,即可認(rèn)為該次寫入請(qǐng)求是成功的。
可以看到,傳統(tǒng)的pbft是需要先選舉出leader的,然后由leader來搜集交易,并打包,然后廣播出去。然后各個(gè)節(jié)點(diǎn)開始對(duì)新Block進(jìn)行校驗(yàn)、投票、累積commit數(shù)量,最后落地。
而我這里對(duì)pbft做了修改,這是一個(gè)聯(lián)盟,各個(gè)節(jié)點(diǎn)是平等的,而且性能要高。所以我不想讓每個(gè)節(jié)點(diǎn)都生成一個(gè)指令后,發(fā)給其他節(jié)點(diǎn),再大家選舉出一個(gè)節(jié)點(diǎn)來搜集網(wǎng)絡(luò)上的指令組合再生成Block,太復(fù)雜了,而且又存在了leader節(jié)點(diǎn)的故障隱患。
我對(duì)pbft的修改是,不需要選擇leader,任何節(jié)點(diǎn)都可以構(gòu)建Block,然后全網(wǎng)廣播。其他節(jié)點(diǎn)收到該Block請(qǐng)求時(shí)即進(jìn)入Pre-Prepare狀態(tài),校驗(yàn)格式、hash、簽名、和table的權(quán)限,校驗(yàn)通過后,進(jìn)入Prepare狀態(tài),并全網(wǎng)廣播狀態(tài)。待自己累積的各節(jié)點(diǎn)Prepare的數(shù)量大于2f+1時(shí),進(jìn)入commit狀態(tài),并全網(wǎng)廣播該狀態(tài)。待自己累積的各節(jié)點(diǎn)Commit的數(shù)量大于2f+1時(shí),認(rèn)為已達(dá)成共識(shí),將Block加入?yún)^(qū)塊鏈中,然后執(zhí)行Block中sql語句。
很明顯,和有l(wèi)eader時(shí)相比,缺少了順序的概念。有l(wèi)eader時(shí)能保證Block的順序,當(dāng)有并發(fā)生成Block的需求時(shí),leader能按照順序進(jìn)行廣播。譬如大家都已經(jīng)到number=5的區(qū)塊了,然后需要再生成2個(gè),有l(wèi)eader時(shí),則會(huì)按照6、7的順序來生成。而沒有l(wèi)eader時(shí),則可能發(fā)生多節(jié)點(diǎn)同時(shí)生成6的情況。為了避免分叉,我做了一些處理,具體的可以在代碼里看實(shí)現(xiàn)邏輯。
區(qū)塊信息查詢
各節(jié)點(diǎn)通過執(zhí)行相同的sql來實(shí)現(xiàn)一個(gè)同步的sqlite數(shù)據(jù)庫(或mysql等其他關(guān)系型數(shù)據(jù)庫),將來對(duì)數(shù)據(jù)的查詢都是直接查詢sqlite,性能高于傳統(tǒng)的區(qū)塊鏈項(xiàng)目。
由于各個(gè)節(jié)點(diǎn)都能生成Block,在高并發(fā)下會(huì)出現(xiàn)區(qū)塊不一致的情況。如果因?yàn)槟承┰驅(qū)е骆湻植媪耍蔡峁┝嘶貪L機(jī)制,sql可以回滾。原理也很簡(jiǎn)單,你ADD一個(gè)數(shù)據(jù)時(shí),我會(huì)在區(qū)塊里同時(shí)記錄兩個(gè)指令,一個(gè)是ADD,一個(gè)是回滾用的DELETE。同理,UPDATE時(shí)也會(huì)保存原來的舊數(shù)據(jù)。區(qū)塊里的sql落地,譬如順序執(zhí)行1-10個(gè)指令,回滾時(shí)就是從10-1執(zhí)行回滾指令。
每個(gè)節(jié)點(diǎn)都會(huì)記錄自己已經(jīng)同步了的區(qū)塊的值,以便隨時(shí)進(jìn)行sql落地入庫。
對(duì)區(qū)塊鏈信息的查詢,那就簡(jiǎn)單了,直接做數(shù)據(jù)庫查詢即可。相比于比特幣需要檢索整個(gè)區(qū)塊鏈的索引樹,速度和方便性就大不同了。
- chia-blockchain Chia區(qū)塊鏈的Python實(shí)現(xiàn)
- 面向?qū)W分銀行的區(qū)塊鏈學(xué)習(xí)成果管控模型綜述 5次下載
- 基于區(qū)塊鏈的新型客戶服務(wù)平臺(tái)技術(shù)架構(gòu) 4次下載
- 區(qū)塊鏈通用的鏈間消息傳輸協(xié)議IBTP 15次下載
- 結(jié)合云存儲(chǔ)與區(qū)塊鏈的高可信存儲(chǔ)模型 7次下載
- 一種基于區(qū)塊鏈的日志安全存儲(chǔ)方法 6次下載
- 區(qū)塊鏈共識(shí)算法的效能優(yōu)化研究及總結(jié) 4次下載
- 一種基于改進(jìn)區(qū)塊鏈的智能制造安全模型 30次下載
- 區(qū)塊鏈中的分布式數(shù)據(jù)庫管理系統(tǒng)相關(guān)研究 8次下載
- 針對(duì)知識(shí)產(chǎn)權(quán)保護(hù)和場(chǎng)景的區(qū)塊鏈共識(shí)機(jī)制 26次下載
- 區(qū)塊鏈的核心架構(gòu)及技術(shù)相關(guān)研究 22次下載
- 關(guān)于區(qū)塊鏈共識(shí)機(jī)制的研究及原理 24次下載
- 關(guān)于區(qū)塊鏈擴(kuò)容技術(shù)的研究和詳細(xì)資料 44次下載
- 區(qū)塊鏈到底是什么 0次下載
- 以太坊區(qū)塊鏈智能平臺(tái)的詳細(xì)資料指南免費(fèi)下載 4次下載
- 基于區(qū)塊鏈技術(shù)框架的Substrate智能合約平臺(tái)解析 1510次閱讀
- 區(qū)塊鏈分布式鏈網(wǎng)創(chuàng)建平臺(tái)SimpleChain介紹 1920次閱讀
- 區(qū)塊鏈去中心化激勵(lì)機(jī)制建立的集合公鏈服務(wù)平臺(tái)Hero Node介紹 737次閱讀
- 區(qū)塊鏈OmniLedger算法解析 4982次閱讀
- 區(qū)塊鏈商業(yè)應(yīng)用系統(tǒng)“GHBaaS”使區(qū)塊鏈真正從概念走向了應(yīng)用 1785次閱讀
- 中興通訊提出了物聯(lián)網(wǎng)+區(qū)塊鏈的解決方案 2902次閱讀
- 區(qū)塊鏈資產(chǎn)平臺(tái)是什么?未來將如何發(fā)展? 801次閱讀
- Morpheus Labs打造出區(qū)塊鏈平臺(tái)即服務(wù),簡(jiǎn)化了區(qū)塊鏈應(yīng)用程序的開發(fā) 1646次閱讀
- 區(qū)塊鏈是什么?什么是區(qū)塊鏈手機(jī)? 6519次閱讀
- 區(qū)塊鏈發(fā)展史--深入淺出了解區(qū)塊鏈 9575次閱讀
- 什么是區(qū)塊鏈?區(qū)塊鏈技術(shù)將如何影響我們的生活呢? 8052次閱讀
- 區(qū)塊鏈的本質(zhì)是什么,區(qū)塊鏈為什么落后 6875次閱讀
- 什么是區(qū)塊鏈_區(qū)塊鏈技術(shù)的優(yōu)勢(shì) 1.1w次閱讀
- 區(qū)塊鏈的java實(shí)現(xiàn)(詳細(xì)代碼解析) 3.6w次閱讀
- 區(qū)塊鏈最通俗易懂的闡述 4224次閱讀
下載排行
本周
- 1山景DSP芯片AP8248A2數(shù)據(jù)手冊(cè)
- 1.06 MB | 532次下載 | 免費(fèi)
- 2RK3399完整板原理圖(支持平板,盒子VR)
- 3.28 MB | 339次下載 | 免費(fèi)
- 3TC358743XBG評(píng)估板參考手冊(cè)
- 1.36 MB | 330次下載 | 免費(fèi)
- 4DFM軟件使用教程
- 0.84 MB | 295次下載 | 免費(fèi)
- 5元宇宙深度解析—未來的未來-風(fēng)口還是泡沫
- 6.40 MB | 227次下載 | 免費(fèi)
- 6迪文DGUS開發(fā)指南
- 31.67 MB | 194次下載 | 免費(fèi)
- 7元宇宙底層硬件系列報(bào)告
- 13.42 MB | 182次下載 | 免費(fèi)
- 8FP5207XR-G1中文應(yīng)用手冊(cè)
- 1.09 MB | 178次下載 | 免費(fèi)
本月
- 1OrCAD10.5下載OrCAD10.5中文版軟件
- 0.00 MB | 234315次下載 | 免費(fèi)
- 2555集成電路應(yīng)用800例(新編版)
- 0.00 MB | 33566次下載 | 免費(fèi)
- 3接口電路圖大全
- 未知 | 30323次下載 | 免費(fèi)
- 4開關(guān)電源設(shè)計(jì)實(shí)例指南
- 未知 | 21549次下載 | 免費(fèi)
- 5電氣工程師手冊(cè)免費(fèi)下載(新編第二版pdf電子書)
- 0.00 MB | 15349次下載 | 免費(fèi)
- 6數(shù)字電路基礎(chǔ)pdf(下載)
- 未知 | 13750次下載 | 免費(fèi)
- 7電子制作實(shí)例集錦 下載
- 未知 | 8113次下載 | 免費(fèi)
- 8《LED驅(qū)動(dòng)電路設(shè)計(jì)》 溫德爾著
- 0.00 MB | 6656次下載 | 免費(fèi)
總榜
- 1matlab軟件下載入口
- 未知 | 935054次下載 | 免費(fèi)
- 2protel99se軟件下載(可英文版轉(zhuǎn)中文版)
- 78.1 MB | 537798次下載 | 免費(fèi)
- 3MATLAB 7.1 下載 (含軟件介紹)
- 未知 | 420027次下載 | 免費(fèi)
- 4OrCAD10.5下載OrCAD10.5中文版軟件
- 0.00 MB | 234315次下載 | 免費(fèi)
- 5Altium DXP2002下載入口
- 未知 | 233046次下載 | 免費(fèi)
- 6電路仿真軟件multisim 10.0免費(fèi)下載
- 340992 | 191187次下載 | 免費(fèi)
- 7十天學(xué)會(huì)AVR單片機(jī)與C語言視頻教程 下載
- 158M | 183279次下載 | 免費(fèi)
- 8proe5.0野火版下載(中文版免費(fèi)下載)
- 未知 | 138040次下載 | 免費(fèi)
評(píng)論