【Hyperledger Fabric 开发学习3.2】docker手动部署fabric网络

本文档详细介绍了如何使用docker-compose.yaml文件创建并部署HyperledgerFabric网络,包括orderer和多个peer节点,涉及环境变量配置、TLS安全设置以及通道创建和链码操作。
摘要由CSDN通过智能技术生成

3 部署docker节点

编写docker-compose.yaml文件
创建docker文件夹mkdir dacker
在docker文件夹内创建docker-compose.yaml文件vim docker-compose.yaml(注意文件结构)

version: '2'

volumes:
  orderer.example.com:
  peer0.org1.example.com:
  peer1.org1.example.com:
  peer0.org2.example.com:
  peer1.org2.example.com:
  
services:

  orderer.example.com:
    container_name: orderer.example.com
    image: hyperledger/fabric-orderer:2.2
    environment:
      - FABRIC_LOGGING_SPEC=INFO
      - ORDERER_GENERAL_LISTENADDRESS=0.0.0.0
      - ORDERER_GENERAL_LISTENPORT=7050
      - ORDERER_GENERAL_GENESISMETHOD=file
      - ORDERER_GENERAL_GENESISFILE=/var/hyperledger/orderer/orderer.genesis.block
      - ORDERER_GENERAL_LOCALMSPID=OrdererMSP
      - ORDERER_GENERAL_LOCALMSPDIR=/var/hyperledger/orderer/msp
      #- ORDERER_OPERATIONS_LISTENADDRESS=orderer.example.com:9443
      # enabled TLS
      - ORDERER_GENERAL_TLS_ENABLED=true
      - ORDERER_GENERAL_TLS_PRIVATEKEY=/var/hyperledger/orderer/tls/server.key
      - ORDERER_GENERAL_TLS_CERTIFICATE=/var/hyperledger/orderer/tls/server.crt
      - ORDERER_GENERAL_TLS_ROOTCAS=[/var/hyperledger/orderer/tls/ca.crt]
      - ORDERER_KAFKA_TOPIC_REPLICATIONFACTOR=1
      - ORDERER_KAFKA_VERBOSE=true
      - ORDERER_GENERAL_CLUSTER_CLIENTCERTIFICATE=/var/hyperledger/orderer/tls/server.crt
      - ORDERER_GENERAL_CLUSTER_CLIENTPRIVATEKEY=/var/hyperledger/orderer/tls/server.key
      - ORDERER_GENERAL_CLUSTER_ROOTCAS=[/var/hyperledger/orderer/tls/ca.crt]
    working_dir: /opt/gopath/src/github.com/hyperledger/fabric
    command: orderer
    volumes:
        - ../channel-artifacts/orderer.genesis.block:/var/hyperledger/orderer/orderer.genesis.block
        - ../crypto-config/ordererOrganizations/example.com/orderers/orderer.example.com/msp:/var/hyperledger/orderer/msp
        - ../crypto-config/ordererOrganizations/example.com/orderers/orderer.example.com/tls:/var/hyperledger/orderer/tls
        - orderer.example.com:/var/hyperledger/production/orderer
    ports:
      - 7050:7050
      #- 9443:9443
    #networks:
     # - testwork
   

  peer0.org1.example.com:
    image: hyperledger/fabric-peer:2.2.10
    container_name: peer0.org1.example.com
    environment:
      #- CORE_PEER_ADDRESSAUTODETECT=false
      - CORE_VM_ENDPOINT=unix///host/var/docker.sock  
      - CORE_PEER_ID=peer0.org1.example.com
      - CORE_PEER_ADDRESS=peer0.org1.example.com:7051
      - CORE_PEER_LISTENADDRESS=0.0.0.0:7051
      - CORE_PEER_CHAINCODELISTENADDRESS=0.0.0.0:7052
      - CORE_PEER_CHAINCODEADDRESS=peer0.org1.example.com:7052
      - CORE_PEER_GOSSIP_EXTERNALENDPOINT=peer0.org1.example.com:7061
      - CORE_PEER_GOSSIP_BOOTSTRAP=peer0.org1.example.com:7051
      - CORE_PEER_LOCALMSPID=Org1MSP
      - FABRIC_LOGGING_SPEC=INFO
      #- FABRIC_LOGGING_SPEC=INFO # info:core.chaincode=debug
      - CORE_PEER_TLS_ENABLED=true
      - CORE_PEER_GOSSIP_USELEADERELECTION=true
      - CORE_PEER_GOSSIP_ORGLEADER=false  # whether this node is the org leader, default to false
      - CORE_PEER_PROFILE_ENABLED=true
      - CORE_PEER_TLS_CERT_FILE=/var/hyperledger/fabric/tls/server.crt
      - CORE_PEER_TLS_KEY_FILE=/var/hyperledger/fabric/tls/server.key
      - CORE_PEER_TLS_ROOTCERT_FILE=/var/hyperledger/fabric/tls/ca.crt
      - core_CHAINCODE_EXECUTETIMEOUT=300ms
    working_dir: /opt/gopath/src/github.com/hyperledger/fabric/peer
    command: peer node start
    volumes:
        - /var/run/:/host/var/run/
        - ../crypto-config/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/msp:/var/hyperledger/fabric/msp
        - ../crypto-config/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls:/var/hyperledger/fabric/tls
        - peer0.org1.example.com:/var/hyperledger/production
    ports:
        - 7051:7051
        - 7052:7052
        - 7053:7053
  

  peer1.org1.example.com:
    image: hyperledger/fabric-peer:2.2.10
    container_name: peer1.org1.example.com
    environment:
      #- CORE_PEER_ADDRESSAUTODETECT=false
      - CORE_VM_ENDPOINT=unix///host/var/docker.sock  
      - CORE_PEER_ID=peer1.org1.example.com
      - CORE_PEER_ADDRESS=peer1.org1.example.com:7061
      - CORE_PEER_LISTENADDRESS=0.0.0.0:7061
      - CORE_PEER_CHAINCODELISTENADDRESS=0.0.0.0:7062
      - CORE_PEER_CHAINCODEADDRESS=peer1.org1.example.com:7062
      - CORE_PEER_GOSSIP_EXTERNALENDPOINT=peer1.org1.example.com:70561
      - CORE_PEER_GOSSIP_BOOTSTRAP=peer1.org1.example.com:7051
      - CORE_PEER_LOCALMSPID=Org1MSP
      - FABRIC_LOGGING_SPEC=INFO
      #- FABRIC_LOGGING_SPEC=INFO # info:core.chaincode=debug
      - CORE_PEER_TLS_ENABLED=true
      - CORE_PEER_GOSSIP_USELEADERELECTION=true
      - CORE_PEER_GOSSIP_ORGLEADER=false  # whether this node is the org leader, default to false
      - CORE_PEER_PROFILE_ENABLED=true
      - CORE_PEER_TLS_CERT_FILE=/etc/hyperledger/fabric/tls/server.crt
      - CORE_PEER_TLS_KEY_FILE=/etc/hyperledger/fabric/tls/server.key
      - CORE_PEER_TLS_ROOTCERT_FILE=/etc/hyperledger/fabric/tls/ca.crt
      - core_CHAINCODE_EXECUTETIMEOUT=300ms
    working_dir: /opt/gopath/src/github.com/hyperledger/fabric/peer
    command: peer node start
    volumes:
        - /var/run/:/host/var/run/
        - ../crypto-config/peerOrganizations/org1.example.com/peers/peer1.org1.example.com/msp:/etc/hyperledger/fabric/msp
        - ../crypto-config/peerOrganizations/org1.example.com/peers/peer1.org1.example.com/tls:/etc/hyperledger/fabric/tls
        - peer1.org1.example.com:/var/hyperledger/production
    ports:
        - 7061:7061
        - 7062:7062
        - 7063:7063
   


  peer0.org2.example.com:
    image: hyperledger/fabric-peer:2.2.10
    container_name: peer0.org2.example.com
    environment:
      #- CORE_PEER_ADDRESSAUTODETECT=false
      - CORE_VM_ENDPOINT=unix///host/var/docker.sock  
      - CORE_PEER_ID=peer0.org2.example.com
      - CORE_PEER_ADDRESS=peer0.org2.example.com:8051
      - CORE_PEER_LISTENADDRESS=0.0.0.0:8051
      - CORE_PEER_CHAINCODELISTENADDRESS=0.0.0.0:8052
      - CORE_PEER_CHAINCODEADDRESS=peer0.org2.example.com:8052
      - CORE_PEER_GOSSIP_EXTERNALENDPOINT=peer0.org2.example.com:8061
      - CORE_PEER_GOSSIP_BOOTSTRAP=peer0.org2.example.com:8051
      - CORE_PEER_LOCALMSPID=Org2MSP
      - FABRIC_LOGGING_SPEC=INFO
      #- FABRIC_LOGGING_SPEC=INFO # info:core.chaincode=debug
      - CORE_PEER_TLS_ENABLED=true
      - CORE_PEER_GOSSIP_USELEADERELECTION=true
      - CORE_PEER_GOSSIP_ORGLEADER=false  # whether this node is the org leader, default to false
      - CORE_PEER_PROFILE_ENABLED=true
      - CORE_PEER_TLS_CERT_FILE=/etc/hyperledger/fabric/tls/server.crt
      - CORE_PEER_TLS_KEY_FILE=/etc/hyperledger/fabric/tls/server.key
      - CORE_PEER_TLS_ROOTCERT_FILE=/etc/hyperledger/fabric/tls/ca.crt
      - core_CHAINCODE_EXECUTETIMEOUT=300ms
    working_dir: /opt/gopath/src/github.com/hyperledger/fabric/peer
    command: peer node start
    volumes:
        - /var/run/:/host/var/run/
        - ../crypto-config/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/msp:/etc/hyperledger/fabric/msp
        - ../crypto-config/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/tls:/etc/hyperledger/fabric/tls
        - peer0.org2.example.com:/var/hyperledger/production
    ports:
        - 8051:8051
        - 8052:8052
        - 8053:8053
    

  peer1.org2.example.com:
    image: hyperledger/fabric-peer:2.2.10
    container_name: peer1.org2.example.com
    environment:
      #- CORE_PEER_ADDRESSAUTODETECT=false
      - CORE_VM_ENDPOINT=unix///host/var/docker.sock  
      - CORE_PEER_ID=peer1.org2.example.com
      - CORE_PEER_ADDRESS=peer1.org2.example.com:8061
      - CORE_PEER_LISTENADDRESS=0.0.0.0:8061
      - CORE_PEER_CHAINCODELISTENADDRESS=0.0.0.0:8062
      - CORE_PEER_CHAINCODEADDRESS=peer1.org2.example.com:8062
      - CORE_PEER_GOSSIP_EXTERNALENDPOINT=peer1.org2.example.com:8051
      - CORE_PEER_GOSSIP_BOOTSTRAP=peer1.org2.example.com:8051
      - CORE_PEER_LOCALMSPID=Org2MSP
      - FABRIC_LOGGING_SPEC=INFO
      #- FABRIC_LOGGING_SPEC=INFO # info:core.chaincode=debug
      - CORE_PEER_TLS_ENABLED=true
      - CORE_PEER_GOSSIP_USELEADERELECTION=true
      - CORE_PEER_GOSSIP_ORGLEADER=false  # whether this node is the org leader, default to false
      - CORE_PEER_PROFILE_ENABLED=true
      - CORE_PEER_TLS_CERT_FILE=/etc/hyperledger/fabric/tls/server.crt
      - CORE_PEER_TLS_KEY_FILE=/etc/hyperledger/fabric/tls/server.key
      - CORE_PEER_TLS_ROOTCERT_FILE=/etc/hyperledger/fabric/tls/ca.crt
      - core_CHAINCODE_EXECUTETIMEOUT=300ms
    working_dir: /opt/gopath/src/github.com/hyperledger/fabric/peer
    command: peer node start
    volumes:
        - /var/run/:/host/var/run/
        - ../crypto-config/peerOrganizations/org2.example.com/peers/peer1.org2.example.com/msp:/etc/hyperledger/fabric/msp
        - ../crypto-config/peerOrganizations/org2.example.com/peers/peer1.org2.example.com/tls:/etc/hyperledger/fabric/tls
        - peer1.org2.example.com:/var/hyperledger/production
    ports:
        - 8061:8061
        - 8062:8062
        - 8063:8063
    

  cli1:
    image: hyperledger/fabric-tools:2.2.10
    stdin_open: true
    container_name: cli
    tty: true
    depends_on:
      - peer0.org1.example.com
      - peer1.org1.example.com
      - peer0.org2.example.com
      - peer1.org2.example.com
    environment:
      - GOPATH=/opt/gopath
      - CORE_VM_ENDPOINT=unix///host/var/docker.sock
      - FABRIC_LOGGING_SPEC=INFO
      - CORE_PEER_ID=cli
      - CORE_PEER_ADDRESS=peer0.org1.example.com:7051 # default to operate on peer0.org1
      - CORE_PEER_LOCALMSPID=Org1MSP
      - CORE_PEER_TLS_ENABLED=true  # to enable TLS, change to true
      - CORE_PEER_TLS_CERT_FILE=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/server.crt
      - CORE_PEER_TLS_KEY_FILE=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/server.key
      - CORE_PEER_TLS_ROOTCERT_FILE=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/ca.crt
      - CORE_PEER_MSPCONFIGPATH=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org1.example.com/users/Admin@org1.example.com/msp
    volumes:
      - /var/run/:/host/var/run/
      - ../chaincode/go/:/opt/gopath/src/github.com/hyperledger/multiple-deployment/chaincode/go 
      - ../crypto-config:/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/
      - ../channel-artifacts:/opt/gopath/src/github.com/hyperledger/fabric/peer/channel-artifacts    
    working_dir: /opt/gopath/src/github.com/hyperledger/fabric/peer
    command: /bin/bash
   

  cli2:
    image: hyperledger/fabric-tools:2.2.10
    stdin_open: true
    container_name: cli2
    tty: true
    depends_on:
      - peer0.org1.example.com
      - peer1.org1.example.com
      - peer0.org2.example.com
      - peer1.org2.example.com
    environment:
      - GOPATH=/opt/gopath
      - CORE_VM_ENDPOINT=unix///host/var/docker.sock
      - FABRIC_LOGGING_SPEC=INFO
      - CORE_PEER_ID=cli
      - CORE_PEER_ADDRESS=peer1.org1.example.com:7061 # default to operate on peer0.org1
      - CORE_PEER_LOCALMSPID=Org1MSP
      - CORE_PEER_TLS_ENABLED=true  # to enable TLS, change to true
      - CORE_PEER_TLS_CERT_FILE=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org1.example.com/peers/peer1.org1.example.com/tls/server.crt
      - CORE_PEER_TLS_KEY_FILE=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org1.example.com/peers/peer1.org1.example.com/tls/server.key
      - CORE_PEER_TLS_ROOTCERT_FILE=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org1.example.com/peers/peer1.org1.example.com/tls/ca.crt
      - CORE_PEER_MSPCONFIGPATH=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org1.example.com/users/Admin@org1.example.com/msp
    volumes:
      - /var/run/:/host/var/run/
      - ../chaincode/go/:/opt/gopath/src/github.com/hyperledger/multiple-deployment/chaincode/go 
      - ../crypto-config:/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/
      - ../channel-artifacts:/opt/gopath/src/github.com/hyperledger/fabric/peer/channel-artifacts    
    working_dir: /opt/gopath/src/github.com/hyperledger/fabric/peer
    command: /bin/bash
   

  cli3:
    image: hyperledger/fabric-tools:2.2.10
    stdin_open: true
    container_name: cli3
    tty: true
    depends_on:
      - peer0.org1.example.com
      - peer1.org1.example.com
      - peer0.org2.example.com
      - peer1.org2.example.com
    environment:
      - GOPATH=/opt/gopath
      - CORE_VM_ENDPOINT=unix///host/var/docker.sock
      - FABRIC_LOGGING_SPEC=INFO
      - CORE_PEER_ID=cli
      - CORE_PEER_ADDRESS=peer0.org2.example.com:8051 # default to operate on peer0.org1
      - CORE_PEER_LOCALMSPID=Org2MSP
      - CORE_PEER_TLS_ENABLED=true  # to enable TLS, change to true
      - CORE_PEER_TLS_CERT_FILE=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/tls/server.crt
      - CORE_PEER_TLS_KEY_FILE=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/tls/server.key
      - CORE_PEER_TLS_ROOTCERT_FILE=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/tls/ca.crt
      - CORE_PEER_MSPCONFIGPATH=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org2.example.com/users/Admin@org2.example.com/msp
    volumes:
      - /var/run/:/host/var/run/
      - ../chaincode/go/:/opt/gopath/src/github.com/hyperledger/multiple-deployment/chaincode/go 
      - ../crypto-config:/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/
      - ../channel-artifacts:/opt/gopath/src/github.com/hyperledger/fabric/peer/channel-artifacts    
    working_dir: /opt/gopath/src/github.com/hyperledger/fabric/peer
    command: /bin/bash
   

  cli14:
    image: hyperledger/fabric-tools:2.2.10
    stdin_open: true
    container_name: cli4
    tty: true
    depends_on:
      - peer0.org1.example.com
      - peer1.org1.example.com
      - peer0.org2.example.com
      - peer1.org2.example.com
    environment:
      - GOPATH=/opt/gopath
      - CORE_VM_ENDPOINT=unix///host/var/docker.sock
      - FABRIC_LOGGING_SPEC=INFO
      - CORE_PEER_ID=cli4
      - CORE_PEER_ADDRESS=peer1.org2.example.com:8061 # default to operate on peer0.org1
      - CORE_PEER_LOCALMSPID=Org2MSP
      - CORE_PEER_TLS_ENABLED=true  # to enable TLS, change to true
      - CORE_PEER_TLS_CERT_FILE=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org2.example.com/peers/peer1.org2.example.com/tls/server.crt
      - CORE_PEER_TLS_KEY_FILE=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org2.example.com/peers/peer1.org2.example.com/tls/server.key
      - CORE_PEER_TLS_ROOTCERT_FILE=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org2.example.com/peers/peer1.org2.example.com/tls/ca.crt
      - CORE_PEER_MSPCONFIGPATH=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org2.example.com/users/Admin@org2.example.com/msp
    volumes:
      - /var/run/:/host/var/run/
      - ../chaincode/go/:/opt/gopath/src/github.com/hyperledger/multiple-deployment/chaincode/go 
      - ../crypto-config:/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/
      - ../channel-artifacts:/opt/gopath/src/github.com/hyperledger/fabric/peer/channel-artifacts    
    working_dir: /opt/gopath/src/github.com/hyperledger/fabric/peer
    command: /bin/bash
  

