目標(biāo)
- Hyperledger Fabric 網(wǎng)絡(luò)中的節(jié)點(diǎn)分類
- 熟知 Hyperledger Fabric 交易流程
任務(wù)實(shí)現(xiàn)
現(xiàn)在我們深入 Hyperledger Fabric 內(nèi)部,詳細(xì)了解 Hyperledger Fabric 的交易實(shí)現(xiàn)流程,理解相應(yīng)的核心內(nèi)容蜒蕾。
區(qū)塊鏈技術(shù)最重要特征之一就是能夠保證實(shí)現(xiàn)安全的交易狂窑。Hyperledger Fabric 與公有鏈的交易實(shí)現(xiàn)又有很大的區(qū)別慨默。如:權(quán)限玫芦、認(rèn)證、數(shù)據(jù)隔離等等蚓土。
Hyperledger Fabric 典型的交易流程如下圖所示:
完整的交易流程解釋如下:
-
應(yīng)用程序使用相應(yīng)的 SDK(Node宏侍,Java,Python)提供的 API 構(gòu)建交易提案并提交給相應(yīng)的背書節(jié)點(diǎn)蜀漆,交易提案中包含:
- channelID:通道信息
- chaincodeID:要調(diào)用的鏈碼信息
- timestamp:時間戳
- sign:客戶端的簽名
- txPayload:提交的事務(wù)本身包含的內(nèi)容谅河,包含兩項(xiàng):
- operation:要調(diào)用的鏈碼的函數(shù)及相應(yīng)的參數(shù)
- metadata:調(diào)用的相關(guān)屬性
?
?
交易提案(Proposal)消息結(jié)構(gòu)如下:
-
背書節(jié)點(diǎn)對接收到的交易提案請求進(jìn)行驗(yàn)證:
- 交易提案格式是否正確
- 交易在之前并未提交過(重復(fù)性攻擊保護(hù))
- 提交交易提案的客戶端簽名是否有效(使用MSP)
- 提交交易提案的請求者是否在該通道中有相應(yīng)的執(zhí)行權(quán)限
驗(yàn)證通過后調(diào)用鏈碼進(jìn)行模擬執(zhí)行, 產(chǎn)生包括響應(yīng)值、讀集和寫集的事務(wù)結(jié)果绷耍。對結(jié)果進(jìn)行背書并響應(yīng)給客戶端吐限。
注意,此時的調(diào)用鏈碼是模擬執(zhí)行褂始,不會對賬本中的數(shù)據(jù)進(jìn)行真正意義上的更改诸典。
提示:關(guān)于MSP的相關(guān)內(nèi)容,請參見第六章
交易提案響應(yīng)(ProposalResponse)消息結(jié)構(gòu)如下:
?
-
應(yīng)用程序收集到足夠的消息和背書簽名之后崎苗,構(gòu)建合法的交易請求并將交易請求廣播給 Ordering服務(wù)節(jié)點(diǎn)狐粱。
如果應(yīng)用程序的請求僅僅是查詢分類帳,則應(yīng)用程序?qū)z查查詢響應(yīng)信息益缠,并且不會將事務(wù)提交給 Ordering 服務(wù)脑奠。
如果客戶端應(yīng)用程序的請求是更新分類賬本數(shù)據(jù),則會將事務(wù)提交給 Ordering 服務(wù)以繼續(xù)下一步的操作幅慌,并且應(yīng)用程序在提交事務(wù)之前檢查確定請求是否已滿足指定的認(rèn)可策略(即指定的背書節(jié)點(diǎn)都認(rèn)可)宋欺。
-
交易請求被提交到 Ordering 服務(wù)節(jié)點(diǎn),該事務(wù)將包含讀/寫集胰伍,背書簽名和通道ID齿诞;Orderer 節(jié)點(diǎn)接收到事務(wù)請求之后,并不需要檢查交易中的具體數(shù)據(jù)骂租,它只是從網(wǎng)絡(luò)中的所有通道接收交易祷杈,按時間順序?qū)λ鼈冞M(jìn)行排序,并創(chuàng)建交易區(qū)塊渗饮。之后廣播給同一通道內(nèi)所有組織的 Leader 節(jié)點(diǎn)但汞。
-
Leader節(jié)點(diǎn):Leader 節(jié)點(diǎn)對接收到的區(qū)塊進(jìn)行驗(yàn)證(交易消息結(jié)構(gòu)是否正確、是否重復(fù)互站、是否有足夠的背書私蕾、讀寫集版本),通過驗(yàn)證后將結(jié)果寫入到本地的分類賬本中胡桃。
-
同步廣播:Leader 節(jié)點(diǎn)同步廣播給組織內(nèi)的其它節(jié)點(diǎn)(保證在同一通道內(nèi)的)踩叭。
提示:在 Fabric 中,廣播給其它節(jié)點(diǎn)默認(rèn)為臨近的3個節(jié)點(diǎn)翠胰。此廣播數(shù)量可以通過配置進(jìn)行修改容贝。
注:跨組織廣播則由組織內(nèi)的 Anchor 節(jié)點(diǎn)負(fù)責(zé)。
分類賬本更新:
每個Peer節(jié)點(diǎn)將區(qū)塊附加到區(qū)塊鏈中之景,寫集被提交到當(dāng)前的狀態(tài)數(shù)據(jù)庫中斤富。并且對于每個有效的事務(wù),發(fā)出一個事件闺兢,通知客戶端應(yīng)用程序事務(wù)(調(diào)用)已被不可變地附加到鏈中茂缚,以及通知該事務(wù)是否已經(jīng)過驗(yàn)證或?yàn)闊o效事務(wù)戏罢。