這篇文章主要介紹fabric鏈碼Python開發(fā)包怎么用,文中介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們一定要看完!
創(chuàng)新互聯(lián)長(zhǎng)期為近千家客戶提供的網(wǎng)站建設(shè)服務(wù),團(tuán)隊(duì)從業(yè)經(jīng)驗(yàn)10年,關(guān)注不同地域、不同群體,并針對(duì)不同對(duì)象提供差異化的產(chǎn)品和服務(wù);打造開放共贏平臺(tái),與合作伙伴共同營(yíng)造健康的互聯(lián)網(wǎng)生態(tài)環(huán)境。為東湖企業(yè)提供專業(yè)的網(wǎng)站建設(shè)、做網(wǎng)站,東湖網(wǎng)站改版等技術(shù)服務(wù)。擁有十載豐富建站經(jīng)驗(yàn)和眾多成功案例,為您定制開發(fā)。
Fabric-chaincode-python開發(fā)包適用于Hyperledger Fabric區(qū)塊鏈Python鏈碼的開發(fā),支持Fabric 1.4和2.0,官方下載地址:http://sc.hubwiz.com/codebag/fabric-chaincode-python/。
Fabric-chaincode-ptyon開發(fā)包主要包含以下特性:
完整覆蓋Fabric官方開發(fā)包(go/java/node)提供的API接口
基于asyncio異步模型實(shí)現(xiàn),并發(fā)性能更出色
內(nèi)置wiz工具箱,可快速搭建Hyperledger Fabric開發(fā)環(huán)境
Fabric-chaincode-python開發(fā)包運(yùn)行在**Python 3.7+**環(huán)境下,當(dāng)前版本1.0.0,主要類/接口及關(guān)系如下圖所示:
Fabric-chaincode-python開發(fā)包的主要代碼文件清單參見官網(wǎng)說(shuō)明:http://sc.hubwiz.com/codebag/fabric-chaincode-python/
Wiz工具箱可以快速搭建一個(gè)簡(jiǎn)單的Fabric網(wǎng)絡(luò)作為鏈碼和應(yīng)用開發(fā)環(huán)境,該網(wǎng)絡(luò)中僅包含單一的peer節(jié)點(diǎn)和orderer節(jié)點(diǎn),主要特征如下:
機(jī)構(gòu)及MSPID:Org1/Org1MSP
通道名稱:ch2
鏈碼名稱:wizcc
排序節(jié)點(diǎn):127.0.0.1:7050
對(duì)等節(jié)點(diǎn):127.0.0.1:7051/7052
啟動(dòng)Fabric網(wǎng)絡(luò)需要使用三個(gè)終端,并分別為這三個(gè)終端設(shè)置wiz工具箱的環(huán)境變量:
~/fabric-chaincode-python$ source wiz_env.sh
STEP 1:在1#終端創(chuàng)建一個(gè)新目錄devnet
用來(lái)初始化一個(gè)fabric項(xiàng)目:
~/fabric-chaincode-python$ mkdir devnet && cd devnet ~/fabric-chaincode-python/devnet$ wiz init
結(jié)果如下:
STEP 2:在1#終端使用wiz net reset
初始化Fabric網(wǎng)絡(luò)的密碼學(xué)資料和通道初始化交易資料:
~/fabric-chaincode-python/devnet$ wiz net reset
結(jié)果如下:
STEP 3:在1#終端使用wiz net start
啟動(dòng)Fabric網(wǎng)絡(luò)的peer節(jié)點(diǎn)和orderer節(jié)點(diǎn):
~/fabric-chaincode-python/devnet$ wiz net start
結(jié)果如下:
STEP 4:在2#終端使用wiz cc start
啟動(dòng)wiz工具箱預(yù)置的Python鏈碼:
~/fabric-chaincode-python/devnet$ wiz cc start
結(jié)果如下:
STEP 5:在3#終端使用wiz ch start
命令創(chuàng)建通道ch2
并將peer節(jié)點(diǎn)加入通道:
~/fabric-chaincode-python/devnet$ wiz ch start
結(jié)果如下:
測(cè)試鏈碼:在3#終端使用wiz admin
命令進(jìn)入管理控制臺(tái):
~/fabric-chaincode-python/devnet$ wiz admin
結(jié)果如下:
使用peer chaincode query
命令測(cè)試預(yù)置鏈碼的查詢:
admin@org1> peer chaincode query -n wizcc -c '{"args":[]}' -C ch2
結(jié)果如下:
使用peer chaincode invoke
命令測(cè)試預(yù)置鏈碼的交易:
admin@org1> peer chaincode invoke -n wizcc -c '{"args":[]}' -C ch2
結(jié)果如下:
在Hyperledger Fabric網(wǎng)絡(luò)啟動(dòng)之后,我們就可以使用預(yù)置的演示鏈碼直接替換devnet中的鏈碼。
例如,要運(yùn)行token_demo.py示例,首先在2#終端按ctrl+c
停止wiz預(yù)置鏈碼的運(yùn)行,然后進(jìn)入fabric-chaincode-python根目錄執(zhí)行演示鏈碼即可:
~/fabric-chaincode-python$ python3 token_demo.py
在3#終端的管理控制臺(tái)測(cè)試余額查詢和轉(zhuǎn)賬:
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
下面的Python代碼使用Fabric-chaincode-python實(shí)現(xiàn)了一個(gè)簡(jiǎn)單代幣的發(fā)行、轉(zhuǎn)賬與余額查詢,說(shuō)明詳見注釋部分:
from fabric_shim import Shim #引入fabric_shim class TokenChaincode: #定義鏈碼 async def init(self,stub): #鏈碼初始化處理 await stub.put_state('tommy',b'1000') #向tommy發(fā)行1000代幣 await stub.put_state('jerry',b'1000') #向jerry發(fā)行1000代幣 return Shim.success(b'init ok') #返回成功信息 async def invoke(self,stub): #鏈碼交易處理 fcn, args = stub.get_function_and_parameters() #獲取鏈碼調(diào)用方法名和參數(shù)列表 if fcn == 'reset': #根據(jù)方法名進(jìn)行路由 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') #未知的方法名返回錯(cuò)誤信息 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): #代幣轉(zhuǎn)賬方法 value = int(value) owner_balance = await stub.get_state(owner) owner_balance = int(owner_balance) - value #扣除轉(zhuǎn)出方余額 to_balance = await stub.get_state(to) to_balance = int(to_balance) + value #增加轉(zhuǎn)入放余額 await stub.put_state(owner, #更新轉(zhuǎn)出方狀態(tài) bytes(str(owner_balance),'utf-8')) await stub.put_state(to,bytes(str(to_balance),'utf-8')) #更新轉(zhuǎn)入方狀態(tài) return Shim.success(b'transfer ok') #返回成功信息 Shim.start( TokenChaincode() ) #啟動(dòng)鏈碼
Shim
的主要API清單如下:
start():?jiǎn)?dòng)鏈碼
success():創(chuàng)建成功響應(yīng)對(duì)象
error():創(chuàng)建失敗響應(yīng)對(duì)象
ChaincodeSupportClient
的主要API清單如下:
chat():?jiǎn)?dòng)與peer節(jié)點(diǎn)的雙向通信流
ChaincodeStub
的主要API清單如下:
get_function_and_parameters():獲取鏈碼調(diào)用方法名和參數(shù)列表
get_txid():獲取鏈碼調(diào)用交易的ID
get_channel_id():獲取鏈碼調(diào)用交易的通道ID
get_creator():獲取鏈碼調(diào)用交易的用戶ID
get_transient():獲取鏈碼調(diào)用交易的暫態(tài)數(shù)據(jù)集
get_tx_timestamp():獲取鏈碼調(diào)用交易的時(shí)間戳
get_state():獲取賬本上指定鍵的狀態(tài)
put_state():更新賬本上指定鍵的狀態(tài)
delete_state():刪除賬本上指定鍵的狀態(tài)
set_state_validation_parameter():設(shè)置狀態(tài)驗(yàn)證參數(shù)
get_state_validation_parameter():獲取狀態(tài)驗(yàn)證參數(shù)
get_state_by_range():獲取賬本上指定范圍內(nèi)的鍵的狀態(tài)
get_state_by_range_with_pagination():分頁(yè)獲取賬本上指定范圍內(nèi)的鍵的狀態(tài)
get_query_result():獲取節(jié)點(diǎn)富查詢結(jié)果,僅在采用couchdb作為peer節(jié)點(diǎn)存儲(chǔ)庫(kù)是有效
get_query_result_with_pagination():分頁(yè)獲取節(jié)點(diǎn)富查詢結(jié)果
get_history_for_key():獲取賬本上指定鍵的更新歷史
invoke_chaincode():調(diào)用其他鏈碼
set_event():觸發(fā)鏈碼事件
create_composite_key():創(chuàng)建復(fù)合鍵
split_composite_key():拆分復(fù)合鍵,返回復(fù)合鍵類型和組成屬性值
get_state_by_partial_composite_key():使用部分復(fù)合鍵查詢賬本狀態(tài)
get_state_by_partial_composite_key_with_pagination():使用部分復(fù)合鍵分頁(yè)查詢賬本狀態(tài)
get_private_data():獲取指定私有數(shù)據(jù)集中的指定鍵的狀態(tài)
get_private_data_hash():獲取指定私有數(shù)據(jù)集中的指定鍵的狀態(tài)哈希
put_private_data():更新指定私有數(shù)據(jù)集中的指定鍵的狀態(tài)
delete_private_data():刪除指定私有數(shù)據(jù)集中的指定鍵
set_private_data_validation_parameter():設(shè)置私有數(shù)據(jù)的驗(yàn)證參數(shù)
get_private_data_validation_parameter():獲取私有數(shù)據(jù)的驗(yàn)證參數(shù)
get_private_data_by_range():獲取指定私有數(shù)據(jù)集中指定范圍的鍵的狀態(tài)
get_private_data_by_partial_composite_key():使用部分復(fù)合鍵查詢私有數(shù)據(jù)集
get_private_data_query_result():獲取私有數(shù)據(jù)集的富查詢結(jié)果,僅在啟用couchdb時(shí)有效
以上是“fabric鏈碼Python開發(fā)包怎么用”這篇文章的所有內(nèi)容,感謝各位的閱讀!希望分享的內(nèi)容對(duì)大家有幫助,更多相關(guān)知識(shí),歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道!