如何通过Python-SDK与Devmode模式下的Hyperledger Fabric网络交互?
嘿,我之前在devmode环境下用Python SDK交互Fabric网络时,也碰到过一模一样的问题!devmode的示例确实没提供现成的network.json,得手动根据它的网络配置来创建才行。下面一步步给你捋清楚:
1. 先明确devmode的默认网络结构
先回忆下devmode的固定配置,这是我们写network.json的基础:
- 节点地址:orderer是
orderer.example.com(端口7050),peer是peer0.org1.example.com(端口7051) - MSP信息:默认用
Org1MSP,证书和密钥都在fabric-samples的crypto-config/peerOrganizations/org1.example.com目录下 - TLS状态:devmode默认关闭TLS,所以连接用
grpc://而不是grpcs://
2. 手动编写适配devmode的network.json
这个配置文件的作用是告诉Python SDK网络里有哪些节点、MSP的身份信息、证书路径这些。我给你一个直接能用的模板,你只需要替换里面的路径占位符就行:
{ "name": "devmode-fabric-network", "version": "1.0", "client": { "organization": "Org1", "connection": { "timeout": { "peer": { "endorser": "300" } } } }, "organizations": { "Org1": { "mspid": "Org1MSP", "peers": ["peer0.org1.example.com"], "certificateAuthorities": [], "adminPrivateKey": { "path": "/你的fabric-samples路径/crypto-config/peerOrganizations/org1.example.com/users/Admin@org1.example.com/msp/keystore/你的admin密钥文件名" }, "signedCert": { "path": "/你的fabric-samples路径/crypto-config/peerOrganizations/org1.example.com/users/Admin@org1.example.com/msp/signcerts/Admin@org1.example.com-cert.pem" } } }, "peers": { "peer0.org1.example.com": { "url": "grpc://localhost:7051", "grpcOptions": { "grpc.max_receive_message_length": 1024 * 1024 * 100 }, "tlsCACerts": { "path": "/你的fabric-samples路径/crypto-config/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/ca.crt" } } }, "orderers": { "orderer.example.com": { "url": "grpc://localhost:7050", "grpcOptions": {}, "tlsCACerts": { "path": "/你的fabric-samples路径/crypto-config/ordererOrganizations/example.com/orderers/orderer.example.com/tls/ca.crt" } } }, "certificateAuthorities": {} }
注意事项:
- 替换
/你的fabric-samples路径为你本地fabric-samples的绝对路径(比如/home/user/fabric-samples) - 替换
你的admin密钥文件名:进入对应的keystore目录,里面的那个priv_sk或者带一串随机字符的文件就是,直接写文件名就行
3. 用Python SDK与网络交互的示例代码
有了network.json,就可以初始化客户端,完成创建/加入通道、调用链码的操作了。给你一段适配devmode的示例代码:
from hfc.fabric import Client # 初始化客户端,加载我们写好的network.json cli = Client(net_profile="/你的network.json路径/network.json") # 获取Org1的Admin用户身份 org1_admin = cli.get_user(org_name='Org1', name='Admin') # 1. 创建通道(如果devmode环境还没创建过通道的话执行这步) # 通道配置文件用fabric-samples里的channel-artifacts/mychannel.tx cli.create_channel( channel_name='mychannel', channel_tx='/你的fabric-samples路径/channel-artifacts/mychannel.tx', orderer='orderer.example.com', user=org1_admin ) # 2. 让Peer加入通道 cli.join_channel( channel_name='mychannel', peer='peer0.org1.example.com', user=org1_admin ) # 3. 调用链码(devmode下链码已经直接启动,无需安装/实例化) # 获取通道实例 channel = cli.get_channel('mychannel') # 链码查询示例(假设链码名为mycc,查询key为a的值) query_response = channel.query( chaincode_name='mycc', fcn='query', args=['a'], peer='peer0.org1.example.com', user=org1_admin ) print("查询结果:", query_response) # 链码交易示例(把a的10个单位转到b) invoke_response = channel.invoke( chaincode_name='mycc', fcn='invoke', args=['a', 'b', '10'], peers=['peer0.org1.example.com'], user=org1_admin ) print("交易提交结果:", invoke_response)
4. 关键注意点
- devmode下链码是直接本地启动的,不需要调用Python SDK的
install或instantiate方法,直接用query/invoke就行 - 确保你的fabric-sdk-py版本和Fabric 1.1匹配,别装最新版本(可以用
pip install fabric-sdk-py==0.8.0,这个版本适配1.1) - 如果遇到连接超时,检查端口是否正确:devmode的peer是7051,orderer是7050,都是
grpc://(因为没开TLS) - 证书路径一定要核对准确,路径错了会报权限错误或者找不到文件的异常
内容的提问来源于stack exchange,提问作者NNicer
相关产品推荐
相关产品推荐

