系統鏈碼包括:
LSCC(lifecycle System Chaincode)生命週期管理系統鏈碼
主要功能:
管理部署在背書節點上的鏈碼,不是全生命週期的管理。
CSCC(Configuration System Chaincode)配置管理系統鏈碼
主要功能:
管理記帳節點上的配置信息
QSCC(Query System Chaincode)查詢管理系統鏈碼
主要功能:
提供查詢記帳節點的帳本數據,包括區塊和交易數據,區塊鏈信息等
ESCC(Endorsement System chaincode)交易背書系統鏈碼
主要功能:
對交易進行結果的結構轉換和簽名背書
VSCC(Validation System Chaincode)交易驗證系統鏈碼
主要功能:
記帳前對區塊和交易進行驗證
其中ESCC和VSCC有默認的實現,也可根據功能需求實現新的ESCC和VSCC
【1】鏈碼源碼:但需經過ChaincodeDeploymentSpec/CDS定義,CDS依據代碼及其餘一些屬性(名稱/版本等)來定義鏈碼。git
【2】實例化策略:(可選)github
【3】鏈碼簽名數組
鏈碼的簽名實現如下3個目標區塊鏈
【1】代表是誰建立的鏈碼spa
【2】容許驗證鏈碼包裏的內容code
【3】能夠檢測鏈碼包是否被篡改blog
鏈碼的實例化策略會驗證鏈碼全部者的身份,進而驗證其提交的鏈碼源碼/實例化策略是否有效。接口
(一)鏈碼的建立--兩種方式生命週期
【1】多個全部者:rpc
須要多個全部者對鏈碼簽名,先建立一個鏈碼包SignedChaincode DeploymentSpec,而後發送給多個全部者進行簽名
【2】單一全部者:只有安裝鏈碼的節點對鏈碼簽名
//建立帶簽名的鏈碼包 peer chaincode package -n mycc -p github.com/hyperledger/fabric/examples/chaincode/go/chaincode_examples02 -v 0 -s -S -i "AND('OrgA.admin')" ccpack.out
說明:
-s :生成一個有多個全部者簽名的鏈碼,而不是簡單地建立一個不帶簽名的ChaincodeDeploymentSpec。若指定了-s選項,當其餘全部者要簽名時,還須要指定-S選項。不然建立的鏈碼包SignedChaincodeDeploymentSpec只會在ChaincodeDeploymentSpec基礎上添加實例化策略,不會包含全部者的簽名。
-S:可使MSP(core.yaml中localMspid屬性值定義的)對程序包進行簽名。-S是可選的,若建立了一個沒有簽名的包,則其餘的全部者不能經過對其使用signpackage命令簽名。
-i:爲鏈碼指定實例化策略。它指明哪些身份能夠對鏈碼實例化。在上面例子中。只容許OrgA管理員進行鏈碼實例化。若未提供任何策略,系統將採用默認策略。該策略只容許Peer節點MSP的管理員實例化鏈碼。
(二)鏈碼的簽名
鏈碼在建立時簽名了才能夠由其餘的全部者校驗簽名和繼續簽名,簽名過程能夠是線下操做。
鏈碼SignedChaincodeDeploymentSpec是封裝了ChaincodeDeploymentSpec的結構,主要是增長了實例化策略和全部者的簽名。定義以下:
type SignedChaincodeDeploymentSpec struct{
//ChaincodeDeploymentSpec序列號後的字節數組
易可以知足背書策略就能夠。
9.2.3 背書節點接收應用程序的請求處理
應用程序經過gRPC的接口發起請求,命令以下:
ProcessProposal(ctx context.Context,in *SignedProposal,opts ...grpc.CallOption)
(*ProposalResponse,error)
背書節點接收到請求後,檢查:是否有權限提交交易,是不是重複交易等。真正的執行過程是在鏈碼中完成的,ESCC最後對執行的結果進行簽名背書。
中間有任何異常都會終止後續的執行,執行結果返回給應用程序。
鏈碼調用時序圖如圖所示;
交易模擬器的運行示意圖以下圖所示:
說明:
圖中普通鏈碼、系統鏈碼和背書節點創建了不一樣的鏈接。
普通鏈碼創建的是gRPC鏈接,系統鏈碼創建的是Golang的通道鏈接。同一個鏈接上又分別有2個鏈碼調用在操做數據。
背書節點側的有限狀態機記錄了不一樣交易號調用時的上下文信息,根據交易號從交易上下文映射表中獲取到交易所對應的上下文信息,進而利用交易模擬器生成模擬執行的結果。
存在同名的鏡像,就不會重複構建。只要組織和鏈碼名稱、版本都相同,則這種狀況就很容易出現。
9.3.2配置管理系統鏈碼
配置管理系統鏈碼(CSCC)全稱是Configuration System Chaincode,主要功能是管理記帳節點上的配置信息。
1。記帳節點加入鏈
記帳節點加入鏈的Proposal請求的ChaincodeInput再也不是多層的嵌套了。結構以下: