91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

fabric鏈碼Python開發包怎么用

發布時間:2021-12-29 09:00:46 來源:億速云 閱讀:210 作者:小新 欄目:互聯網科技

這篇文章主要介紹fabric鏈碼Python開發包怎么用,文中介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們一定要看完!

Fabric-chaincode-python 開發包適用于Hyperledger Fabric區塊鏈Python鏈碼的開發,支持Fabric 1.4和2.0,官方下載地址:http://sc.hubwiz.com/codebag/fabric-chaincode-python/。

1、開發包概述

Fabric-chaincode-ptyon開發包主要包含以下特性:

  • 完整覆蓋Fabric官方開發包(go/java/node)提供的API接口

  • 基于asyncio異步模型實現,并發性能更出色

  • 內置wiz工具箱,可快速搭建Hyperledger Fabric開發環境

Fabric-chaincode-python開發包運行在**Python 3.7+**環境下,當前版本1.0.0,主要類/接口及關系如下圖所示:

fabric鏈碼Python開發包怎么用

Fabric-chaincode-python開發包的主要代碼文件清單參見官網說明:http://sc.hubwiz.com/codebag/fabric-chaincode-python/

2、用Wiz工具箱快速啟動Fabric網絡

Wiz工具箱可以快速搭建一個簡單的Fabric網絡作為鏈碼和應用開發環境,該網絡中僅包含單一的peer節點和orderer節點,主要特征如下:

  • 機構及MSPID:Org1/Org1MSP

  • 通道名稱:ch2

  • 鏈碼名稱:wizcc

  • 排序節點:127.0.0.1:7050

  • 對等節點:127.0.0.1:7051/7052

啟動Fabric網絡需要使用三個終端,并分別為這三個終端設置wiz工具箱的環境變量:

~/fabric-chaincode-python$ source wiz_env.sh

STEP 1:在1#終端創建一個新目錄devnet用來初始化一個fabric項目:

~/fabric-chaincode-python$ mkdir devnet && cd devnet
~/fabric-chaincode-python/devnet$ wiz init

結果如下:

fabric鏈碼Python開發包怎么用

STEP 2:在1#終端使用wiz net reset初始化Fabric網絡的密碼學資料和通道初始化交易資料:

~/fabric-chaincode-python/devnet$ wiz net reset

結果如下:

fabric鏈碼Python開發包怎么用

STEP 3:在1#終端使用wiz net start啟動Fabric網絡的peer節點和orderer節點:

~/fabric-chaincode-python/devnet$ wiz net start

結果如下:

fabric鏈碼Python開發包怎么用

STEP 4:在2#終端使用wiz cc start啟動wiz工具箱預置的Python鏈碼:

~/fabric-chaincode-python/devnet$ wiz cc start

結果如下:

fabric鏈碼Python開發包怎么用

STEP 5:在3#終端使用wiz ch start命令創建通道ch2并將peer節點加入通道:

~/fabric-chaincode-python/devnet$ wiz ch start

結果如下:

fabric鏈碼Python開發包怎么用

測試鏈碼:在3#終端使用wiz admin命令進入管理控制臺:

~/fabric-chaincode-python/devnet$ wiz admin

結果如下:

fabric鏈碼Python開發包怎么用

使用peer chaincode query命令測試預置鏈碼的查詢:

admin@org1> peer chaincode query -n wizcc -c '{"args":[]}' -C ch2

結果如下:

fabric鏈碼Python開發包怎么用

使用peer chaincode invoke命令測試預置鏈碼的交易:

admin@org1> peer chaincode invoke -n wizcc -c '{"args":[]}' -C ch2

結果如下:

fabric鏈碼Python開發包怎么用

3、運行開發包中的演示Python鏈碼

在Hyperledger Fabric網絡啟動之后,我們就可以使用預置的演示鏈碼直接替換devnet中的鏈碼。

例如,要運行token_demo.py示例,首先在2#終端按ctrl+c停止wiz預置鏈碼的運行,然后進入fabric-chaincode-python根目錄執行演示鏈碼即可:

~/fabric-chaincode-python$ python3 token_demo.py

在3#終端的管理控制臺測試余額查詢和轉賬:

admin@org1> peer chaincode query -n wizcc -c '{"args":["balance","tommy"]}' -C ch2
admin@org1> peer chaincode invoke -n wizcc  -c '{"args":["transfer","tommy","jerry","10"]}' -C ch2

4、Python鏈碼開發示例

下面的Python代碼使用Fabric-chaincode-python實現了一個簡單代幣的發行、轉賬與余額查詢,說明詳見注釋部分:

from fabric_shim import Shim                                  #引入fabric_shim 