4 启动docker节点。不同的组织按照预置角色分别启动Peer节点

docker-compose up -d

5 创建通道。

查看peer 命令的用法

peer --help

配置本地host文件进行域名解析,否则节点间无法进行通信

gedit /etc/hosts

127.0.0.1 peer0.org1.example.com
127.0.0.1 peer1.org1.example.com
127.0.0.1 peer0.org2.example.com
127.0.0.1 peer1.org2.example.com

进入 cli1 容器

docker exec -it cli1 /bash/bin

测试网络通断

ping orderer.example.com

生成通道文件

peer channel create 
-o orderer.example.com:7050 
-c mychannel 
-f "/tmp/channel-artifacts/$APP_CHANNEL.tx"
--timeout "${TIMEOUT}s" 
--tls 
--cafile /etc/hyperledger/fabric/crypto-config/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem

创建成功后会在当前路径下生成 XXX.block 文件。

注:通过查看日志来处理bug

查看容器信息:docker ps -a
查看日志:docker logs -f 容器ID

6 将节点加入通道。

Peer节点利用初始区块加入所创建的应用通道

peer channel join -b mychannel.block

更新锚节点

peer channel update 
-o orderer.example.com:7050 
-c mychannel 
-f ./channel-artifacts/Org1MSPanchors.tx
--tls 
--cafile /opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem

