You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 06:44:57