【翻譯】Hyperledger Fabric v1.1 中的系統(tǒng)鏈碼

Hyperledger Fabric 交易流

Hyperledger Fabric v1.1提供了幾個特殊的鏈碼來執(zhí)行某些特殊的任務(wù),這些鏈碼被稱為系統(tǒng)鏈碼 (System Chaincode)。本文的目的是簡述這些鏈碼的實現(xiàn)改橘、功能和用法谍夭。與用戶鏈碼類似箩帚,系統(tǒng)鏈碼也實現(xiàn)了 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

下面,將對每個系統(tǒng)鏈碼的功能以及使用進行闡述芋哭。值得注意的是沉衣,因為我們可能需要傳輸golang結(jié)構(gòu)體的序列化的protobuf bytes,用命令行(CLI)進行簡單的invoke/query可能不能使用系統(tǒng)鏈碼的提供的全部功能减牺。因此豌习,推薦使用SDK進行執(zhí)行這些功能。在本文中拔疚,僅通過CLI執(zhí)行invoke/query操作演示系統(tǒng)鏈碼的部分功能肥隆。

1. Configuration System Chaincode (CSCC)

CSCC 管理peer上通道相關(guān)的信息以及執(zhí)行通道配置交易。它提供五個方法:(i) JoinChain, (ii) GetConfigBlock, (iii) GetConfigTree, (iv) SimulateConfigTreeUpdate, (v) GetChannels草雕。

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

JoinChain 方法用來使一個peer加入通道憨琳。它需要一個參數(shù)诫钓,即通道配置區(qū)塊的序列化的protobuf bytes,其中通道配置區(qū)塊作為peer channel create命令的返回從orderer獲取篙螟。下面的CLI命令使peer加入名為ch1的通道菌湃。在調(diào)用CSCC時,peer channel join命令負責讀取ch1.block并把它以bytes的形式傳入遍略。但是惧所,如果我們直接使用peer chaincode invoke來調(diào)用JoinChain方法,將ch1.block的內(nèi)容放入CLI請求是比較困難的绪杏。

$ peer channel join -b ch1.block

GetConfigBlock 方法用于獲取給定通道的當前的配置區(qū)塊下愈。它需要一個參數(shù),即通道名字的byte形式蕾久。如下的兩條CLI命令都可以用于獲取通道mychannel的配置區(qū)塊势似。

$ 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結(jié)構(gòu)和模擬執(zhí)行config結(jié)構(gòu)更新履因。如果要從一個通道添加或移除組織障簿,必須獲取config tree來進行修改,并在調(diào)用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的文件系統(tǒng)(/var/hyperledger/production/chaincodes)朗兵。它需要一個參數(shù)污淋,即chaincode deployment spec (core/common/ccprovider/cdspackage.go)的序列化protobuf bytes。盡管我們可以通過傳入整個chaincode的內(nèi)容來直接調(diào)用LSCC余掖,但更好的做法是使用peer chaincode install命令寸爆,這個命令在其將通過讀取chaincode的內(nèi)容對LSCC進行調(diào)用。

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

deploy方法用于在給定的通道上實例化合約盐欺。它可以接受五個參數(shù)赁豆,前兩個參數(shù)——通道的名字和chaincode deployment spec是必須的,其他是那個參數(shù)——背書策略冗美、背書系統(tǒng)合約的名字和驗證系統(tǒng)合約的名字是可選的魔种。

$ 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命令將從通道m(xù)ychannel中獲取mycc合約的deployment spec粉洼。

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

getchaincodes方法用于獲取在部署在通道上的合約的列表节预。如下CLI命令從通道m(xù)ychannel上獲取實例化的合約列表。

$ 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用于獲取合約的數(shù)據(jù)。

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

3. Query System Chaincode (QSCC)

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

GetBlockByNumber方法用于獲取序列化的區(qū)塊锅棕。下面的CLI命令從通道m(xù)ychannel中獲取序號為3的區(qū)塊拙泽。

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

其他方法類似。

4. Endorser System Chaincode (ESCC)

ESCC 被背書節(jié)點(core/endorser/endorser.go)調(diào)用裸燎。背書節(jié)點在執(zhí)行交易之后顾瞻,將它的前面放在transaction response message中。其中顺少,transaction response message也包括交集執(zhí)行的結(jié)果朋其,如交易狀態(tài)王浴、合約事件和read/write set等。一個調(diào)用功能可以包含5-7個參數(shù)梅猿,即Header氓辣、ChaincodeProposalPayload、ChaincodeID袱蚓、Response钞啸、simulation result、events喇潘、payload visibility体斩。

5. Validator System Chaincode (VSCC)

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

譯自:System Chaincodes in Hyperledger Fabric v1.1

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末颖低,一起剝皮案震驚了整個濱河市絮吵,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌忱屑,老刑警劉巖蹬敲,帶你破解...
    沈念sama閱讀 217,509評論 6 504
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異莺戒,居然都是意外死亡伴嗡,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,806評論 3 394
  • 文/潘曉璐 我一進店門从铲,熙熙樓的掌柜王于貴愁眉苦臉地迎上來瘪校,“玉大人,你說我怎么就攤上這事名段≮逖铮” “怎么了?”我有些...
    開封第一講書人閱讀 163,875評論 0 354
  • 文/不壞的土叔 我叫張陵吉嫩,是天一觀的道長价认。 經(jīng)常有香客問我嗅定,道長自娩,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,441評論 1 293
  • 正文 為了忘掉前任渠退,我火速辦了婚禮忙迁,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘碎乃。我一直安慰自己姊扔,他們只是感情好,可當我...
    茶點故事閱讀 67,488評論 6 392
  • 文/花漫 我一把揭開白布梅誓。 她就那樣靜靜地躺著恰梢,像睡著了一般佛南。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上嵌言,一...
    開封第一講書人閱讀 51,365評論 1 302
  • 那天嗅回,我揣著相機與錄音,去河邊找鬼摧茴。 笑死绵载,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的苛白。 我是一名探鬼主播娃豹,決...
    沈念sama閱讀 40,190評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼购裙!你這毒婦竟也來了懂版?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,062評論 0 276
  • 序言:老撾萬榮一對情侶失蹤躏率,失蹤者是張志新(化名)和其女友劉穎定续,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體禾锤,經(jīng)...
    沈念sama閱讀 45,500評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡私股,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,706評論 3 335
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了恩掷。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片倡鲸。...
    茶點故事閱讀 39,834評論 1 347
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖黄娘,靈堂內(nèi)的尸體忽然破棺而出峭状,到底是詐尸還是另有隱情,我是刑警寧澤逼争,帶...
    沈念sama閱讀 35,559評論 5 345
  • 正文 年R本政府宣布优床,位于F島的核電站,受9級特大地震影響誓焦,放射性物質(zhì)發(fā)生泄漏胆敞。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,167評論 3 328
  • 文/蒙蒙 一杂伟、第九天 我趴在偏房一處隱蔽的房頂上張望移层。 院中可真熱鬧,春花似錦赫粥、人聲如沸观话。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,779評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽频蛔。三九已至灵迫,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間晦溪,已是汗流浹背龟再。 一陣腳步聲響...
    開封第一講書人閱讀 32,912評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留尼变,地道東北人利凑。 一個月前我還...
    沈念sama閱讀 47,958評論 2 370
  • 正文 我出身青樓,卻偏偏與公主長得像嫌术,于是被迫代替她去往敵國和親哀澈。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,779評論 2 354

推薦閱讀更多精彩內(nèi)容