hyperledger fabric 1.4中所涉及到的實(shí)體包括如下:
fabric-ca:主要負(fù)責(zé)對網(wǎng)絡(luò)中實(shí)體的證書進(jìn)行維護(hù)邢享;
peer:主要負(fù)責(zé)智能合約的執(zhí)行玄柏、記錄賬簿噩翠;
Order:主要負(fù)責(zé)對記賬內(nèi)容進(jìn)行共識氛魁。
1.4架構(gòu)可以根據(jù)實(shí)際需求通過證書對網(wǎng)絡(luò)進(jìn)行安全域劃分管理呀酸,即通過證書形成一個個獨(dú)立的channel,對智能合約以及賬簿進(jìn)行分割管理该贾,繼而實(shí)現(xiàn)多鏈結(jié)構(gòu)(每一個channel維護(hù)一條私有/聯(lián)盟鏈)羔杨。
①由客戶端發(fā)起交易請求;
②網(wǎng)絡(luò)中的peer節(jié)點(diǎn)選擇提交節(jié)點(diǎn)SP(可以固定杨蛋、輪詢或者隨機(jī))兜材,SP將相應(yīng)的交易請求發(fā)送給各個智能合約確認(rèn)節(jié)點(diǎn)EP;
簽名重點(diǎn)來了逞力,這里查詢調(diào)用流程
evaluateTransaction(ContractImpl.java)->evaluate(TransactionImpl.java)->evaluate(SingleQueryHandler.java);->evaluate(QueryImpl.java)->queryByChaincode(Channel.java)->sendProposal()(Channel.java)->getSignedProposal(Channel.java)->signByteString(TransactionContext.java)->sign(TransactionContext.java)
public byte[] sign(byte[] b) throws CryptoException, InvalidArgumentException {
return signingIdentity.sign(b);
}
簽名重點(diǎn)來了曙寡,這里交易調(diào)用流程
submitTransaction(ContractImpl.java)->submit(TransactionImpl.java)->sendTransactionProposal(TransactionImpl.java);->sendTransactionProposalToEndorsers(Channel.java)->getSignedProposal(Channel.java)->signByteString(TransactionContext.java)->sign(TransactionContext.java)
@Override
public byte[] sign(byte[] msg) throws CryptoException {
return cryptoSuite.sign(super.user.getEnrollment().getKey(), msg); //私鑰和簽名內(nèi)容
}
③各個智能合約確認(rèn)節(jié)點(diǎn)EP將相應(yīng)的執(zhí)行結(jié)果簽名并返回給提交節(jié)點(diǎn)SP,SP收集確認(rèn)結(jié)果寇荧;
④提交節(jié)點(diǎn)SP將收集到的結(jié)果發(fā)送給共識服務(wù)機(jī)構(gòu)(由Order節(jié)點(diǎn)組成的举庶,執(zhí)行共識算法,確認(rèn)是否記鏈)揩抡;
⑤共識服務(wù)機(jī)構(gòu)對結(jié)果進(jìn)行確認(rèn)灯变,并將相應(yīng)的結(jié)果返回給peer節(jié)點(diǎn),由peer節(jié)點(diǎn)根據(jù)返回結(jié)果決定是否記鏈捅膘。