Hyperledger Fabric Peer的内部工作原理和实现方法
在每個組織內(nèi)部跑的幾個模塊
(1)CA:為組織內(nèi)的成員(用戶和節(jié)點)簽發(fā)證書(一對公私鑰以及能標(biāo)識身份相應(yīng)的證書),節(jié)點與用戶使用各自的私鑰與證書,作為身份標(biāo)識參與到網(wǎng)絡(luò)當(dāng)中;
(2)節(jié)點:fabric中的節(jié)點分為Peer,Orderer;?
????① Orderer節(jié)點(Ordering-Service):排序服務(wù)節(jié)點,接收包含背書簽名的交易,對未打包的交易進(jìn)行排序生成區(qū)塊;
?? ?② Peer節(jié)點:
?? ??? ?1.根據(jù)在交易中的不同角色,可分成背書節(jié)點(Endorser)和記賬節(jié)點(Committer);
?? ??? ?????1.背書節(jié)點(Endorsers peer):背書節(jié)點是模擬執(zhí)行交易的節(jié)點;
?? ??? ?????2.記賬節(jié)點(Committing peers):記賬節(jié)點只負(fù)責(zé)記賬,來維護(hù)賬本和Worldstate狀態(tài);
?? ??? ?2.根據(jù)功能的不同peer可分為:
?? ??? ?????1.領(lǐng)導(dǎo)節(jié)點(Leader Peer):當(dāng)有新的交易產(chǎn)生的時候,領(lǐng)導(dǎo)節(jié)點就會與Orderer排序服務(wù)節(jié)點通信,從排序服務(wù)節(jié)點處獲取最新的區(qū)塊,并隨機(jī)的傳播給其他的記賬節(jié)點(Committer Peer),記賬節(jié)點獲取到之后也會繼續(xù)的往外散播;
?? ??? ???????領(lǐng)導(dǎo)節(jié)點(Leader Peer)的選舉方式有2種:靜態(tài)指定Static,動態(tài)指定Dynatic;
?? ??? ?????2.錨節(jié)點(Anchor Peer):每個組織可以指定Anchor Peer,其他組織的節(jié)點就可以將Gossip消息發(fā)送到這個Anchor Peer上,進(jìn)而Anchor Peer將獲得整個網(wǎng)絡(luò)信息,區(qū)塊廣播到本組織內(nèi);
Peer在Fabric中承擔(dān)了維護(hù)賬本,背書簽名,驗證交易,執(zhí)行鏈碼等重要功能。本講深入Fabric Peer這個模塊內(nèi)部,從主要功能入手,剖析Peer的工作原理和實現(xiàn)方法:
1、peer節(jié)點:是賬本和智能合約的載體,通過智能合約,賬本會以不可篡改的方式記錄交易的全過程
2、fabric的交易流程(Hyperledger Fabric Transaction Flow)
背書節(jié)點(Endorsers peer):背書節(jié)點是模擬執(zhí)行交易的,當(dāng)收到交易請求的時候它會去模擬執(zhí)行這個交易請求,執(zhí)行結(jié)果不管是同意還是拒絕,都會把這個執(zhí)行結(jié)果加密,簽名返給Client端;
記賬節(jié)點(Committing peers):記賬節(jié)點只負(fù)責(zé)記賬,來維護(hù)賬本和Worldstate狀態(tài);
(1)Application proposes transaction:Client端提出一個交易請求;
(2)Endorsers Execute Proposals:背書節(jié)點收到交易請求后,會模擬執(zhí)行這個交易;
(3)Application receives responses:背書節(jié)點會把模擬執(zhí)行這個交易的結(jié)果加密,簽名,返回給Client端;
(4)Responses submitted for ordering:Client端收到返回結(jié)果以后會把這個,交易模擬執(zhí)行結(jié)果,提交給Orderer節(jié)點;
(5)Orderer delivers to committing peers:Orderer節(jié)點收到提交上來的,交易模擬執(zhí)行結(jié)果,會把它打包到block里,然會把它發(fā)送給記賬節(jié)點;
(6)Committing peers validate transactions:記賬節(jié)點收到請求之后,就會做一系列validate工作,驗證工作結(jié)束之后,就會把這個交易transaction,記到賬本里,更新區(qū)塊鏈DB,更新Worldstate數(shù)據(jù);
(7)Committing peers notify application:記賬節(jié)點committing peers,通知Client端交易成功還是失敗;
3、Endorsers Policy背書策略背書策略語法(Endorsement Policy Syntax):背書策略是在chaincode實例化的時候指定
Endorsement Policy Syntax
============================
$ peer chaincode instantiate
# channel名
-C mychannel ??
# chaincode名
-n mycc
# 版本
-v 1.0
# 初始化數(shù)據(jù)的內(nèi)容
-c '{"": ["init","a", "100", "b","200"]}'
# 指定條件,這里表達(dá)式的意思-這個交易只要是Org1的member簽名,簽字認(rèn)可了,我們就認(rèn)為這個交易合法
-p "AND(Org1MSP.member)"
============================
-p 后面跟的表達(dá)式舉例,AND-與,OR-或:
?? ?AND('Org1.member', 'Org2.member', 'Org3.member')
?? ?OR('Org1.member', 'Org2.member')
?? ?OR('Org1.member', AND('Org2.member', 'Org3.member'))
4、Fabric賬本和狀態(tài)數(shù)據(jù)數(shù)據(jù)庫(Fabric Ledger and State DB)
Fabric賬本:有序的,不可修改的歷史交易記錄;
Fabric賬本由兩部分組成(Fabric Ledger):
(1)區(qū)塊部分(Blockchain)
?? ?通道的配置信息(Channel configurations);
?? ?歷史交易記錄打包成的Block,串成的串;
每個塊的組成:
① Block header區(qū)塊頭由3部分組成:
?? ?區(qū)塊號,block number;
?? ?CH2,當(dāng)前區(qū)塊的hash碼,(通過對data里的所有的交易transaction數(shù)據(jù)進(jìn)行加密處理,計算出一個hash碼保存在CH2里);
?? ?PH1,上一個塊的hash碼;
② Block data:交易數(shù)據(jù);
Header-區(qū)塊頭:存著chaincode的名字,version等信息;
Signature-簽名:client端的簽名,誰發(fā)的請求,誰簽的名;
Proposal:client端發(fā)送的一些輸入?yún)?shù),背書節(jié)點用來模擬執(zhí)行交易使用;
Response: 智能合約執(zhí)行的結(jié)果(執(zhí)行前的數(shù)據(jù),執(zhí)行后的數(shù)據(jù)都會存在Response里);
Endorsements:每個背書節(jié)點返回的結(jié)果,是個list(如果你在背書策略里指定3個公司,這個里面就存著3個Endorsements);
③ Block Metadata:這個區(qū)塊寫入的時間,寫入的人以及簽名;
(2)Worldstate:維護(hù)賬本的當(dāng)前狀態(tài),它是key-value的形式,方便Application快速查詢;
總結(jié)
以上是生活随笔為你收集整理的Hyperledger Fabric Peer的内部工作原理和实现方法的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 操作系统-进程调度(HRRN和RR)
- 下一篇: 洛谷 P1957 【口算练习题】