class TokenChaincode:                                         #定義鏈碼
  async def init(self,stub):                                  #鏈碼初始化處理
    await stub.put_state('tommy',b'1000')                     #向tommy發行1000代幣
    await stub.put_state('jerry',b'1000')                     #向jerry發行1000代幣
    return Shim.success(b'init ok')                           #返回成功信息

  async def invoke(self,stub):                                #鏈碼交易處理
    fcn, args = stub.get_function_and_parameters()            #獲取鏈碼調用方法名和參數列表  
    
    if fcn == 'reset':                                        #根據方法名進行路由
      return await self.init(stub)  
    if fcn == 'balance':
      return await self.balance(stub,args[0])
    if fcn == 'transfer':
      return await self.transfer(stub,args[0],args[1],args[2])
      
    return Shim.error(b'method not supported')                #未知的方法名返回錯誤信息

  async def balance(self,stub,account):                       #賬戶余額查詢方法
    value = await stub.get_state(account)                     #從賬本讀取余額
    return Shim.success(b'balance => ' + value)               #返回余額信息

  async def transfer(self,stub,owner,to,value):               #代幣轉賬方法
    value = int(value)
    owner_balance = await stub.get_state(owner)
    owner_balance = int(owner_balance) - value                #扣除轉出方余額
    to_balance = await stub.get_state(to)
    to_balance = int(to_balance) + value                      #增加轉入放余額
    await stub.put_state(owner,                               #更新轉出方狀態
        bytes(str(owner_balance),'utf-8')) 
    await stub.put_state(to,bytes(str(to_balance),'utf-8'))   #更新轉入方狀態
    return Shim.success(b'transfer ok')                       #返回成功信息  

Shim.start( TokenChaincode() )                                #啟動鏈碼

5、Python鏈碼開發包API清單

Shim的主要API清單如下:

  • start():啟動鏈碼

  • success():創建成功響應對象

  • error():創建失敗響應對象

ChaincodeSupportClient的主要API清單如下:

  • chat():啟動與peer節點的雙向通信流

ChaincodeStub的主要API清單如下:

  • get_function_and_parameters():獲取鏈碼調用方法名和參數列表

  • get_txid():獲取鏈碼調用交易的ID

  • get_channel_id():獲取鏈碼調用交易的通道ID

  • get_creator():獲取鏈碼調用交易的用戶ID

  • get_transient():獲取鏈碼調用交易的暫態數據集

  • get_tx_timestamp():獲取鏈碼調用交易的時間戳

  • get_state():獲取賬本上指定鍵的狀態

  • put_state():更新賬本上指定鍵的狀態

  • delete_state():刪除賬本上指定鍵的狀態

  • set_state_validation_parameter():設置狀態驗證參數

  • get_state_validation_parameter():獲取狀態驗證參數

  • get_state_by_range():獲取賬本上指定范圍內的鍵的狀態

  • get_state_by_range_with_pagination():分頁獲取賬本上指定范圍內的鍵的狀態

  • get_query_result():獲取節點富查詢結果,僅在采用couchdb作為peer節點存儲庫是有效

  • get_query_result_with_pagination():分頁獲取節點富查詢結果

  • get_history_for_key():獲取賬本上指定鍵的更新歷史

  • invoke_chaincode():調用其他鏈碼

  • set_event():觸發鏈碼事件

  • create_composite_key():創建復合鍵

  • split_composite_key():拆分復合鍵,返回復合鍵類型和組成屬性值

  • get_state_by_partial_composite_key():使用部分復合鍵查詢賬本狀態

  • get_state_by_partial_composite_key_with_pagination():使用部分復合鍵分頁查詢賬本狀態

  • get_private_data():獲取指定私有數據集中的指定鍵的狀態

  • get_private_data_hash():獲取指定私有數據集中的指定鍵的狀態哈希

  • put_private_data():更新指定私有數據集中的指定鍵的狀態

  • delete_private_data():刪除指定私有數據集中的指定鍵

  • set_private_data_validation_parameter():設置私有數據的驗證參數

  • get_private_data_validation_parameter():獲取私有數據的驗證參數

  • get_private_data_by_range():獲取指定私有數據集中指定范圍的鍵的狀態

  • get_private_data_by_partial_composite_key():使用部分復合鍵查詢私有數據集

  • get_private_data_query_result():獲取私有數據集的富查詢結果,僅在啟用couchdb時有效

以上是“fabric鏈碼Python開發包怎么用”這篇文章的所有內容,感謝各位的閱讀!希望分享的內容對大家有幫助,更多相關知識,歡迎關注億速云行業資訊頻道!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

盱眙县| 三原县| 江华| 扬州市| 乳山市| 天等县| 兴国县| 郁南县| 新干县| 德化县| 布尔津县| 石河子市| 青州市| 比如县| 根河市| 绿春县| 蒙城县| 边坝县| 饶阳县| 朝阳县| 淮阳县| 甘泉县| 古浪县| 灵宝市| 武城县| 涟源市| 韩城市| 合川市| 双牌县| 长沙县| 珲春市| 逊克县| 台州市| 乌兰察布市| 渭源县| 百色市| 和龙市| 大名县| 福泉市| 梁山县| 和硕县|