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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

Fabric--链码的概念与使用

發布時間:2025/3/21 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Fabric--链码的概念与使用 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

鏈碼的概念與使用

概念:

Chaincode: 鏈上代碼, 簡稱鏈碼, 一般是指用戶編寫的應用代碼

鏈碼被部署在Fabric網絡節點上,

? Peer 節點

? – 背書節點

? – commit節點

? – Leader節點

? – 錨節點

運行在隔離沙盒(當前為Docker容器)中,

并通過gRPC協議與相應的Peer節點進行交互, 以操作分布式賬本中的數據

protobuf

分類

鏈碼一般分為:

  • 用戶鏈碼
  • 系統鏈碼

用戶鏈碼

由應用開發人員使用Go(Java/JS)語言編寫基于區塊鏈分布式賬本的狀態及處理邏輯

運行在鏈碼容器中, 通過Fabric提供的接口與賬本平臺進行交互

系統鏈碼

負責Fabric節點自身的處理邏輯, 包括系統配置、背書、校驗等工作

系統鏈碼僅支持Go語言, 在Peer節點啟動時會自動完成注冊和部署

系統鏈碼共有五種類型:

配置系統鏈碼(CSCC)

CSCC: Configuration System Chaincode

負責賬本和鏈的配置管理

背書管理系統鏈碼(ESCC)

ESCC: Endorsement System Chaincode

負責背書(簽名)過程, 并可以支持對背書策略進行管理

對傳入的鏈碼提案的模擬運行結果進行簽名, 之后創建響應消息返回給客戶端

生命周期系統鏈碼(LSCC)

LSCC: Lifecycle System Chaincode

負責對用戶鏈碼的生命周期進行管理

鏈碼生命周期包括安裝、部署、升級、權限管理、獲取信息等環節.

查詢系統鏈碼(QSCC)

QSCC: Query System Chaincode

負責提供賬本和鏈的信息查詢功能

驗證系統鏈碼(VSCC)

VSCC: Verification System Chaincode

交易提交前根據背書策略進行檢查

驗證過程:

  • 首先解析出交易結構, 并對交易結構格式進行校驗
  • 檢查交易的讀集合中元素版本跟本地賬本中版本一致
  • 檢查帶有合法的背書信息(主要是檢查簽名信息)
  • 通過則返回正確, 否則返回錯誤消息
  • 鏈碼生命周期

    管理Chaincode的生命周期四個命令:

    安裝, 實例化, 升級, 打包, 簽名

    package, install,instantiate,upgrade

    未來還會支持stop和start命令, 來禁用和重新啟用鏈代碼

    鏈代碼成功安裝和實例化后,鏈代碼處于活動狀態(正在運行),可通過invoke命令調用處理事務

    鏈代碼可以在安裝后隨時升級

    安裝鏈碼

    install命令將鏈碼的源碼和環境等內容封裝為一個鏈碼安裝打包文件(Chaincode Install Package, CIP), 并傳輸到背書節點.

    背書節點解析后一般會保存在$CORE_PEER_FILESYSTEMPATH/chaincodes目錄下

    安裝鏈碼只需要與Peer交互

    進入到sacc目錄

    $ cd ~/hyfa/fabric-samples/chaincode/sacc/

    構建Chaincode

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

    命令解釋

    go get: 根據要求和實際情況從互聯網上下載或更新指定的代碼包及其依賴包,并對它們進行編譯和安裝

    -u: 利用網絡來更新已有代碼包及其依賴包。默認情況下,該命令只會從網絡上下載本地不存在的代碼包,而不會更新已有的代碼包

    go build: 加上可編譯的go源文件可以得到一個可執行文件

    如果在執行 go build --tags nopkcsll 命令時出現如下錯誤

    $GOPATH/src/github.com/hyperledger/fabric/vendor/github.com/miekg/pkcs11/pkcs11.go:26:18: fatal error: ltdl.h: No such file or directory compilation terminated.解決方式: 安裝 libltdl-dev $ sudo apt install libltdl-dev

    使用開發模式測試

    正常情況下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 啟動網絡

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

    該目錄下有 myc.tx 文件

    啟動網絡

    $ sudo docker-compose -f docker-compose-simple.yaml up -d

    終端2 建立并啟動鏈碼

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

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

    進入CLI

    chaincode容器的作用是為發簡化的方式建立并啟動鏈碼

    $ sudo docker exec -it chaincode bash

    命令提示符變為:

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

    編譯

    進入sacc目錄編譯chaincode

    root@858726aed16e:/opt/gopath/src/chaincode# cd sacc root@858726aed16e:/opt/gopath/src/chaincode/sacc# go build

    運行chaincode

    CORE_PEER_ADDRESS=peer:7052 CORE_CHAINCODE_ID_NAME=mycc:0 ./sacc

    mycc: 鏈碼名稱

    0: 鏈碼初始版本號

    終端3 使用鏈碼

    安裝及實例化

    $ cd ~/hyfa/fabric-samples/chaincode-docker-devmode/ $ sudo docker exec -it cli bash

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

    容器中已經有 myc.block 、 myc.tx 兩個文件, 可以直接使用

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

    調用

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

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

    執行成功, 輸出如下內容

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

    查詢

    查詢a的值

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

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

    打包鏈碼及簽名

    通過將鏈碼相關數據進行封裝, 可以實現對其進行打包和簽名操作

    打包

    peer chaincode package -n mycc -p chaincodedev/chaincode/sacc -v 0 -s -S -i "AND('OrgA.admin')" ccpack.out

    -s: 創建角色支持的CC部署規范包, 而不是原始的CC部署規范

    -S: 如果創建CC部署規范方案角色支持,也與本地MSP簽名

    -i: 指定實例化策略

    打包后的文件, 可以直接用于install操作, 如:

    ? peer chaincode install ccpack.out

    簽名

    對一個打包文件進行簽名操作(添加當前MSP簽名到簽名列表中)

    peer chaincode signpackage ccpack.out signedccpack.out

    升級鏈碼

    退出終端3, 停止終端2的服務

    終端2中重新運行chaincode

    $ sudo docker exec -it chaincode bashcd sacc go build CORE_PEER_ADDRESS=peer:7052 CORE_CHAINCODE_ID_NAME=mycc:1 ./sacc

    注意版本為 1.0, 舊版本為 0

    終端3

    打開終端3, 進入CLI容器

    $ sudo docker exec -it cli bash

    安裝及升級

    peer chaincode install -p chaincodedev/chaincode/sacc -n mycc -v 1peer chaincode upgrade -n mycc -v 1 -c '{"Args":["a", "100"]}' -C myc

    注意版本號必須一致

    在對某鏈碼代碼升級前, 推薦先將所有該鏈碼的容器停止, 并從Peer上備份并移除舊鏈碼部署文件. 之后先在個別Peer節點上部署新鏈碼, 對原有數據進行測試, 成功后再在其它節點上進行升級操作

    查詢

    查詢a的值

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

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

    總結

    以上是生活随笔為你收集整理的Fabric--链码的概念与使用的全部內容,希望文章能夠幫你解決所遇到的問題。

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