将剩余节点加入通道

将生成的通道文件复制到所有peer对应的客户端

docker cp  cli1:/opt/gopath/src/github.com/hyperledger/fabric/peer/mychannel.block  ./
docker cp mychannel.block cli2:/opt/gopath/src/github.com/hyperledger/fabric/peer/
docker cp mychannel.block cli3:/opt/gopath/src/github.com/hyperledger/fabric/peer/
docker cp mychannel.block cli4:/opt/gopath/src/github.com/hyperledger/fabric/peer/

进入 cli2 容器:org1-peer1 加入通道:

docker exec -it cli2 /bash/bin
peer channel join -b  mychannel.block
exit

进入 cli3 容器

docker exec -it cli2 /bash/bin
peer channel join -b  mychannel.block
#更新锚节点
peer channel update 
-o orderer.example.com:7050 
-c mychannel 
-f ./channel-artifacts/Org2MSPanchors.tx
--tls 
--cafile /opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem
exit

进入 cli4 容器

docker exec -it cli4 bash
peer channel join -b  mychannel.block
exit

查看通道上的区块信息
回到容器1

docker exec -it cli1 bash

查看通道信息

peer channel getinfo -c mychannel

查看加入的通道

peer channel list

7 链码的部署与调用

安装链码

将合约代码复制到宿主机和 docker cli 容器挂载的 chaincodes 目录 ~testwork/chaincode/go/下:

