實現(xiàn)一個區(qū)塊鏈系統(tǒng)

? ? 關(guān)鍵字:nodejs,區(qū)塊鏈,比特幣,udp

????本文主要記錄一個最近#在跳坑的邊緣試探#的區(qū)塊鏈系統(tǒng)開發(fā)過程,架構(gòu)上并不復(fù)雜,參考了現(xiàn)存區(qū)塊鏈系統(tǒng)的原理與算法,歡迎到github上提問:https://github.com/SteveWooo/swc

目錄

1、網(wǎng)絡(luò)層

? ? 網(wǎng)絡(luò)層的目的是讓所有節(jié)點結(jié)成一個非全連接的網(wǎng)絡(luò),讓節(jié)點能主動把數(shù)據(jù)包發(fā)送到網(wǎng)絡(luò),然后網(wǎng)絡(luò)把數(shù)據(jù)包傳播給所有節(jié)點,實現(xiàn)節(jié)點之間能相互通信。

網(wǎng)絡(luò)靠心跳維持

? ? 實現(xiàn)這個網(wǎng)絡(luò)層主要使用了無狀態(tài)的udp協(xié)議,要求網(wǎng)絡(luò)中至少有一個部署在公網(wǎng)的節(jié)點。先定義幾個概念

? ??節(jié)點:普通入網(wǎng)設(shè)備(手機、計算機、嵌入式硬件)配置啟動該軟件,即為節(jié)點。

? ? 節(jié)點桶:指能和本地節(jié)點維持交換包狀態(tài)的健康的其他節(jié)點棧。例如A節(jié)點剛登陸,節(jié)點桶為空,這時候如果收到B節(jié)點的包,就代表B節(jié)點為健康的節(jié)點,把B的IP端口壓入節(jié)點桶。

? ? 心跳包:定期把節(jié)點桶中的內(nèi)容,打包發(fā)送給桶中的所有節(jié)點。

? ? 數(shù)據(jù)協(xié)議:節(jié)點之間通信的協(xié)議(心跳包是其中一種


? ? 維持網(wǎng)絡(luò)的主要流程如下:

? ? 1:啟動公網(wǎng)節(jié)點,開放端口

? ? 2:普通節(jié)點發(fā)心跳包給公網(wǎng)節(jié)點

? ? 3:公網(wǎng)節(jié)點把普通節(jié)點壓入節(jié)點桶

? ? 4:公網(wǎng)節(jié)點發(fā)送心跳包

? ? 5:普通節(jié)點收到心跳包中的新節(jié)點,壓入節(jié)點桶

? ? 6:loop

? ? 消息傳播方式:

? ? 1:普通節(jié)點創(chuàng)建消息,按照數(shù)據(jù)協(xié)議打包好

? ? 2:普通節(jié)點把數(shù)據(jù)發(fā)送給節(jié)點桶中所有節(jié)點,并寫入緩存

? ? 3:節(jié)點收到數(shù)據(jù)包,根據(jù)數(shù)據(jù)協(xié)議校驗正確后,轉(zhuǎn)發(fā)給數(shù)據(jù)桶中所有節(jié)點(如果和緩存沖突,則不轉(zhuǎn)發(fā)


2、數(shù)據(jù)協(xié)議層

? ? 數(shù)據(jù)層目的是規(guī)范節(jié)點之間通信的協(xié)議,在不安全的網(wǎng)絡(luò)環(huán)境中簽名與校驗通信包的內(nèi)容。這里涉及的概念主要有:

? ? 橢圓曲線驗證算法:一種非對稱校驗的算法,用于簽名校驗。


????目前設(shè)計的協(xié)議比較少,具體協(xié)議內(nèi)容都在代碼中可看到(block/create.js,trade/create.js)。主要有以下幾個

? ? 心跳協(xié)議:

????????包含節(jié)點唯一id和節(jié)點桶,嚴(yán)格按照一定的時間間隔發(fā)出。

? ? 交易協(xié)議:

? ? ? ? 區(qū)塊鏈數(shù)據(jù)的直接承載體。交易必須由交易創(chuàng)造者簽名,每筆交易都需要被網(wǎng)絡(luò)驗證。

? ? 塊協(xié)議:

? ? ? ? 交易的直接承載體。網(wǎng)絡(luò)規(guī)定在一定的時間范圍內(nèi)產(chǎn)生區(qū)塊(參考pow共識算法)。塊需要生成者簽名,每個塊都需要被網(wǎng)絡(luò)驗證


3、持久層

? ? 持久層目的是存放,查詢區(qū)塊、交易的內(nèi)容。

????目前使用了簡單的文件操作實現(xiàn)。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容