示例代码如下:

1. 配置网络拓扑

在Fabric2.0中,网络拓扑配置文件使用YAML格式进行定义。示例配置文件如下:

---
name: SampleNetwork
version: '1.0.0'
channels:
  - name: mychannel
    consortium: SampleConsortium
    peers:
      - anchorPeers:
          - host: peer1.org1.example.com
            port: 7051
        chaincodeQuery: true
        eventSource: true
      - anchorPeers:
          - host: peer1.org2.example.com
            port: 9051
        chaincodeQuery: true
        eventSource: true
organizations:
  - name: Org1
    peers:
      - peer1.org1.example.com
    adminPrivateKey:
      path: /path/to/private.key
    signedCert:
      path: /path/to/certificate.pem
  - name: Org2
    peers:
      - peer1.org2.example.com
    adminPrivateKey:
      path: /path/to/private.key
    signedCert:
      path: /path/to/certificate.pem
orderers:
  - orderer.example.com
adminIdentities:
  - role: client
    name: admin
    affiliation: ''
    enrollmentSecret: ''

2. 安装链码

安装链码可以通过命令行或SDK进行。示例代码如下:

# 在Peer1.Org1上安装链码
peer lifecycle chaincode install mychaincode.tar.gz

# 在Peer1.Org2上安装链码
peer lifecycle chaincode install mychaincode.tar.gz

# 在Peer1.Org1上将链码安装包安装到指定的链码版本中
peer lifecycle chaincode approveformyorg --channelID mychannel --name mychaincode --version 1.0 --init-required --package-id mypackageid --sequence 1 --waitForEvent

# 在Peer1.Org2上将链码安装包安装到指定的链码版本中
peer lifecycle chaincode approveformyorg --channelID mychannel --name mychaincode --version 1.0 --init-required --package-id mypackageid --sequence 1 --waitForEvent

# 在所有组织上提交链码定义
peer lifecycle chaincode commit -o orderer.example.com:7050 --channelID mychannel --name mychaincode --version 1.0 --init-required --sequence 1 --waitForEvent

3. 实例化链码

实例化链码可以通过命令行或SDK进行。示例代码如下:

# 创建链码实例并初始化
peer chaincode instantiate -o orderer.example.com:7050 --channelID mychannel --name mychaincode --version 1.0 --sequence 1 --init-required --ctor '{"Args":["init","a","100","b","200"]}' --waitForEvent

# 查询链码状态
peer chaincode query -C mychannel -n mychaincode -c '{"Args":["query","a"]}'

# 调用链码方法
peer chaincode invoke -C mychannel -n mychaincode -c '{"Args":["invoke","a","b","10"]}'

4. 关闭网络

关闭网络可以使用命令行或SDK进行。示例代码如下:

# 停止所有容器
docker stop $(docker ps -aq)

# 删除所有容器
docker rm $(docker ps -aq)

# 删除所有链码镜像
docker rmi $(docker images dev-* -q)

# 删除Fabric配置文件目录
rm -rf /tmp/fabric-client-kv-*