標籤: 配置資訊 上下文 還需要 源碼 查詢 嵌套 com type
系統鏈碼包括:
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依據代碼及其他一些屬性(名稱/版本等)來定義鏈碼。
【2】執行個體化策略:(可選)
【3】鏈碼簽名
鏈碼的簽名實現以下3個目標
【1】表明是誰建立的鏈碼
【2】允許驗證鏈結碼包裡的內容
【3】可以檢測鏈碼包是否被篡改
鏈碼的執行個體化策略會驗證鏈結碼所有者的身份,進而驗證其提交的鏈碼源碼/執行個體化策略是否有效。
(一)鏈碼的建立--兩種方式
【1】多個所有者:
需要多個所有者對鏈碼簽名,先建立一個鏈碼包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不再是多層的嵌套了。結構如下:
深度探索區塊鏈/支援多種語言的智能合約(9)