fabric shim安装合约_智能合约简介_智能合约开发_Hyperledger Fabric_开发指南_区块链服务 BaaS - 阿里云...
概述
在 Hyperledger Fabric 中,鏈碼(Chaincode)又稱(chēng)為智能合約(下文中我們統(tǒng)一稱(chēng)為鏈碼),是用Go,node.js或Java編寫(xiě)的程序,主要用于操作賬本上的數(shù)據(jù)。用戶(hù)的應(yīng)用程序通過(guò)鏈碼與 Fabric 賬本數(shù)據(jù)進(jìn)行交互,交互關(guān)系如下圖:
一個(gè)完整的 Fabric 區(qū)塊鏈應(yīng)用包含用戶(hù)的應(yīng)用程序和用戶(hù)編寫(xiě)的鏈碼兩部分。用戶(hù)的應(yīng)用程序通過(guò)區(qū)塊鏈網(wǎng)絡(luò)中部署的的 Peer 節(jié)點(diǎn)調(diào)用鏈碼,用戶(hù)鏈碼通過(guò)區(qū)塊鏈網(wǎng)絡(luò)的 Peer 節(jié)點(diǎn)來(lái)操作賬本數(shù)據(jù)。如下圖所示:
Fabric 中的 Peer 節(jié)點(diǎn)提供了調(diào)用鏈碼相關(guān)服務(wù)的接口。用戶(hù)的應(yīng)用程序可以通過(guò)調(diào)用相關(guān)接口和 Fabric Peer 進(jìn)行交互, Peer 節(jié)點(diǎn)通過(guò)與鏈碼容器進(jìn)行交互,完成應(yīng)用程序和鏈碼之間的交互。
用戶(hù)的應(yīng)用程序可以通過(guò)以下兩種方式與 Fabric Peer 進(jìn)行交互:
利用 Fabric 提供的 SDK 與 Fabric Peer 進(jìn)行交互,具體參看 Fabric SDK。
利用阿里云BaaS提供的 API 接口 與 Fabric Peer 進(jìn)行交互。
生命周期
鏈碼開(kāi)發(fā)編寫(xiě)完成后,并不能直接使用,需要經(jīng)過(guò)一系列的操作之后才能應(yīng)用在 Hyperledger Fabric 網(wǎng)絡(luò)中進(jìn)而處理客戶(hù)端提交的交易。這一系列的操作是由鏈碼的生命周期來(lái)負(fù)責(zé)管理。
管理 Chaincode 的生命周期主要有如下幾個(gè)命令:
package: 對(duì)指定的鏈碼進(jìn)行打包的操作。
install: 將已編寫(xiě)完成的鏈碼安裝在網(wǎng)絡(luò)節(jié)點(diǎn)中。
instantiate: 對(duì)已安裝的鏈碼進(jìn)行實(shí)例化。
upgrade: 對(duì)已有鏈碼進(jìn)行升級(jí)。鏈代碼可以在安裝后根據(jù)具體需求的變化進(jìn)行升級(jí)。
Tips:在阿里云BaaS的控制臺(tái)上,用戶(hù)可以直接完成鏈碼的上傳、安裝、實(shí)例化等操作,不需要依賴(lài)命令行來(lái)完成。
鏈碼類(lèi)型
在 Hyperledger Fabric 中,鏈碼一般分為:
系統(tǒng)鏈碼
用戶(hù)鏈碼
系統(tǒng)鏈碼
系統(tǒng)鏈碼負(fù)責(zé) Fabric 節(jié)點(diǎn)自身的處理邏輯, 包括系統(tǒng)配置、背書(shū)、校驗(yàn)等工作。系統(tǒng)鏈碼僅支持 Go 語(yǔ)言, 在 Peer 節(jié)點(diǎn)啟動(dòng)時(shí)會(huì)自動(dòng)完成注冊(cè)和部署,所以安裝,實(shí)例化和升級(jí)不適用于系統(tǒng)鏈碼。
系統(tǒng)鏈碼主要包括以下幾種:
生命周期系統(tǒng)鏈碼(LSCC):Lifecycle System Chaincode,負(fù)責(zé)對(duì)用戶(hù)鏈碼的生命周期進(jìn)行管理。
配置系統(tǒng)鏈碼(CSCC):Configuration System Chaincode,負(fù)責(zé)處理 Peer 端的 Channel 配置。
查詢(xún)系統(tǒng)鏈碼(QSCC):Query System Chaincode,提供賬本查詢(xún) API,如獲取區(qū)塊和交易等信息。
用戶(hù)鏈碼
用戶(hù)鏈碼是由應(yīng)用程序開(kāi)發(fā)人員根據(jù)業(yè)務(wù)場(chǎng)景需求使用 Golang、node.js 或 Java 語(yǔ)言編寫(xiě)的操作區(qū)塊鏈分布式賬本的狀態(tài)的業(yè)務(wù)處理邏輯代碼,用戶(hù)鏈碼運(yùn)行在鏈碼容器中,通過(guò) Fabric 提供的接口與賬本狀態(tài)進(jìn)行交互。
用戶(hù)鏈碼在區(qū)塊鏈應(yīng)用上處于非常關(guān)鍵的一環(huán),它直接接受用戶(hù)業(yè)務(wù)邏輯的調(diào)用,并對(duì)區(qū)塊鏈分布式賬本數(shù)據(jù)進(jìn)行操作。
背書(shū)策略
每個(gè)智能合約都有與之相關(guān)的背書(shū)策略。該背書(shū)策略可確定哪些組織必須批準(zhǔn)智能合約生成的交易,然后才能將其確認(rèn)為有效交易。在上傳鏈碼及實(shí)例化鏈碼時(shí),需要為其指定對(duì)應(yīng)的背書(shū)策略。
背書(shū)策略舉例:
OR ('Org1MSP.peer','Org2MSP.peer') 表示此通道中的兩個(gè)組織任何一方背書(shū)即可;
AND (‘Org1MSP.peer’,’Org2MSP.peer’) 表示需要此通道中的兩個(gè)組織背書(shū)。
交易執(zhí)行流程
在 Hyperledger Fabric上,一筆交易的執(zhí)行需要 Peer節(jié)點(diǎn)、orderer節(jié)點(diǎn)、CA節(jié)點(diǎn)及client端共同參與。
Peer節(jié)點(diǎn) : 該節(jié)點(diǎn)是參與交易的主體,可以說(shuō)是代表每個(gè)參與到鏈上的成員,它負(fù)責(zé)儲(chǔ)存完整的賬本數(shù)據(jù)即區(qū)塊鏈數(shù)據(jù),負(fù)責(zé)共識(shí)環(huán)節(jié)中的執(zhí)行智能合約,驗(yàn)證區(qū)塊和交易并將合法交易提交(commit)到賬本中。
Orderer節(jié)點(diǎn): 該節(jié)點(diǎn)接受包含背書(shū)簽名的交易請(qǐng)求進(jìn)行排序并打包生產(chǎn)新的區(qū)塊,主體功能便是對(duì)交易排序從而保證各Peer節(jié)點(diǎn)上的數(shù)據(jù)一致性。
CA節(jié)點(diǎn):該節(jié)點(diǎn)負(fù)責(zé)對(duì)加入鏈內(nèi)的所有節(jié)點(diǎn)進(jìn)行授權(quán)認(rèn)證,包括上層的client端,每一個(gè)節(jié)點(diǎn)都有其頒發(fā)的證書(shū)用于交易流程中的身份識(shí)別。
client: Fabric對(duì)于client端提供了SDK讓開(kāi)發(fā)人員可以更容易的對(duì)接到區(qū)塊鏈內(nèi)的交易環(huán)節(jié),交易的發(fā)起便是通過(guò)SDK進(jìn)行。
交易的執(zhí)行流程主要包含如下4大步驟:
由client端發(fā)起一個(gè)交易請(qǐng)求,client會(huì)根據(jù)鏈碼的背書(shū)策略決定把該筆交易發(fā)往哪些背書(shū)的peer節(jié)點(diǎn),由peer節(jié)點(diǎn)進(jìn)行投票,client匯總各背書(shū)節(jié)點(diǎn)的結(jié)果。上圖中的背書(shū)策略要求Peer1、Peer2及Peer3參與交易,所以client將請(qǐng)求分別發(fā)給 Pee1、Peer2 和 Peer3。
三個(gè) Peer 節(jié)點(diǎn)接收到交易請(qǐng)求后執(zhí)行對(duì)應(yīng)的鏈碼并對(duì)結(jié)果進(jìn)行簽名然后分別將輸出結(jié)果返回給client。
client將收到所有的執(zhí)行結(jié)果后連同各peer的背書(shū)(包括其投票結(jié)果以及背書(shū)簽名)后打包發(fā)送給 Orderer節(jié)點(diǎn)。
Orderer 將接收到的該次交易在交易池里進(jìn)行排序并組合打包生成一個(gè)新的區(qū)塊,并將新的區(qū)塊發(fā)送給所有的Peer節(jié)點(diǎn),每個(gè)Peer節(jié)點(diǎn)接收到新區(qū)塊后,對(duì)其中的每一筆交易結(jié)果的簽名進(jìn)行驗(yàn)證是否符合背書(shū)策略,以及比對(duì)讀寫(xiě)集合與本地的版本是否相同,如滿(mǎn)足所有條件則將新的區(qū)塊寫(xiě)入本地賬本內(nèi)完成交易。
注意事項(xiàng)
跨通道的鏈碼間調(diào)用
如果被調(diào)用鏈碼與調(diào)用鏈碼位于不同的通道,則僅允許讀取查詢(xún)。 也就是說(shuō),在另一個(gè)通道上的被調(diào)用鏈碼僅僅是一個(gè)查詢(xún),它不參與后續(xù)提交階段的狀態(tài)驗(yàn)證檢查。
相同通道下的鏈碼間調(diào)用
如果被調(diào)用鏈碼與調(diào)用鏈碼位于相同通道,則其被調(diào)用鏈碼生成的讀寫(xiě)集會(huì)被加入調(diào)用鏈碼對(duì)應(yīng)的交易,即共用同一筆交易而不會(huì)產(chǎn)生不同的交易。
鏈碼shim包依賴(lài)
鏈碼中需要依賴(lài)shim包(ChainCodeStub)來(lái)與Peer節(jié)點(diǎn)通信,部分語(yǔ)言shim包也提供了擴(kuò)展接口(例如處理調(diào)用者身份)。在鏈碼實(shí)例化編譯時(shí)Peer節(jié)點(diǎn)默認(rèn)提供了與節(jié)點(diǎn)版本一致的shim包,如果您的鏈碼依賴(lài)其他兼容版本(v1.4.x)的shim包,請(qǐng)一并打包在鏈碼文件中。
2020年4月29日之前創(chuàng)建的節(jié)點(diǎn)版本為v1.4.2,之后創(chuàng)建的節(jié)點(diǎn)版本為v1.4.5
Golang 依賴(lài): github.com/hyperledger/fabric/core/chaincode/shim、github.com/hyperledger/fabric/protos/peer
Java 依賴(lài):fabric-chaincode-shim-1.4.x.jar、fabric-chaincode-protos-1.4.x.jar
總結(jié)
以上是生活随笔為你收集整理的fabric shim安装合约_智能合约简介_智能合约开发_Hyperledger Fabric_开发指南_区块链服务 BaaS - 阿里云...的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: erp采购总监个人总结_erp采购总监总
- 下一篇: centos 安装jdk_centos7