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)行安全域劃分管理,即通過證書形成一個(gè)個(gè)獨(dú)立的channel,對智能合約以及賬簿進(jìn)行分割管理,繼而實(shí)現(xiàn)多鏈結(jié)構(gòu)(每一個(gè)channel維護(hù)一條私有/聯(lián)盟鏈)。

①由客戶端發(fā)起交易請求;
②網(wǎng)絡(luò)中的peer節(jié)點(diǎn)選擇提交節(jié)點(diǎn)SP(可以固定、輪詢或者隨機(jī)),SP將相應(yīng)的交易請求發(fā)送給各個(gè)智能合約確認(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)容
}
③各個(gè)智能合約確認(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é)果決定是否記鏈。