日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Fabric--简单的资产Chaincode

發布時間:2025/3/21 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Fabric--简单的资产Chaincode 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

簡單的資產Chaincode

應用程序是一個基本樣本鏈代碼,用于在分類賬上創建資產

安裝Go及Docker, Docker-compose, 并配置Go相應的環境變量

創建目錄

為chaincode應用程序創建一個目錄作為其子目錄

$ mkdir -p $GOPATH/src/test $ cd $GOPATH/src/test

新建文件

新建一個文件,用于編寫Go代碼

$ touch test.go $ vim test.go

編寫代碼

必須實現 Chaincode接口的Init和Invoke函數。因此,須在文件中添加go import語句以獲取鏈代碼的依賴。

導入chaincode shim包和 peer protobuf包。然后添加一個結構SimpleChaincdoe作為Chaincode函數的接收器

package mainimport ("fmt""github.com/hyperledger/fabric/core/chaincode/shim""github.com/hyperledger/fabric/protos/peer" )type SimpleChaincdoe struct { }

初始化Chaincode

Init方法

  • 獲取參數, 使用GetStringArgs 函數檢索調用 的參數
  • 檢查合法性, 檢查參數數量是否為2個, 如果不是, 則返回錯誤信息
  • 利用兩參數, 調用PutState方法向賬本中寫入狀態, 如果有錯誤則返回(shim.Error()), 否則返回nil(shim.Success)
func (t *SimpleChaincdoe) Init(stub shim.ChaincodeStubInterface) peer.Response {}

調用實現

Invoke方法

驗證函數名稱為set或get,并調用那些鏈式代碼應用程序函數,通過shim.Success或shim.Error函數返回響應

  • 獲取函數名與參數
  • 對獲取到的參數名稱進行判斷, 如果為set, 則調用set方法, 反之調用get
  • set/get函數返回兩個值(result, err)
  • 如果err不為空則返回錯誤
  • err為空則返回[]byte(result)
func (t *SimpleChaincdoe) Invoke(stub shim.ChaincodeStubInterface) peer.Response {}

實現Chaincode應用

chaincode應用程序實現了兩個可以通過Invoke函數調用的函數(set/get)

為了訪問分類賬的狀態,利用 chaincode shim API 的ChaincodeStubInterface.PutState 和ChaincodeStubInterface.GetState函數

set函數, 返回兩個值
  • 檢查參數個數是否為2
  • 利用PutState方法將狀態寫入
  • 如果成功,則返回要寫入的狀態, 失敗返回錯誤: fmt.Errorf(“…”)
func set(stub shim.ChaincodeStubInterface, args []string) (string, error) {}
get函數, 返回兩個值
  • 接收參數并判斷個數 是否為1個
  • 調用GetState方法返回并接收兩個返回值(value, err)
  • 判斷err及value是否為空 return “”, fmt.Errorf(“……”)
  • 返回值 return string(value), nil
func get(stub shim.ChaincodeStubInterface, args []string) (string, error) {}

main方法

func main() {if err := shim.Start(new(SimpleChaincdoe)); err != nil {fmt.Printf("Error starting SimpleAsset chaincode: %s", err)} }

構建Chaincode

編譯chaincode

$ go get -u --tags nopkcs11 github.com/hyperledger/fabric/core/chaincode/shim $ go build --tags nopkcs11

使用開發模式測試

正常情況下chaincode由對等體啟動和維護。然而,在“開發模式”下,鏈碼由用戶構建并啟動

如果沒有安裝Hyperledger Fabric Samples請先安裝

如果沒有下載Docker images請先下載

跳轉至fabric-samples的chaincode-docker-devmode目錄

$ cd ~/hyfa/fabric-samples/chaincode-docker-devmode/

使用docker images查看Docker鏡像信息(顯示本地Docker Registry)

$ sudo docker images

會看到如下輸出

REPOSITORY TAG IMAGE ID CREATED SIZE hyperledger/fabric-tools latest b7bfddf508bc About an hour ago 1.46GB hyperledger/fabric-tools x86_64-1.1.0 b7bfddf508bc About an hour ago 1.46GB hyperledger/fabric-orderer latest ce0c810df36a About an hour ago 180MB hyperledger/fabric-orderer x86_64-1.1.0 ce0c810df36a About an hour ago 180MB hyperledger/fabric-peer latest b023f9be0771 About an hour ago 187MB hyperledger/fabric-peer x86_64-1.1.0 b023f9be0771 About an hour ago 187MB hyperledger/fabric-javaenv latest 82098abb1a17 About an hour ago 1.52GB hyperledger/fabric-javaenv x86_64-1.1.0 82098abb1a17 About an hour ago 1.52GB hyperledger/fabric-ccenv latest c8b4909d8d46 About an hour ago 1.39GB hyperledger/fabric-ccenv x86_64-1.1.0 c8b4909d8d46 About an hour ago 1.39GB ......

使用三個終端

終端1 啟動網絡
啟動網絡
$ sudo docker-compose -f docker-compose-simple.yaml up -d

上面的命令以SingleSampleMSPSoloorderer配置文件啟動網絡,并以“dev模式”啟動對等體。它還啟動了兩個額外的容器 : 一個用于chaincode環境,一個用于與chaincode交互的CLI。創建和加入通道的命令被嵌入到CLI容器中,因此可以立即跳轉到鏈式代碼調用

終端2 建立并啟動鏈碼

打開第二個終端, 進入到chaincode-docker-devmode 目錄

$ cd ~/hyfa/fabric-samples/chaincode-docker-devmode/

進入

$ sudo docker exec -it chaincode bash

命令提示符變為:

root@858726aed16e:/opt/gopath/src/chaincode#

編譯

進入test目錄編譯chaincode

root@858726aed16e:/opt/gopath/src/chaincode# cd test root@858726aed16e:/opt/gopath/src/chaincode/test# go build
運行chaincode
CORE_PEER_ADDRESS=peer:7052 CORE_CHAINCODE_ID_NAME=test:0 ./test
終端3 使用鏈碼
$ sudo docker exec -it cli bash
安裝及實例化

進入CLI容器后執行如下命令安裝及實例化chaincode

peer chaincode install -p chaincodedev/chaincode/test -n test -v 0 peer chaincode instantiate -n test -v 0 -c '{"Args":["a","10"]}' -C myc
調用

進行調用,將a的值更改為20

peer chaincode invoke -n test -c '{"Args":["set", "a", "20"]}' -C myc

執行成功, 輸出如下內容

...... ...... Chaincode invoke successful. result: status:200 payload:"20" ......
查詢

查詢a的值

peer chaincode query -n test -c '{"Args":["query","a"]}' -C myc

執行成功, 輸出: Query Result: 20

總結

以上是生活随笔為你收集整理的Fabric--简单的资产Chaincode的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。