git clone https://XXXXX.git

cp -r XXXXX xxxxx

进入 cli 容器:

docker exec -it cli1 bash

查看该路径在容器映射的文件夹下有无该链码文件

设置代理拉取依赖包

在chaincode/go目录下,将新增的依赖包自动写入当前项目中的vender目录中

cd /etc/hyperledger/fabric/chaincodes/go
go env -w GOPROXY=https://goproxy.cn,direct
go mod vendor

打包链码

peer lifecycle chaincode package smallbank.tar.gz 
--path /opt/gopath/pkg/ src/github.com/hyperledger/..../chaincode/go/smallbank 
--label smallbank

在 peer 节点安装链码

org1-peer0 节点:

docker exec -it cli2 bash
peer lifecycle chaincode install xxx.tar.gz

查看安装情况

peer lifecycle chaincode queryinstalled

在 其他peer 节点安装链码

docker cp cli1:/opt/gopath/src/github.com/hyperledger/fabric/peer/sacc.tar.gz ./

docker cp sacc.tar.gz cli2:/opt/gopath/src/github.com/hyperledger/fabric/peer/

docker cp sacc.tar.gz cli3:/opt/gopath/src/github.com/hyperledger/fabric/peer/

docker cp sacc.tar.gz cli4:/opt/gopath/src/github.com/hyperledger/fabric/peer/

