【翻譯】Hyperledger Fabric v1.1 中的系統鏈碼

來源:互聯網
上載者:User
Hyperledger Fabric 交易流

Hyperledger Fabric v1.1提供了幾個特殊的鏈碼來執行某些特殊的任務,這些鏈碼被稱為系統鏈碼 (System Chaincode)。本文的目的是簡述這些鏈碼的實現、功能和用法。與使用者鏈碼類似,系統鏈碼也實現了 Init()Invoke() 方法。Fabric中一共有五種合約:

  1. Configuration System Chaincode (CSCC) -- core/scc/cscc/configure.go
  2. Life Cycle System Chaincode (LSCC) -- core/scc/lscc/lscc.go
  3. Query System Chaincode (QSCC) -- core/scc/qscc/query.go
  4. Endorser System Chaincode (ESCC) -- core/scc/escc/endorser_onevalidsignature.go
  5. Validator System Chaincode (VSCC) -- core/scc/vscc/validator_onevalidsignature.go

下面,將對每個系統鏈碼的功能以及使用進行闡述。值得注意的是,因為我們可能需要傳輸golang結構體的序列化的protobuf bytes,用命令列(CLI)進行簡單的invoke/query可能不能使用系統鏈碼的提供的全部功能。因此,推薦使用SDK進行執行這些功能。在本文中,僅通過CLI執行invoke/query操作示範系統鏈碼的部分功能。

1. Configuration System Chaincode (CSCC)

CSCC 管理peer上通道相關的資訊以及執行通道配置交易。它提供五個方法:(i) JoinChain, (ii) GetConfigBlock, (iii) GetConfigTree, (iv) SimulateConfigTreeUpdate, (v) GetChannels

下面將介紹這些功能的使用。所有的命令都是在sample network (參考setup)中的指向peer0的用戶端中執行的。為了運行CSCC相關的命令,我們需要在CLI命令中使用peer channelpeer chaincode

JoinChain 方法用來使一個peer加入通道。它需要一個參數,即通道配置區塊的序列化的protobuf bytes,其中通道配置區塊作為peer channel create命令的返回從orderer擷取。下面的CLI命令使peer加入名為ch1的通道。在調用CSCC時,peer channel join命令負責讀取ch1.block並把它以bytes的形式傳入。但是,如果我們直接使用peer chaincode invoke來調用JoinChain方法,將ch1.block的內容放入CLI請求是比較困難的。

$ peer channel join -b ch1.block

GetConfigBlock 方法用於擷取給定通道的當前的配置區塊。它需要一個參數,即通道名字的byte形式。如下的兩條CLI命令都可以用於擷取通道mychannel的配置區塊。

$ peer chaincode query -C "mychannel" -n cscc -c '{"Args":["GetConfigBlock", "mychannel"]}'

peer channel fetch -o orderer0:7050 config -c mychannel

GetChannels方法用於擷取peer目前所加入的通道。如下的兩條CLI命令都可以用於擷取所有的通道。

$ peer chaincode query -C "" -n cscc -c '{"Args":["GetChannels"]}'

$ peer channel list

GetConfigTreeSimulateConfigTreeUpdate用於擷取config結構和類比執行config結構更新。如果要從一個通道添加或移除組織,必須擷取config tree來進行修改,並在調用SimulateConfigTree方法時,必須擷取CSCC的背書。

2. Life Cycle System Chaincode (LSCC)

LSCC 用於管理鏈碼的生命週期——在peer上安裝、在通道上部署和升級、使用者從運行中的鏈碼擷取資訊。它提供了八個方法:(i) install, (ii) deploy, (iii) upgrade, (iv) getid, (v) getdepspec, (vi) getccdata, (vii) getchaincodes, (viii) getinstalledchaincodes

install方法用於儲存chaincode程式到peer的檔案系統(/var/hyperledger/production/chaincodes)。它需要一個參數,即chaincode deployment spec (core/common/ccprovider/cdspackage.go)的序列化protobuf bytes。儘管我們可以通過傳入整個chaincode的內容來直接調用LSCC,但更好的做法是使用peer chaincode install命令,這個命令在其將通過讀取chaincode的內容對LSCC進行調用。

$ peer chaincode install -n mycc -v 1.0 -p github.com/hyperledger/fabric/examples/chaincode/go/chaincode_example02

deploy方法用於在給定的通道上執行個體化合約。它可以接受五個參數,前兩個參數——通道的名字和chaincode deployment spec是必須的,其他是那個參數——背書策略、背書系統合約的名字和驗證系統合約的名字是可選的。

$ peer chaincode instantiate -o orderer0:7050 -C mychannel -n mycc -v 1.0 -c '{"Args":["init","a","100","b","200"]}' -P "OR ('Org1MSP', 'Org2MSP')"

getdepspec方法用於擷取安裝在peer上的合約的chaincode deployment spec。下面的CLI命令將從通道mychannel中擷取mycc合約的deployment spec。

$ peer chaincode query -C mychannel -n lscc -c '{"Args":["getdepspec", "mychannel", "mychannel"]}'

getchaincodes方法用於擷取在部署在通道上的合約的列表。如下CLI命令從通道mychannel上擷取執行個體化的合約列表。

$ peer chaincode query -C mychannel -n lscc -c '{"Args":["getchaincodes"]}'

getinstalledchaincodes方法用於擷取在peer上安裝的合約的列表。

$ peer chaincode query -C "" -n lscc -c '{"Args":["getinstalledchaincodes"]}'

upgrade方法用於升級合約。

$ peer chaincode upgrade -o orderer0:7050 -C mychannel -n mycc -v 2.0 -c '{"Args":["reinit"]}' -P "OR ('Org1MSP', 'Org2MSP')"

getid用於擷取合約的id

$ peer chaincode query -C mychannel -n lscc -c '{"Args":["getid","mychannel","mycc"]}'

getccdata用於擷取合約的資料。

$ peer chaincode query -C mychannel -n lscc -c '{"Args":["getccdata","mychannel","mycc"]}'

3. Query System Chaincode (QSCC)

QSCC 將特定的方法暴露給使用者,使得使用者可以查詢在block storage中儲存的區塊和交易。它提供五個方法:(i) GetChainInfo, (ii) GetBlockByNumber, (iii) GetBlockByHash, (iv) GetTransactionByID, (v) GetBlockByTxID

GetBlockByNumber方法用於擷取序列化的區塊。下面的CLI命令從通道mychannel中擷取序號為3的區塊。

$ peer chaincode query -C mychannel -n qscc -c '{"Args":["GetBlockByNumber", "mychannel", "3"]}'

其他方法類似。

4. Endorser System Chaincode (ESCC)

ESCC 被背書節點(core/endorser/endorser.go)調用。背書節點在執行交易之後,將它的前面放在transaction response message中。其中,transaction response message也包括交集執行的結果,如交易狀態、合約事件和read/write set等。一個調用功能可以包含5-7個參數,即Header、ChaincodeProposalPayload、ChaincodeID、Response、simulation result、events、payload visibility。

5. Validator System Chaincode (VSCC)

VSCC 被記賬節點(core/committer/txvalidator/validator.go)調用,來根據合約的背書策略驗證每個交易的簽名集合。

譯自:System Chaincodes in Hyperledger Fabric v1.1

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.