一、開(kāi)發(fā)工具
- hyperledger-fabric:1.4.7,hyperledger-ca:1.4.7。ca是用來(lái)生成證書(shū)文件,管理成員身份。
下載方法:點(diǎn)擊此鏈接到百度云下載腳本,提取碼:1234,在已經(jīng)安裝docker和git后,運(yùn)行腳本即可下載,例如運(yùn)行:./download.sh 1.4.7 1.4.7
將會(huì)下載hyperledger-fabric:1.4.7,hyperledger-ca:1.4.7,及對(duì)應(yīng)版本的docker鏡像。若某個(gè)文件下載緩慢,可轉(zhuǎn)到github文件下載代理處下載(前提是要能看明白.sh腳本語(yǔ)言,明白缺少什么文件,該在什么地方解壓下載好的文件),下載后放入fabric-sample
內(nèi)解壓即可。 - docker: 20.10.12,服務(wù)都是在docker容器內(nèi)運(yùn)行的。
- golang: 1.17.5,fabric的底層的開(kāi)發(fā)語(yǔ)言,同時(shí)也是編寫(xiě)鏈碼,搭建后端服務(wù)器的語(yǔ)言。
- git: 1.8.3.1,下載文件時(shí)需要用到。
- go-gin最新版,開(kāi)發(fā)后端服務(wù)器的框架,該框架目前性能最好。
- fabric-go-sdk,操作區(qū)塊鏈網(wǎng)絡(luò)的軟件包。
二、程序運(yùn)行完整邏輯
2.1 總體邏輯
- 在啟動(dòng)fabric網(wǎng)絡(luò)后,運(yùn)行mian函數(shù),它將首先運(yùn)行初始化函數(shù),創(chuàng)建SDK、資源管理客戶端、創(chuàng)建通道、將所有節(jié)點(diǎn)加入通道、配置錨節(jié)點(diǎn)更新、安裝鏈碼、通道管理客戶端、實(shí)例化鏈碼。然后開(kāi)啟后端接口服務(wù)。
- 利用接口,接收前端傳入的數(shù)據(jù),用結(jié)構(gòu)體保存數(shù)據(jù),再調(diào)用go sdk的軟件包,利用通道管理客戶端將數(shù)據(jù)發(fā)送給鏈碼。
- 鏈碼根據(jù)接受的數(shù)據(jù),調(diào)用對(duì)應(yīng)的函數(shù),將數(shù)據(jù)存入?yún)^(qū)塊鏈或者查詢區(qū)塊鏈賬本中的數(shù)據(jù)。
- 用go sdk接收鏈碼的執(zhí)行結(jié)果,利用gin將結(jié)果以json形式的數(shù)據(jù)返回給前端。
2.2 詳細(xì)過(guò)程(以添加數(shù)據(jù)(AddData)為例)
首先初始化
開(kāi)啟接口,前端訪問(wèn)該接口時(shí),則會(huì)執(zhí)行后面的AddData(…)函數(shù)
在這函數(shù)里,接收前端傳入的數(shù)據(jù),用如下的函數(shù)將接受到的前端數(shù)據(jù)保存至結(jié)構(gòu)體中。文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-513356.html
再用如下函數(shù),將數(shù)據(jù)反序列化,為存入?yún)^(qū)塊鏈中做準(zhǔn)備(區(qū)塊鏈中存儲(chǔ)的數(shù)據(jù)都是序列化的):
指定函數(shù)fcn,鏈碼會(huì)根據(jù)傳入的fcn函數(shù)信息,調(diào)用對(duì)應(yīng)的函數(shù)。
執(zhí)行strar.go文件中調(diào)用的鏈碼函數(shù):
在InvokeCC函數(shù)中,首先將請(qǐng)求封裝,在封裝的請(qǐng)求中,需要指明執(zhí)行鏈碼的ID,請(qǐng)求鏈碼的函數(shù)信息fcn,及序列化了的待添加數(shù)據(jù)。
執(zhí)行調(diào)用鏈碼的請(qǐng)求(go sdk調(diào)用鏈碼的核心函數(shù)):
此時(shí)安裝的鏈碼將會(huì)收到請(qǐng)求數(shù)據(jù),在鏈碼中用該函數(shù)接收請(qǐng)求調(diào)用函數(shù)的信息及序列化后的待添加數(shù)據(jù)。
此時(shí)傳入的請(qǐng)求函數(shù)信息是"addData",那么它將會(huì)調(diào)用對(duì)應(yīng)的函數(shù)進(jìn)行處理:
在該函數(shù)中,先是將序列化的數(shù)據(jù)反序列化,并用結(jié)構(gòu)體保存數(shù)據(jù),這樣做的目的是取出其中的ID和Batch,將其以Batch+ID的方式組合為一個(gè)唯一Key值,作為該數(shù)據(jù)唯一的“身份證”,溯源就是根據(jù)此“身份證”查看該身份證下的一切改動(dòng)。
調(diào)用PutData函數(shù),準(zhǔn)備將數(shù)據(jù)寫(xiě)入?yún)^(qū)塊鏈中。
在PutData函數(shù)中,首先將數(shù)據(jù)序列化,再用Putstate將數(shù)據(jù)寫(xiě)入?yún)^(qū)塊鏈。
最后將鏈碼執(zhí)行的結(jié)果以JSON形式的數(shù)據(jù)返回給前端,若成功執(zhí)行鏈碼“err”:nil
,否則返回錯(cuò)誤原因:文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-513356.html
到了這里,關(guān)于區(qū)塊鏈系統(tǒng)運(yùn)行邏輯的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!