?
?蘇澤
大家好 這里是蘇澤 一個(gè)鐘愛區(qū)塊鏈技術(shù)的后端開發(fā)者
本篇專欄?←持續(xù)記錄本人自學(xué)兩年走過無數(shù)彎路的智能合約學(xué)習(xí)筆記和經(jīng)驗(yàn)總結(jié) 如果喜歡拜托三連支持~
我前面有補(bǔ)充相關(guān)的區(qū)塊鏈的知識(shí) 如果沒有了解的話 可能部分概念或名詞會(huì)不懂哦 建議先了解一波再來看~
目錄
我前面有補(bǔ)充相關(guān)的區(qū)塊鏈的知識(shí) 如果沒有了解的話 可能部分概念或名詞會(huì)不懂哦 建議先了解一波再來看~
FISCO BCOS是什么?
架構(gòu)與設(shè)計(jì)
流程
發(fā)包
收包
接口層
調(diào)度層
模塊1:共識(shí)(Consensus)模塊
?編輯
模塊2:同步(Sync)模塊
如何啟動(dòng)!?
很簡(jiǎn)單! 一共就兩步
FISCO BCOS是什么?
FISCO BCOS是一個(gè)金融級(jí)、國(guó)產(chǎn)安全可控的區(qū)塊鏈底層平臺(tái),由深圳市金融區(qū)塊鏈發(fā)展促進(jìn)會(huì)(金鏈盟)開源工作組牽頭研發(fā)。作為最早開源的國(guó)產(chǎn)聯(lián)盟鏈底層平臺(tái)之一,F(xiàn)ISCO BCOS于2017年面向全球開源
架構(gòu)與設(shè)計(jì)
大概就是分為那么幾個(gè)層 往深了講可以講幾天幾夜 我就挑 作為一個(gè)應(yīng)用級(jí)別的開發(fā)者哈需要關(guān)注的大概就是那么幾個(gè)地方:
流程
發(fā)包
以node0的第一組向node1的第一組發(fā)送消息packetA為例:
-
group1將消息packetA傳遞到網(wǎng)絡(luò)層。
-
網(wǎng)絡(luò)層模塊對(duì)packetA進(jìn)行編碼,將本群組ID添加到packetA的包頭,形成新的數(shù)據(jù)包{groupID(1) + packetA}。
-
網(wǎng)絡(luò)層訪問賬本白名單,判斷node0是否是group1的節(jié)點(diǎn)。如果node0不是group1的節(jié)點(diǎn),網(wǎng)絡(luò)層會(huì)拒絕發(fā)送數(shù)據(jù)包。但如果node0是group1的節(jié)點(diǎn),網(wǎng)絡(luò)層會(huì)將編碼后的數(shù)據(jù)包發(fā)送給目標(biāo)節(jié)點(diǎn)node1。
收包
當(dāng)node1接收到來自node0的數(shù)據(jù)包{groupID(1) + packetA}時(shí):
-
網(wǎng)絡(luò)層會(huì)查詢賬本白名單,檢查源節(jié)點(diǎn)node0是否是group1的成員。如果node0不是group1的成員,網(wǎng)絡(luò)層會(huì)拒絕該數(shù)據(jù)包;如果node0是group1的成員,網(wǎng)絡(luò)層會(huì)將數(shù)據(jù)包傳遞給解碼模塊。
-
解碼模塊會(huì)從數(shù)據(jù)包中提取出group ID為1和數(shù)據(jù)包packetA,并將數(shù)據(jù)包packetA發(fā)送到group1。
接口層
讓我們以一個(gè)簡(jiǎn)單的比喻來解釋接口層由交易池(TxPool)、區(qū)塊鏈(BlockChain)和區(qū)塊執(zhí)行器(BlockVerifier)三個(gè)模塊組成的含義:
假設(shè)你是一個(gè)公司的項(xiàng)目經(jīng)理,負(fù)責(zé)處理公司內(nèi)部的各種任務(wù)和請(qǐng)求。在這個(gè)比喻中,你就是調(diào)度層,而接口層由三個(gè)模塊組成。
交易池(TxPool):交易池就像你的收件箱,它接收來自公司員工或其他部門的新任務(wù)和請(qǐng)求。員工們將任務(wù)發(fā)送到你的收件箱中,而你會(huì)將這些任務(wù)提供給相關(guān)的團(tuán)隊(duì)去處理。類似地,交易池接收來自客戶端或其他節(jié)點(diǎn)的新交易,并將這些交易提供給共識(shí)模塊進(jìn)行打包處理。同時(shí),同步模塊也可以從交易池中獲取新交易進(jìn)行廣播,就像你將任務(wù)分發(fā)給相關(guān)團(tuán)隊(duì)一樣。
區(qū)塊鏈(BlockChain):區(qū)塊鏈就像你的公司檔案室,它保存著所有任務(wù)的歷史記錄。當(dāng)你需要查看過去某個(gè)時(shí)間點(diǎn)的任務(wù)或了解任務(wù)執(zhí)行結(jié)果時(shí),你可以向檔案室查詢相關(guān)信息。類似地,區(qū)塊鏈模塊是你訪問底層存儲(chǔ)和執(zhí)行模塊的唯一入口。你可以通過區(qū)塊鏈模塊提交新的區(qū)塊和區(qū)塊執(zhí)行結(jié)果,查詢歷史區(qū)塊等信息。
此外,RPC模塊可以通過區(qū)塊鏈模塊獲取區(qū)塊、塊高以及交易執(zhí)行結(jié)果等信息,就像你向檔案室查詢?nèi)蝿?wù)歷史記錄一樣。區(qū)塊執(zhí)行器(BlockVerifier):區(qū)塊執(zhí)行器就像你的執(zhí)行團(tuán)隊(duì),負(fù)責(zé)實(shí)際執(zhí)行任務(wù)。當(dāng)你將任務(wù)分配給執(zhí)行團(tuán)隊(duì)時(shí),他們會(huì)按照任務(wù)要求進(jìn)行操作,并將執(zhí)行結(jié)果反饋給你。類似地,區(qū)塊執(zhí)行器與調(diào)度層進(jìn)行交互,負(fù)責(zé)執(zhí)行調(diào)度層傳入的區(qū)塊,并將區(qū)塊執(zhí)行結(jié)果返回給調(diào)度層。它是核心層與調(diào)度層之間的重要組件,用于驗(yàn)證和執(zhí)行區(qū)塊中的交易邏輯,就像你的執(zhí)行團(tuán)隊(duì)負(fù)責(zé)執(zhí)行任務(wù)并將結(jié)果反饋給你一樣。
調(diào)度層
模塊1:共識(shí)(Consensus)模塊
共識(shí)模塊的作用就像是一群人一起決定做什么事情。假設(shè)有一個(gè)團(tuán)隊(duì),他們需要決定在周末去哪里旅行。每個(gè)人都提出了自己的建議,然后大家一起討論并達(dá)成共識(shí)。共識(shí)模塊就像是團(tuán)隊(duì)成員,它主要負(fù)責(zé)執(zhí)行客戶端提交的交易,并確保每個(gè)人對(duì)交易執(zhí)行結(jié)果的認(rèn)可。
在共識(shí)模塊中,有兩個(gè)重要的部分:打包(Sealer)線程和共識(shí)(Engine)線程。打包線程負(fù)責(zé)從交易池中獲取還沒有被執(zhí)行的交易,并將這些交易打包成一個(gè)區(qū)塊。而共識(shí)線程則負(fù)責(zé)對(duì)區(qū)塊執(zhí)行結(jié)果進(jìn)行共識(shí),確保大家都達(dá)成一致意見。目前,常用的共識(shí)算法有PBFT和Raft。
共識(shí)模塊的工作流程如下:
客戶端提交的交易會(huì)先緩存到交易池(就像是大家提出的旅行建議被放在一個(gè)池子里)。
當(dāng)有新的交易進(jìn)入交易池時(shí),打包線程會(huì)被喚醒。打包線程會(huì)根據(jù)當(dāng)前最高的區(qū)塊,從交易池中獲取最新的交易,然后打包成一個(gè)新的區(qū)塊。
打包線程將新的區(qū)塊傳遞給共識(shí)線程,供共識(shí)過程使用。
共識(shí)線程收到新的區(qū)塊后,啟動(dòng)共識(shí)流程。在共識(shí)過程中,會(huì)調(diào)用區(qū)塊執(zhí)行器執(zhí)行區(qū)塊中的每一筆交易,并確保大家對(duì)執(zhí)行結(jié)果達(dá)成一致。
如果共識(shí)成功,就會(huì)調(diào)用區(qū)塊鏈模塊將新的區(qū)塊和區(qū)塊執(zhí)行結(jié)果提交到底層數(shù)據(jù)庫(kù)。
當(dāng)新的區(qū)塊成功上鏈后,交易池會(huì)刪除已經(jīng)被打包進(jìn)區(qū)塊的交易,并將交易執(zhí)行結(jié)果發(fā)送給客戶端。
模塊2:同步(Sync)模塊
同步模塊的目標(biāo)是確保每個(gè)團(tuán)隊(duì)成員都擁有完整的信息。假設(shè)有一個(gè)團(tuán)隊(duì),其中的成員分布在不同的地方。為了保持大家的信息一致,每個(gè)人會(huì)定期向其他人匯報(bào)自己的進(jìn)展。同步模塊就像是團(tuán)隊(duì)成員之間的信息傳遞通道,它主要負(fù)責(zé)交易和區(qū)塊的同步。
同步模塊包括交易同步和區(qū)塊同步。
交易同步的過程如下:
當(dāng)客戶端向特定團(tuán)隊(duì)的交易池提交新的交易時(shí),交易同步線程會(huì)被喚醒。這個(gè)線程會(huì)將新的交易廣播給其他團(tuán)隊(duì)的節(jié)點(diǎn),以確保每個(gè)團(tuán)隊(duì)都有完整的交易信息。
假設(shè)客戶端將交易A發(fā)送到團(tuán)隊(duì)1,將交易B發(fā)送到團(tuán)隊(duì)2。交易同步線程會(huì)將交易A廣播給所有團(tuán)隊(duì)的節(jié)點(diǎn),而將交易B廣播給所有團(tuán)隊(duì)的節(jié)點(diǎn)。
區(qū)塊同步的過程如下:
節(jié)點(diǎn)0、節(jié)點(diǎn)1和節(jié)點(diǎn)2的區(qū)塊同步線程會(huì)定期廣播最新區(qū)塊的高度信息。
當(dāng)節(jié)點(diǎn)1收到節(jié)點(diǎn)0和節(jié)點(diǎn)2的最新區(qū)塊高度后,發(fā)現(xiàn)自己的區(qū)塊高度是3,低于節(jié)點(diǎn)0和節(jié)點(diǎn)2的最新區(qū)塊高度6。
為了保持負(fù)載均衡,節(jié)點(diǎn)1向節(jié)點(diǎn)2請(qǐng)求第4個(gè)區(qū)塊,并向節(jié)點(diǎn)0請(qǐng)求第5和第6個(gè)區(qū)塊。
節(jié)點(diǎn)0和節(jié)點(diǎn)2接收到節(jié)點(diǎn)1的區(qū)塊請(qǐng)求后,分別將第5和6個(gè)區(qū)塊返回給節(jié)點(diǎn)1,節(jié)點(diǎn)2還返回第4個(gè)區(qū)塊。
節(jié)點(diǎn)1按照區(qū)塊的順序執(zhí)行第4、5和6個(gè)區(qū)塊,并將最新的區(qū)塊按順序提交到底層存儲(chǔ)。這樣,節(jié)點(diǎn)1就與其他節(jié)點(diǎn)保持了區(qū)塊的同步。
如何啟動(dòng)???
很簡(jiǎn)單! 一共就兩步
- 學(xué)習(xí)如何編寫智能合約(本專欄重點(diǎn)介紹solidity語言)相當(dāng)于就是一門新的編程語言,只是引用了很多不一樣的庫(kù) 還有要學(xué)習(xí)新的語法
- 學(xué)習(xí)如何使用FISCO BCOS平臺(tái)理解其部署、安裝 、使用方法以及調(diào)試、優(yōu)化等
本篇專欄就是圍繞著這兩條線進(jìn)行展開講解? 學(xué)習(xí)記錄的
然后就是最最激動(dòng)的 實(shí)戰(zhàn)部分(會(huì)隨著項(xiàng)目進(jìn)度陸續(xù)發(fā)出)
鏈接擺上、按需食用?。?/p>
智能合約:文章來源:http://www.zghlxwxcb.cn/news/detail-840467.html
FISCO BCOS:文章來源地址http://www.zghlxwxcb.cn/news/detail-840467.html
到了這里,關(guān)于深入淺出FISCO BCOS:區(qū)塊鏈底層平臺(tái)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!