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