cli2

docker exec -it cli2 bash
peer lifecycle chaincode install xxx.tar.gz
peer lifecycle chaincode queryinstalled #查看安装情况
exit

cli3

docker exec -it cli2 bash
peer lifecycle chaincode install xxx.tar.gz
peer lifecycle chaincode queryinstalled #查看安装情况
exit

cli4

docker exec -it cli4 bash
peer lifecycle chaincode install xxx.tar.gz
peer lifecycle chaincode queryinstalled #查看安装情况
exit

批准链码定义

通道中的成员需要对链码的参数投票,决定是否通过该链码,一个通道中每个想要使用该链码的成员都需要为他的组织批准这个链码定义,那么第一步,他将批准提交给排序节点,第二步,分发给所有peer节点,这项批准是由组织管理员提交的,提交一个批准交易即可。
org1 批准链码定义:。

docker exec -it cli1 bash
peer lifecycle chaincode approveformyorg 
-o orderer0.example.com:7050 
--ordererTLSHostnameOverride orderer0.example.com 
--channelID businesschannel 
--name hyperledger-fabric-contract-java-demo 
--version 1.0 
--package-id $CC_PACKAGE_ID 
--sequence 1 
--tls true
--cafile /etc/hyperledger/fabric/crypto-config/ordererOrganizations/example.com/orderers/orderer0.example.com/msp/tlscacerts/tlsca.example.com-cert.pem

