上周小結(jié)
從上周的Hyperledger Fabric構(gòu)架簡述之二 節(jié)點(diǎn),我們知道關(guān)于節(jié)點(diǎn)的基礎(chǔ)。
- 節(jié)點(diǎn)是 chaincode, Blockchain Ledger的載體。
- 一個節(jié)點(diǎn)可以包含多個 Blockchain Ledger, 而一個 Blockchain Ledger為多個 chaincode提供服務(wù)。
- 每個節(jié)點(diǎn)上都有一個默認(rèn)的 system chaincodes
這一周,我們繼續(xù)一起了解應(yīng)用與節(jié)點(diǎn)的關(guān)系。以及他們是怎么完成一次交易,并且把交易廣播出去的。
一次交易的旅程
一個外部應(yīng)用,比如安卓上的一個應(yīng)用,可以通過 Hyperledger Fabric Software Development Kit (SDK) 里面提供的 APIs 來連接節(jié)點(diǎn),觸發(fā) chaincode,生成交易,通過 ordered(排隊,排序) 之后,被廣播到網(wǎng)絡(luò)其他節(jié)點(diǎn)上。

從一個應(yīng)用的角度:
- 通過API鏈接節(jié)點(diǎn)
- 嘗試激活智能合約
- 收到節(jié)點(diǎn)的回復(fù)(在回復(fù)之前,節(jié)點(diǎn)會激活請求的智能合約,智能合約生產(chǎn)指令,更新回復(fù))
- 把收到的回復(fù),提交給排序節(jié)點(diǎn)(排序節(jié)點(diǎn)會做相關(guān)確認(rèn),然后把這次交易的信息排隊到廣播隊列中)
- 收到節(jié)點(diǎn)以及更新的回復(fù)
從一個節(jié)點(diǎn)的角度:
- 是有能力在確認(rèn)相關(guān)信息之后,獨(dú)立執(zhí)行智能合約的。因?yàn)樗枰男畔⒃谶@個節(jié)點(diǎn)的本地都有備份。
- 雖然可以獨(dú)立執(zhí)行智能合約,但是不能獨(dú)立的把執(zhí)行結(jié)果廣播出去
交易過程概圖
參與方
- A :收購蘿卜
- B :出售蘿卜
- peerA:代表A
- peerB:代表B
假設(shè)
- 我們的聯(lián)盟網(wǎng)絡(luò)已經(jīng)建成,而且參與方已經(jīng)通過相關(guān)資格認(rèn)證機(jī)構(gòu),注冊,并且有相關(guān)材料證明其身份。
The application user has registered and enrolled with the organization’s certificate authority (CA) and received back necessary cryptographic material, which is used to authenticate to the network.
包含了代表蘿卜市場的一對key和value的智能合約已經(jīng)在聯(lián)盟網(wǎng)絡(luò)里配置好了。
智能合約的邏輯里面,包含了交易的步驟以及一個蘿卜的價格。并且在背書協(xié)議里面,包含了必須雙方提出背書。
交易步驟
- A想發(fā)出購買蘿卜的請求。因?yàn)樾枰p方背書,所以A同應(yīng)用,把這請求同時發(fā)給了,peerA和peerB。
- SDK生成請求。這個請求可以執(zhí)行一個智能合約,從而可以讀寫(比如加入一對新的代表蘿卜市場的key和value)賬本。
- SDK將交易打包為正確的格式,并用用戶的加密憑證為此交易提議生成唯一的簽名。
- 背書節(jié)點(diǎn),如果簽名驗(yàn)證成功,就執(zhí)行請求
主要驗(yàn)證:
?請求的格式是否正確
?這個請求在之前已經(jīng)被執(zhí)行過
?簽名是否有效
?請求提出者,在權(quán)限上是否符合此次請求的內(nèi)容。
- 背書節(jié)點(diǎn),執(zhí)行請求,生成結(jié)果。此時賬本還沒有做任何的更新。和背書節(jié)點(diǎn)的簽名一起,返回給請求者。
圖片來源
圖片來自官方網(wǎng)站