十年网站开发经验 + 多家企业客户 + 靠谱的建站团队
量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决
这篇文章主要介绍fabric链码Python开发包怎么用,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!
创新互联长期为近千家客户提供的网站建设服务,团队从业经验10年,关注不同地域、不同群体,并针对不同对象提供差异化的产品和服务;打造开放共赢平台,与合作伙伴共同营造健康的互联网生态环境。为东湖企业提供专业的网站建设、做网站,东湖网站改版等技术服务。拥有十载丰富建站经验和众多成功案例,为您定制开发。
Fabric-chaincode-python开发包适用于Hyperledger Fabric区块链Python链码的开发,支持Fabric 1.4和2.0,官方下载地址:http://sc.hubwiz.com/codebag/fabric-chaincode-python/。
Fabric-chaincode-ptyon开发包主要包含以下特性:
完整覆盖Fabric官方开发包(go/java/node)提供的API接口
基于asyncio异步模型实现,并发性能更出色
内置wiz工具箱,可快速搭建Hyperledger Fabric开发环境
Fabric-chaincode-python开发包运行在**Python 3.7+**环境下,当前版本1.0.0,主要类/接口及关系如下图所示:
Fabric-chaincode-python开发包的主要代码文件清单参见官网说明:http://sc.hubwiz.com/codebag/fabric-chaincode-python/
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
结果如下:
STEP 2:在1#终端使用wiz net reset
初始化Fabric网络的密码学资料和通道初始化交易资料:
~/fabric-chaincode-python/devnet$ wiz net reset
结果如下:
STEP 3:在1#终端使用wiz net start
启动Fabric网络的peer节点和orderer节点:
~/fabric-chaincode-python/devnet$ wiz net start
结果如下:
STEP 4:在2#终端使用wiz cc start
启动wiz工具箱预置的Python链码:
~/fabric-chaincode-python/devnet$ wiz cc start
结果如下:
STEP 5:在3#终端使用wiz ch start
命令创建通道ch2
并将peer节点加入通道:
~/fabric-chaincode-python/devnet$ wiz ch start
结果如下:
测试链码:在3#终端使用wiz admin
命令进入管理控制台:
~/fabric-chaincode-python/devnet$ wiz admin
结果如下:
使用peer chaincode query
命令测试预置链码的查询:
admin@org1> peer chaincode query -n wizcc -c '{"args":[]}' -C ch2
结果如下:
使用peer chaincode invoke
命令测试预置链码的交易:
admin@org1> peer chaincode invoke -n wizcc -c '{"args":[]}' -C ch2
结果如下:
在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
下面的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() ) #启动链码
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开发包怎么用”这篇文章的所有内容,感谢各位的阅读!希望分享的内容对大家有帮助,更多相关知识,欢迎关注创新互联行业资讯频道!