智慧型合約能夠部署和執行在區塊鏈環境中,由一段**來描述相關的業務邏輯。部署後的智慧型合約在區塊鏈中無法修改,智慧型合約的執行完全由**決定,不受人為因素的干擾。一般來說,參與方通過智慧型合約規定各自權利和義務、觸發合約的條件以及結果,一旦該智慧型合約在區塊鏈環境中執行就可以得出客觀、準確的結果。
在 fabric 中,智慧型合約也稱為鏈碼(chaincode),分為使用者鏈碼和系統鏈碼,通常指的是使用者鏈碼。鏈碼是訪問賬本的基本方法,一般是用go等高階語言編寫的、實現規定介面的**。上層應用可以通過呼叫鏈碼來初始化和管理賬本的狀態。只要有適當的許可權,鏈碼之間也可以互相呼叫。
1. 鏈碼的背書策略
鏈碼例項化時可指定背書策略,當確認節點接收到交易時,節點獲知相關鏈碼資訊,然後檢查該鏈碼的背書策略,判斷交易是否滿足背書策略,若滿足則標註交易為合法。
背書策略可分為主體 principal(p )和閾值 threshold(t) 兩部分,具體如下:
1)principal 指定由哪些成員進行背書。
2)threshold 接受兩個輸入,分別為閾值t和若干個p的集合n,只要交易中包含了 n 中 t 個成員的背書則認為交易合法。
例如:t(1, 『a』, 『b』) 則需要 a,b 中任意成員背書。 t(1, 『a』, t(2, 『b』, 『c』)) 則需要 a成員背書或 b,c 成員同時背書。
2. 鏈碼開發
type chaincode inte***ce
下面通過乙個例子講解鏈碼的開發流程,示例鏈碼根據交易的型別建立鍵值對並記錄到賬本中,或者根據鍵名到賬本中查詢與之相對應的值。
請先確保 go 語言環境已經安裝並且正確設定 gopath 環境變數。
(1)建立鏈碼存放目錄
建立keyvaluestore目錄以存放鏈碼,同時進入目錄
mkdir $gopath/src/keyvaluestore
cd $gopath/src/keyvaluestore
建立並編輯鏈碼檔案 keyvaluestore.go 。
(2)鏈碼源**分析
1)匯入標頭檔案。
鏈碼必須依賴 chaincode shim 包和 peer protobuf 包,它們分別用於鏈碼的控制與資料傳輸,其次定義 keyvaluestore 型別,作為 chaincode shim 的載體。
7)invoke和query鏈碼。
$ peer chaincode query -n mycc -c '' -c myc
$ peer chaincode invoke -n mycc -c '' -c myc
$ peer chaincode query -n mycc -c '' -c myc
正常情況下,兩次 query 返回的結果分別為 10 和 20。
開發鏈碼時可以通過上述過程進行測試,但需避免使用相同的鏈碼 id 以免鏈碼例項化失敗。另外,對於鏈碼公升級來說,鏈碼的 id 應該保持不變,同時新鏈碼的版本號需要比先前例項化的版本高,並通過 upgrade 交易來更新鏈碼在通道中的狀態。
假設對鏈碼 keyvaluestore.go 進行了更改,並把最新的鏈碼儲存在$gopath/src/keyvaluestorenew 下,則公升級鏈碼的操作如下:
1)進入fabric-samples目錄並拷貝最新鏈碼到chaincode目錄。
$ cd $gopath/src/fabric-samples
$ cp -r $gopath/src/keyvaluestorenew ./chaincode
2)進入chaincode容器,編譯並執行更新後的鏈碼。
$ docker exec -it chaincode bash
$ cd keyvaluestorenew && go build
$ export core_peer_address=peer:7051
$ export core_chaincode_id_name=mycc:1
$ ./keyvaluestorenew
$ exit
3)進入cli容器並公升級鏈碼。
$ docker exec -it cli bash
$ peer chaincode install -p chaincodedev/chaincode/keyvaluestorenew -n mycc -v 1
$ peer chaincode upgrade -n mycc -v 1 -c '' -c myc
到此公升級鏈碼完畢,可以對最新的鏈碼mycc進行操作。
Fabric基礎架構原理 4 鏈碼
鏈客,有問必答!智慧型合約能夠部署和執行在區塊鏈環境中,由一段 來描述相關的業務邏輯。部署後的智慧型合約在區塊鏈中無法修改,智慧型合約的執行完全由 決定,不受人為因素的干擾。一般來說,參與方通過智慧型合約規定各自權利和義務 觸發合約的條件以及結果,一旦該智慧型合約在區塊鏈環境中執行就可以得出客觀 準...
Fabric基礎架構原理 鏈碼
鏈客,有問必答!fabric基礎架構原理 鏈碼 智慧型合約能夠部署和執行在區塊鏈環境中,由一段 來描述相關的業務邏輯。部署後的智慧型合約在區塊鏈中無法修改,智慧型合約的執行完全由 決定,不受人為因素的干擾。一般來說,參與方通過智慧型合約規定各自權利和義務 觸發合約的條件以及結果,一旦該智慧型合約在區...
區塊鏈 Fabric基礎架構原理(二)
fabric 的網路節點本質上是互相複製的狀態機,節點之間需要保持相同的賬本狀態。為了實現這個目的,各個節點需要通過共識 consensus 過程,對賬本狀態的變化達成一致性的認同。fabric 的共識過程包括 3 個階段 背書 排序和校驗。在背書 endorsement 階段中,背書節點對客戶端發...