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