查看链码批准状态:

peer lifecycle chaincode checkcommitreadiness 
--channelID mychannel 
--name 
--version
--init-required
--sequence 1
-- tls
--cafile
--output json
exit

org2 批准链码定义:

docker exec -it cli3 bash
peer lifecycle chaincode approveformyorg -o orderer0.example.com:7050 --ordererTLSHostnameOverride orderer0.example.com --channelID businesschannel --name hyperledger-fabric-contract-java-demo --version 1.0 --package-id $CC_PACKAGE_ID --sequence 1 --tls --cafile /etc/hyperledger/fabric/crypto-config/ordererOrganizations/example.com/orderers/orderer0.example.com/msp/tlscacerts/tlsca.example.com-cert.pem

检查通道成员是否已批准相同的链码定义:

peer lifecycle chaincode checkcommitreadiness --channelID businesschannel --name hyperledger-fabric-contract-java-demo --version 1.0 --sequence 1 --tls --cafile /etc/hyperledger/fabric/crypto-config/ordererOrganizations/example.com/orderers/orderer0.example.com/msp/tlscacerts/tlsca.example.com-cert.pem --output json

输出结果如下:

{
	"approvals": {
		"Org1MSP": true,
		"Org2MSP": true
	}
}

将链码提交到通道:

peer lifecycle chaincode commit -
o orderer0.example.com:7050 
--ordererTLSHostnameOverride orderer0.example.com 
--channelID businesschannel 
--name hyperledger-fabric-contract-java-demo 
--version 1.0 
--sequence 1 
--tls 
--cafile /etc/hyperledger/fabric/crypto-config/ordererOrganizations/example.com/orderers/orderer0.example.com/msp/tlscacerts/tlsca.example.com-cert.pem 
--peerAddresses peer0.org1.example.com:7051 
--tlsRootCertFiles /etc/hyperledger/fabric/crypto-config/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/ca.crt --peerAddresses peer0.org2.example.com:7051 --tlsRootCertFiles /etc/hyperledger/fabric/crypto-config/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/tls/ca.crt

用 peer lifecycle chaincode querycommitted 命令来确认链码定义已提交给通道:

peer lifecycle chaincode querycommitted --channelID businesschannel --name hyperledger-fabric-contract-java-demo --cafile /etc/hyperledger/fabric/crypto-config/ordererOrganizations/example.com/orderers/orderer0.example.com/msp/tlscacerts/tlsca.example.com-cert.pem

调用链码

链码实例化
其实链码实例化,就是一笔特殊的交易,链码在某个节点实例化后,实例化的信息就被广播到通道内的所有节点。如果其它节点再次实例化,自然就会冲突。

# 调用 createCat 函数对链码初始化
#根据链码中的初始函数进行传入相应的参数进行初始化,进行实例化
peer chaincode invoke 
-o orderer0.example.com:7050 
--ordererTLSHostnameOverride orderer0.example.com 
--tls 
--cafile /etc/hyperledger/fabric/crypto-config/ordererOrganizations/example.com/orderers/orderer0.example.com/msp/tlscacerts/tlsca.example.com-cert.pem 
-C businesschannel 
-n hyperledger-fabric-contract-java-demo 
--peerAddresses peer0.org1.example.com:7051 
--tlsRootCertFiles /etc/hyperledger/fabric/crypto-config/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/ca.crt 
--peerAddresses peer0.org2.example.com:7051 
--tlsRootCertFiles /etc/hyperledger/fabric/crypto-config/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/tls/ca.crt 
-c '{"function":"createCat","Args":["cat-0" , "tom" ,  "3" , "蓝色" , "大懒猫"]}'

# 调用 queryCat 函数
peer chaincode query -C businesschannel -n hyperledger-fabric-contract-java-demo -c '{"Args":["queryCat" , "cat-0"]}'
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值