目 录CONTENT

文章目录

Fabric CA 部署指南

简中仙
2022-06-23 / 0 评论 / 0 点赞 / 103 阅读 / 0 字 / 正在检测是否收录...
温馨提示:
本文最后更新于2023-10-08,若内容或图片失效,请留言反馈。 本文如有错误或者侵权的地方,欢迎您批评指正!

Fabric CA 操作指南

本指南将说明如何使用 Fabric CA 设置 Fabric 网络。 参与 Hyperledger Fabric 区块链网络的所有身份都必须经过授权。 此授权以加密材料的形式提供,该加密材料已针对受信任的机构进行验证。

在本指南中,您将看到设置包含两个Org的区块链网络的过程,每个Org都有两个Peer和一个Orderer。 您将了解如何为Orderer、Peer、管理员和最终用户生成加密材料,以便私钥永远不会离开生成它们的主机或容器。

拓扑

在此示例中,我们将了解如何在三个Org中设置Orderer、Peer和 CA。 此部署的拓扑如下图所示:

此示例将模拟使用 docker 容器的部署。 容器将被视为在不同的主机上运行。 这样做是为了让您可以看到哪些资产需要在网络所涉及的各方之间进行带外交换。

docker 的网络配置假设所有容器都在同一个网络中运行。 如果您的部署分布在不同的网络中,则需要调整示例以适应您的网络配置。

下面的文档分解了 docker-compose 文件以讨论各个组件。 要查看整个 docker-compose,请单击 此处

设置 CA

下载 fabric-ca-client 二进制文件

对于需要获取加密材料的每个主机,您需要在主机上安装 fabric-ca-client 二进制文件。 客户端将用于连接到 Fabric CA 服务器容器。

要下载 fabric-ca-client 二进制文件,请浏览到此 存储库 并为您的机器选择最新的二进制文件。

注意

此示例使用 1.4.0 版的 fabric-ca-client。

设置 TLS CA

TLS CA 用于颁发 TLS 证书。 需要这些证书来保护各种进程之间的通信。

为了简化此示例,所有Org都将使用相同的 TLS CA 并禁用 TLS 相互身份验证。

注意

在生产环境中,您可能会使用Org的 CA 来获取 TLS 证书。 您必须将您的 CA 证书带外传输给将验证您的 TLS 证书的Org。 因此,与此示例不同,每个Org都将拥有自己的 TLS CA。

如下所示的 docker 服务可用于启动 Fabric TLS CA 容器。

ca-tls:
  container_name: ca-tls
  image: hyperledger/fabric-ca
  command: sh -c 'fabric-ca-server start -d -b tls-ca-admin:tls-ca-adminpw --port 7052'
  environment:
    - FABRIC_CA_SERVER_HOME=/tmp/hyperledger/fabric-ca/crypto
    - FABRIC_CA_SERVER_TLS_ENABLED=true
    - FABRIC_CA_SERVER_CSR_CN=ca-tls
    - FABRIC_CA_SERVER_CSR_HOSTS=0.0.0.0
    - FABRIC_CA_SERVER_DEBUG=true
  volumes:
    - /tmp/hyperledger/tls/ca:/tmp/hyperledger/fabric-ca
  networks:
    - fabric-ca
  ports:
    - 7052:7052

可以使用以下 docker 命令启动此容器。

docker-compose up ca-tls

成功启动容器后,您将在 CA 容器的日志中看到以下行。

[INFO] Listening on https://0.0.0.0:7052

此时 TLS CA 服务器正在侦听安全套接字,并且可以开始颁发 TLS 证书。

注册 TLS CA 的管理员

在开始使用 CA 客户端之前,您必须获取 CA 的 TLS 证书的签名证书。 这是您可以使用 TLS 连接之前的必需步骤。

在我们的示例中,您需要在运行 TLS CA 服务器的机器上获取位于 /tmp/hyperledger/tls-ca/crypto/ca-cert.pem 的文件,并将该文件复制到您将要安装的主机上 正在运行 CA 客户端二进制文件。 该证书也称为 TLS CA 的签名证书,将用于验证 CA 的 TLS 证书。 将证书复制到 CA 客户端的主机后,您可以开始使用 CA 发出命令。

每个将针对 TLS CA 运行命令的主机上都需要有 TLS CA 的签名证书。

TLS CA 服务器以具有服务器完全管理员权限的引导身份启动。 管理员的一项关键能力是注册新身份的能力。 该 CA 的管理员将使用 Fabric CA 客户端向 CA 注册四个新身份,一个用于每个Peer,一个用于Orderer。 这些身份将用于为 peer 和 orderer 获取 TLS 证书。

您将发出以下命令来注册 TLS CA 管理员,然后注册身份。 我们假设 TLS CA 的受信任根证书已复制到将通过 fabric-ca- 与该 CA 通信的所有主机上的“/tmp/hyperledger/tls-ca/crypto/tls-ca-cert.pem” 客户。

export FABRIC_CA_CLIENT_TLS_CERTFILES=/tmp/hyperledger/tls-ca/crypto/tls-ca-cert.pem
export FABRIC_CA_CLIENT_HOME=/tmp/hyperledger/tls-ca/admin
fabric-ca-client enroll -d -u https://tls-ca-admin:tls-ca-adminpw@0.0.0.0:7052
fabric-ca-client register -d --id.name peer1-org1 --id.secret peer1PW --id.type peer -u https://0.0.0.0:7052
fabric-ca-client register -d --id.name peer2-org1 --id.secret peer2PW --id.type peer -u https://0.0.0.0:7052
fabric-ca-client register -d --id.name peer1-org2 --id.secret peer1PW --id.type peer -u https://0.0.0.0:7052
fabric-ca-client register -d --id.name peer2-org2 --id.secret peer2PW --id.type peer -u https://0.0.0.0:7052
fabric-ca-client register -d --id.name orderer1-org0 --id.secret ordererPW --id.type orderer -u https://0.0.0.0:7052

注意

如果环境变量 FABRIC_CA_CLIENT_TLS_CERTFILES 的路径不是绝对路径,它将被解析为相对于客户端的主目录。

使用在 TLS CA 上注册的身份,我们可以继续设置每个Org的网络。 每当我们需要为Org中的节点获取 TLS 证书时,我们都会参考这个 CA。

设置OrdererOrg CA

每个Org都必须有自己的证书颁发机构 (CA) 来颁发注册证书。 CA 将为Org中的每个Peer和客户端颁发证书。

您的 CA 创建属于您的Org的身份并向每个身份颁发公钥和私钥。 这些密钥允许您的所有节点和应用程序签名并验证其操作。 由您的 CA 签名的任何身份都将被网络的其他成员理解,以识别属于您Org的组件。

Org0 的管理员将启动 Fabric CA docker 容器,Org0 将使用该容器为 Org0 中的身份发布加密材料。

如下所示的 docker 服务可用于启动 Fabric CA 容器。

rca-org0:
   container_name: rca-org0
   image: hyperledger/fabric-ca
   command: /bin/bash -c 'fabric-ca-server start -d -b rca-org0-admin:rca-org0-adminpw --port 7053'
   environment:
      - FABRIC_CA_SERVER_HOME=/tmp/hyperledger/fabric-ca/crypto
      - FABRIC_CA_SERVER_TLS_ENABLED=true
      - FABRIC_CA_SERVER_CSR_CN=rca-org0
      - FABRIC_CA_SERVER_CSR_HOSTS=0.0.0.0
      - FABRIC_CA_SERVER_DEBUG=true
   volumes:
      - /tmp/hyperledger/org0/ca:/tmp/hyperledger/fabric-ca
   networks:
      - fabric-ca
   ports:
      - 7053:7053

成功启动容器后,您将在 CA 容器的日志中看到以下行。

[INFO] Listening on https://0.0.0.0:7053

此时,CA 服务器正在侦听安全套接字,并且可以开始发布加密材料。

注册OrdererOrg的 CA 管理员

您将发出以下命令来注册 CA 管理员,然后注册 Org0 的两个身份。

在下面的命令中,我们将假设 CA 的 TLS 证书的受信任根证书已复制到 fabric-ca-client 所在主机上的/tmp/hyperledger/org0/ca/crypto/ca-cert.pem 二进制存在。 如果客户端二进制文件位于不同的主机上,您将需要通过带外进程获取签名证书。

  • 将注册以下身份:

    Orderer (orderer1-org0)Orderer admin (admin-org0)

export FABRIC_CA_CLIENT_TLS_CERTFILES=/tmp/hyperledger/org0/ca/crypto/ca-cert.pem
export FABRIC_CA_CLIENT_HOME=/tmp/hyperledger/org0/ca/admin
fabric-ca-client enroll -d -u https://rca-org0-admin:rca-org0-adminpw@0.0.0.0:7053
fabric-ca-client register -d --id.name orderer1-org0 --id.secret ordererpw --id.type orderer -u https://0.0.0.0:7053
fabric-ca-client register -d --id.name admin-org0 --id.secret org0adminpw --id.type admin --id.attrs "hf.Registrar.Roles=client,hf.Registrar.Attributes=*,hf.Revoker=true,hf.GenCRL=true,admin=true:ecert,abac.init=true:ecert" -u https://0.0.0.0:7053

您在上面执行的注册命令将使用 CA 发布的加密材料填充 /tmp/hyperledger/org0/ca/admin 目录。 您将看到如下文件:

admin
├── fabric-ca-client-config.yaml
└── msp
   ├── IssuerPublicKey
   ├── IssuerRevocationPublicKey
   ├── cacerts
   │   └── 0-0-0-0-7053.pem
   ├── keystore
   │   └── 60b6a16b8b5ba3fc3113c522cce86a724d7eb92d6c3961cfd9afbd27bf11c37f_sk
   ├── signcerts
   │   └── cert.pem
   └── user

fabric-ca-client-config.yaml是CA客户端生成的文件,该文件包含CA客户端的配置。 还有其他三个重要文件需要注意。 第一个是“0-0-0-0-7053.pem”,这是颁发此身份证书的 CA 的公共证书。 其次是60b6a16b8b5ba3fc3113c522cce86a724d7eb92d6c3961cfd9afbd27bf11c37f_sk,这是客户端生成的私钥。 该文件的名称是可变的,每次生成密钥时都会有所不同。 最后一项是cert.pem,这是由CA签署和颁发的管理员证书。

设置 Org1 的 CA

您为 Org0 执行的同一组步骤适用于 Org1 的 CA。

Org1 的管理员将启动 Fabric CA docker 容器,Org1 将使用该容器为 Org1 中的身份发布加密材料。

如下所示的 docker 服务可用于启动 Fabric CA 容器。

rca-org1:
   container_name: rca-org1
   image: hyperledger/fabric-ca
   command: /bin/bash -c 'fabric-ca-server start -d -b rca-org1-admin:rca-org1-adminpw'
   environment:
      - FABRIC_CA_SERVER_HOME=/tmp/hyperledger/fabric-ca/crypto
      - FABRIC_CA_SERVER_TLS_ENABLED=true
      - FABRIC_CA_SERVER_CSR_CN=rca-org1
      - FABRIC_CA_SERVER_CSR_HOSTS=0.0.0.0
      - FABRIC_CA_SERVER_DEBUG=true
   volumes:
      - /tmp/hyperledger/org1/ca:/tmp/hyperledger/fabric-ca
   networks:
      - fabric-ca
   ports:
      - 7054:7054

成功启动容器后,您将在 CA 容器的日志中看到以下行。

[INFO] Listening on https://0.0.0.0:7054

此时,CA 服务器正在侦听安全套接字,并且可以开始发布加密材料。

注册 Org1 的 CA 管理员

您将发出以下命令来注册 CA 管理员,然后注册 Org1 的两个身份。

  • 正在注册以下身份:

    Peer 1 (peer1-org1)Peer 2 (peer2-org1)Admin (admin1-org1)End user (user-org1)

在下面的命令中,我们将假设 CA 的 TLS 证书的受信任根证书已复制到 fabric-ca-client 所在主机上的/tmp/hyperledger/org1/ca/crypto/ca-cert.pem 二进制存在。 如果客户端的二进制文件位于不同的主机上,您将需要通过带外进程获取签名证书。

export FABRIC_CA_CLIENT_TLS_CERTFILES=/tmp/hyperledger/org1/ca/crypto/ca-cert.pem
export FABRIC_CA_CLIENT_HOME=/tmp/hyperledger/org1/ca/admin
fabric-ca-client enroll -d -u https://rca-org1-admin:rca-org1-adminpw@0.0.0.0:7054
fabric-ca-client register -d --id.name peer1-org1 --id.secret peer1PW --id.type peer -u https://0.0.0.0:7054
fabric-ca-client register -d --id.name peer2-org1 --id.secret peer2PW --id.type peer -u https://0.0.0.0:7054
fabric-ca-client register -d --id.name admin-org1 --id.secret org1AdminPW --id.type user -u https://0.0.0.0:7054
fabric-ca-client register -d --id.name user-org1 --id.secret org1UserPW --id.type user -u https://0.0.0.0:7054

设置 Org2 的 CA

您为 Org1 执行的同一组步骤适用于 Org2。 因此,我们将快速完成 Org2 管理员将执行的一系列步骤。

如下所示的 docker 服务可用于为 Org2 启动 Fabric CA。

rca-org2:
  container_name: rca-org2
  image: hyperledger/fabric-ca
  command: /bin/bash -c 'fabric-ca-server start -d -b rca-org2-admin:rca-org2-adminpw --port 7055'
  environment:
    - FABRIC_CA_SERVER_HOME=/tmp/hyperledger/fabric-ca/crypto
    - FABRIC_CA_SERVER_TLS_ENABLED=true
    - FABRIC_CA_SERVER_CSR_CN=rca-org2
    - FABRIC_CA_SERVER_CSR_HOSTS=0.0.0.0
    - FABRIC_CA_SERVER_DEBUG=true
  volumes:
    - /tmp/hyperledger/org2/ca:/tmp/hyperledger/fabric-ca
  networks:
    - fabric-ca
  ports:
    - 7055:7055

成功启动容器后,您将在 CA 容器的日志中看到以下行。

[INFO] Listening on https://0.0.0.0:7055

此时,CA 服务器正在侦听安全套接字,并且可以开始发布加密材料。

注册 Org2 的 CA 管理员

您将发出以下命令以注册 CA 管理员并注册所有Peer相关身份。 在下面的命令中,我们将假设 CA 的 TLS 证书的可信根证书已复制到 /tmp/hyperledger/org2/ca/crypto/ca-cert.pem。

export FABRIC_CA_CLIENT_TLS_CERTFILES=/tmp/hyperledger/org2/ca/crypto/ca-cert.pem
export FABRIC_CA_CLIENT_HOME=/tmp/hyperledger/org2/ca/admin
fabric-ca-client enroll -d -u https://rca-org2-admin:rca-org2-adminpw@0.0.0.0:7055
fabric-ca-client register -d --id.name peer1-org2 --id.secret peer1PW --id.type peer -u https://0.0.0.0:7055
fabric-ca-client register -d --id.name peer2-org2 --id.secret peer2PW --id.type peer -u https://0.0.0.0:7055
fabric-ca-client register -d --id.name admin-org2 --id.secret org2AdminPW --id.type user -u https://0.0.0.0:7055
fabric-ca-client register -d --id.name user-org2 --id.secret org2UserPW --id.type user -u https://0.0.0.0:7055

设置Peer

一旦 CA 启动并运行,我们就可以开始注册Peer了。

设置 Org1 的Peer

Org1 的管理员将使用其 CA 注册Peer,然后启动Peer docker 容器。 在启动Peer之前,您需要向 CA 注册Peer身份以获取Peer将使用的 MSP。 这称为本地Peer MSP。

注册 Peer1

如果运行 Peer1 的主机没有 fabric-ca-client 二进制文件,请参阅上面的说明下载二进制文件。

在下面的命令中,我们假设 Org1 的可信根证书已复制到 Peer1 主机上的 /tmp/hyperledger/org1/peer1/assets/ca/org1-ca-cert.pem。 获取签名证书是一个带外过程。

export FABRIC_CA_CLIENT_HOME=/tmp/hyperledger/org1/peer1
export FABRIC_CA_CLIENT_TLS_CERTFILES=/tmp/hyperledger/org1/peer1/assets/ca/org1-ca-cert.pem
export FABRIC_CA_CLIENT_MSPDIR=msp
fabric-ca-client enroll -d -u https://peer1-org1:peer1PW@0.0.0.0:7054

下一步是获取Peer的 TLS 加密材料。 这需要再次注册,但这次您将根据 TLS CA 上的“tls”配置文件进行注册。 您还需要在注册请求中提供 Peer1 主机的地址作为 csr.hosts 标志的输入。 在下面的命令中,我们假设 TLS CA 的证书已复制到 Peer1 主机上的“/tmp/hyperledger/org1/peer1/assets/tls-ca/tls-ca-cert.pem”。

export FABRIC_CA_CLIENT_MSPDIR=tls-msp
export FABRIC_CA_CLIENT_TLS_CERTFILES=/tmp/hyperledger/org1/peer1/assets/tls-ca/tls-ca-cert.pem
fabric-ca-client enroll -d -u https://peer1-org1:peer1PW@0.0.0.0:7052 --enrollment.profile tls --csr.hosts peer1-org1

转到路径 /tmp/hyperledger/org1/peer1/tls-msp/keystore 并将密钥的名称更改为 key.pem。 这将便于在后面的步骤中参考。

此时,您将拥有两个 MSP 目录。 一个 MSP 包含Peer的注册证书,另一个具有Peer的 TLS 证书。 但是,需要在注册 MSP 目录中添加一个额外的文件夹,这是 admincerts 文件夹。 此文件夹将包含 Org1 管理员的证书。 当我们在下面注册 Org1 的管理员时,我们会更多地讨论这个问题。

注册 Peer2

您将为 Peer2 执行类似的命令。 在下面的命令中,我们假设 Org1 的可信根证书已复制到 Peer2 主机上的“/tmp/hyperledger/org1/peer2/assets/ca/org1-ca-cert.pem”。

export FABRIC_CA_CLIENT_HOME=/tmp/hyperledger/org1/peer2
export FABRIC_CA_CLIENT_TLS_CERTFILES=/tmp/hyperledger/org1/peer2/assets/ca/org1-ca-cert.pem
export FABRIC_CA_CLIENT_MSPDIR=msp
fabric-ca-client enroll -d -u https://peer2-org1:peer2PW@0.0.0.0:7054

下一步是获取Peer的 TLS 加密材料。 这需要再次注册,但这次您将根据 TLS CA 上的“tls”配置文件进行注册。 您还需要在注册请求中提供 Peer2 主机的地址作为 csr.hosts 标志的输入。 在下面的命令中,我们假设 TLS CA 的证书已复制到 Peer2 主机上的“/tmp/hyperledger/org1/peer2/assets/tls-ca/tls-ca-cert.pem”。

export FABRIC_CA_CLIENT_MSPDIR=tls-msp
export FABRIC_CA_CLIENT_TLS_CERTFILES=/tmp/hyperledger/org1/peer2/assets/tls-ca/tls-ca-cert.pem
fabric-ca-client enroll -d -u https://peer2-org1:peer2PW@0.0.0.0:7052 --enrollment.profile tls --csr.hosts peer2-org1

转到路径 /tmp/hyperledger/org1/peer2/tls-msp/keystore 并将密钥的名称更改为 key.pem。 这将便于在后面的步骤中参考。

此时,您将拥有两个 MSP 目录。 一个 MSP 包含Peer的注册证书,另一个具有Peer的 TLS 证书。 注册管理员后,您将把 admincerts 文件夹添加到注册 MSP。

注册 Org1 的管理员

至此,两个同行都已注册。 现在,您将注册 Org1 的管理员身份。 管理员身份负责安装和实例化链码等活动。 以下步骤将注册管理员。 在下面的命令中,我们将假设它们正在 Peer1 的主机上执行。

export FABRIC_CA_CLIENT_HOME=/tmp/hyperledger/org1/admin
export FABRIC_CA_CLIENT_TLS_CERTFILES=/tmp/hyperledger/org1/peer1/assets/ca/org1-ca-cert.pem
export FABRIC_CA_CLIENT_MSPDIR=msp
fabric-ca-client enroll -d -u https://admin-org1:org1AdminPW@0.0.0.0:7054

注册后,您应该有一个管理员 MSP。 您将从该 MSP 复制证书并将其移动到 Peer1 的 MSP 中的“admincerts”文件夹中。 您需要将此管理员证书分发给Org中的其他Peer,并且需要进入每个Peer MSP 的 admincerts 文件夹。

以下命令仅适用于 Peer1,管理员证书与 Peer2 的交换将在带外发生。

mkdir /tmp/hyperledger/org1/peer1/msp/admincerts
cp /tmp/hyperledger/org1/admin/msp/signcerts/cert.pem /tmp/hyperledger/org1/peer1/msp/admincerts/org1-admin-cert.pem

如果 peer 的本地 MSP 中缺少 admincerts 文件夹,则 peer 将无法启动。

启动 Org1 的 Peers

一旦我们注册了所有Peer和Org管理员,我们就有了必要的 MSP 来启动Peer。

如下所示的 docker 服务可用于为 Peer1 启动容器。

peer1-org1:
  container_name: peer1-org1
  image: hyperledger/fabric-peer
  environment:
    - CORE_PEER_ID=peer1-org1
    - CORE_PEER_ADDRESS=peer1-org1:7051
    - CORE_PEER_LOCALMSPID=org1MSP
    - CORE_PEER_MSPCONFIGPATH=/tmp/hyperledger/org1/peer1/msp
    - CORE_VM_ENDPOINT=unix:///host/var/run/docker.sock
    - CORE_VM_DOCKER_HOSTCONFIG_NETWORKMODE=guide_fabric-ca
    - FABRIC_LOGGING_SPEC=debug
    - CORE_PEER_TLS_ENABLED=true
    - CORE_PEER_TLS_CERT_FILE=/tmp/hyperledger/org1/peer1/tls-msp/signcerts/cert.pem
    - CORE_PEER_TLS_KEY_FILE=/tmp/hyperledger/org1/peer1/tls-msp/keystore/key.pem
    - CORE_PEER_TLS_ROOTCERT_FILE=/tmp/hyperledger/org1/peer1/tls-msp/tlscacerts/tls-0-0-0-0-7052.pem
    - CORE_PEER_GOSSIP_USELEADERELECTION=true
    - CORE_PEER_GOSSIP_ORGLEADER=false
    - CORE_PEER_GOSSIP_EXTERNALENDPOINT=peer1-org1:7051
    - CORE_PEER_GOSSIP_SKIPHANDSHAKE=true
  working_dir: /opt/gopath/src/github.com/hyperledger/fabric/org1/peer1
  volumes:
    - /var/run:/host/var/run
    - /tmp/hyperledger/org1/peer1:/tmp/hyperledger/org1/peer1
  networks:
    - fabric-ca

启动Peer服务将打开一个Peer容器,在日志中您将看到以下行:

serve -> INFO 020 Started peer with ID=[name:"peer1-org1" ], network ID=[dev], address=[peer1-org1:7051]

如下所示的 docker 服务可用于为 Peer2 启动容器。

peer2-org1:
  container_name: peer2-org1
  image: hyperledger/fabric-peer
  environment:
    - CORE_PEER_ID=peer2-org1
    - CORE_PEER_ADDRESS=peer2-org1:7051
    - CORE_PEER_LOCALMSPID=org1MSP
    - CORE_PEER_MSPCONFIGPATH=/tmp/hyperledger/org1/peer2/msp
    - CORE_VM_ENDPOINT=unix:///host/var/run/docker.sock
    - CORE_VM_DOCKER_HOSTCONFIG_NETWORKMODE=guide_fabric-ca
    - FABRIC_LOGGING_SPEC=grpc=debug:info
    - CORE_PEER_TLS_ENABLED=true
    - CORE_PEER_TLS_CERT_FILE=/tmp/hyperledger/org1/peer2/tls-msp/signcerts/cert.pem
    - CORE_PEER_TLS_KEY_FILE=/tmp/hyperledger/org1/peer2/tls-msp/keystore/key.pem
    - CORE_PEER_TLS_ROOTCERT_FILE=/tmp/hyperledger/org1/peer2/tls-msp/tlscacerts/tls-0-0-0-0-7052.pem
    - CORE_PEER_GOSSIP_USELEADERELECTION=true
    - CORE_PEER_GOSSIP_ORGLEADER=false
    - CORE_PEER_GOSSIP_EXTERNALENDPOINT=peer2-org1:7051
    - CORE_PEER_GOSSIP_SKIPHANDSHAKE=true
    - CORE_PEER_GOSSIP_BOOTSTRAP=peer1-org1:7051
  working_dir: /opt/gopath/src/github.com/hyperledger/fabric/org1/peer2
  volumes:
    - /var/run:/host/var/run
    - /tmp/hyperledger/org1/peer2:/tmp/hyperledger/org1/peer2
  networks:
    - fabric-ca

启动Peer服务将打开一个Peer容器,在日志中您将看到以下行:

serve -> INFO 020 Started peer with ID=[name:"peer2-org1" ], network ID=[dev], address=[peer2-org1:7051]

设置 Org2 的Peer

Org2 的管理员将使用 CA 的引导身份向 CA 注册Peer,然后启动Peer docker 容器。

注册 Peer1

您将发出以下命令来注册 Peer1。 在下面的命令中,我们假设 Org2 的可信根证书在 Peer1 的主机上的 /tmp/hyperledger/org2/peer1/assets/ca/org2-ca-cert.pem 中可用。

export FABRIC_CA_CLIENT_HOME=/tmp/hyperledger/org2/peer1
export FABRIC_CA_CLIENT_TLS_CERTFILES=/tmp/hyperledger/org2/peer1/assets/ca/org2-ca-cert.pem
export FABRIC_CA_CLIENT_MSPDIR=msp
fabric-ca-client enroll -d -u https://peer1-org2:peer1PW@0.0.0.0:7055

接下来,您将获得 TLS 证书。 在下面的命令中,我们将假设 TLS CA 的证书已复制到 Peer1 主机上的/tmp/hyperledger/org2/peer1/assets/tls-ca/tls-ca-cert.pem

export FABRIC_CA_CLIENT_MSPDIR=tls-msp
export FABRIC_CA_CLIENT_TLS_CERTFILES=/tmp/hyperledger/org2/peer1/assets/tls-ca/tls-ca-cert.pem
fabric-ca-client enroll -d -u https://peer1-org2:peer1PW@0.0.0.0:7052 --enrollment.profile tls --csr.hosts peer1-org2

转到路径 /tmp/hyperledger/org2/peer1/tls-msp/keystore 并将密钥的名称更改为 key.pem

注册 Peer2

您将发出以下命令以注册 Peer2。 在下面的命令中,我们假设 Org2 的可信根证书在 Peer2 的主机上的 /tmp/hyperledger/org2/peer2/assets/ca/org2-ca-cert.pem 中可用。

export FABRIC_CA_CLIENT_HOME=/tmp/hyperledger/org2/peer2
export FABRIC_CA_CLIENT_TLS_CERTFILES=/tmp/hyperledger/org2/peer2/assets/ca/org2-ca-cert.pem
export FABRIC_CA_CLIENT_MSPDIR=msp
fabric-ca-client enroll -d -u https://peer2-org2:peer2PW@0.0.0.0:7055

接下来,您将获得 TLS 证书。 在下面的命令中,我们假设 TLS CA 的证书已复制到 Peer2 主机上的“/tmp/hyperledger/org2/peer2/assets/tls-ca/tls-ca-cert.pem”。

export FABRIC_CA_CLIENT_MSPDIR=tls-msp
export FABRIC_CA_CLIENT_TLS_CERTFILES=/tmp/hyperledger/org2/peer2/assets/tls-ca/tls-ca-cert.pem
fabric-ca-client enroll -d -u https://peer2-org2:peer2PW@0.0.0.0:7052 --enrollment.profile tls --csr.hosts peer2-org2

转到路径 /tmp/hyperledger/org2/peer2/tls-msp/keystore 并将密钥的名称更改为 key.pem

注册 Org2 的管理员

此时,您将拥有两个 MSP 目录。 一个 MSP 包含您的注册证书,另一个包含您的 TLS 证书。 但是,需要在注册 MSP 目录中添加一个额外的文件夹,这是 admincerts 文件夹。 此文件夹将包含 Org2 管理员的证书。 以下步骤将注册管理员。 在下面的命令中,我们将假设它们正在 Peer1 的主机上执行。

export FABRIC_CA_CLIENT_HOME=/tmp/hyperledger/org2/admin
export FABRIC_CA_CLIENT_TLS_CERTFILES=/tmp/hyperledger/org2/peer1/assets/ca/org2-ca-cert.pem
export FABRIC_CA_CLIENT_MSPDIR=msp
fabric-ca-client enroll -d -u https://admin-org2:org2AdminPW@0.0.0.0:7055

注册后,您应该有一个管理员 MSP。 您将从该 MSP 复制证书并将其移动到“admincerts”文件夹下的Peer MSP。 以下命令仅适用于 Peer1,管理员证书与 peer2 的交换将在带外发生。

mkdir /tmp/hyperledger/org2/peer1/msp/admincerts
cp /tmp/hyperledger/org2/admin/msp/signcerts/cert.pem /tmp/hyperledger/org2/peer1/msp/admincerts/org2-admin-cert.pem

如果 peer 的本地 MSP 中缺少 admincerts 文件夹,则 peer 将无法启动。

启动 Org2 的 Peers

一旦我们注册了所有Peer节点和管理员,我们就有了启动Peer节点所需的 MSP。

一个 docker 服务,如下面的服务可以用来为 peer1 启动一个容器。

peer1-org2:
  container_name: peer1-org2
  image: hyperledger/fabric-peer
  environment:
    - CORE_PEER_ID=peer1-org2
    - CORE_PEER_ADDRESS=peer1-org2:7051
    - CORE_PEER_LOCALMSPID=org2MSP
    - CORE_PEER_MSPCONFIGPATH=/tmp/hyperledger/org2/peer1/msp
    - CORE_VM_ENDPOINT=unix:///host/var/run/docker.sock
    - CORE_VM_DOCKER_HOSTCONFIG_NETWORKMODE=guide_fabric-ca
    - FABRIC_LOGGING_SPEC=debug
    - CORE_PEER_TLS_ENABLED=true
    - CORE_PEER_TLS_CERT_FILE=/tmp/hyperledger/org2/peer1/tls-msp/signcerts/cert.pem
    - CORE_PEER_TLS_KEY_FILE=/tmp/hyperledger/org2/peer1/tls-msp/keystore/key.pem
    - CORE_PEER_TLS_ROOTCERT_FILE=/tmp/hyperledger/org2/peer1/tls-msp/tlscacerts/tls-0-0-0-0-7052.pem
    - CORE_PEER_GOSSIP_USELEADERELECTION=true
    - CORE_PEER_GOSSIP_ORGLEADER=false
    - CORE_PEER_GOSSIP_EXTERNALENDPOINT=peer1-org2:7051
    - CORE_PEER_GOSSIP_SKIPHANDSHAKE=true
  working_dir: /opt/gopath/src/github.com/hyperledger/fabric/org2/peer1
  volumes:
    - /var/run:/host/var/run
    - /tmp/hyperledger/org2/peer1:/tmp/hyperledger/org2/peer1
  networks:
    - fabric-ca

启动Peer服务将打开一个Peer容器,在日志中您将看到以下行:

serve -> INFO 020 Started peer with ID=[name:"peer1-org2" ], network ID=[dev], address=[peer1-org2:7051]

如下所示的 docker 服务可用于为 peer2 启动容器。

peer2-org2:
  container_name: peer2-org2
  image: hyperledger/fabric-peer
  environment:
    - CORE_PEER_ID=peer2-org2
    - CORE_PEER_ADDRESS=peer2-org2:7051
    - CORE_PEER_LOCALMSPID=org2MSP
    - CORE_PEER_MSPCONFIGPATH=/tmp/hyperledger/org2/peer2/msp
    - CORE_VM_ENDPOINT=unix:///host/var/run/docker.sock
    - CORE_VM_DOCKER_HOSTCONFIG_NETWORKMODE=guide_fabric-ca
    - FABRIC_LOGGING_SPEC=debug
    - CORE_PEER_TLS_ENABLED=true
    - CORE_PEER_TLS_CERT_FILE=/tmp/hyperledger/org2/peer2/tls-msp/signcerts/cert.pem
    - CORE_PEER_TLS_KEY_FILE=/tmp/hyperledger/org2/peer2/tls-msp/keystore/key.pem
    - CORE_PEER_TLS_ROOTCERT_FILE=/tmp/hyperledger/org2/peer2/tls-msp/tlscacerts/tls-0-0-0-0-7052.pem
    - CORE_PEER_GOSSIP_USELEADERELECTION=true
    - CORE_PEER_GOSSIP_ORGLEADER=false
    - CORE_PEER_GOSSIP_EXTERNALENDPOINT=peer2-org2:7051
    - CORE_PEER_GOSSIP_SKIPHANDSHAKE=true
    - CORE_PEER_GOSSIP_BOOTSTRAP=peer1-org2:7051
  working_dir: /opt/gopath/src/github.com/hyperledger/fabric/org2/peer2
  volumes:
    - /var/run:/host/var/run
    - /tmp/hyperledger/org2/peer2:/tmp/hyperledger/org2/peer2
  networks:
    - fabric-ca

启动Peer服务将打开一个Peer容器,在日志中您将看到以下行:

serve -> INFO 020 Started peer with ID=[name:"peer2-org2" ], network ID=[dev], address=[peer2-org2:7052]

设置orderer

我们需要设置的最后一件事是orderer 。 在启动 orderer 之前,我们需要采取一些措施。

注册 Orderer

在启动 orderer 之前,您需要向 CA 注册 orderer 的身份,以获取 orderer 将使用的 MSP。 这称为本地Orderer MSP。

如果主机没有 fabric-ca-client 二进制文件,请参考上面的说明下载二进制文件。

您将发出以下命令以注册Orderer。 在下面的命令中,我们假设 Org0 的可信根证书在 orderer 主机上的 /tmp/hyperledger/org0/orderer/assets/ca/org0-ca-cert.pem 中可用。

export FABRIC_CA_CLIENT_HOME=/tmp/hyperledger/org0/orderer
export FABRIC_CA_CLIENT_TLS_CERTFILES=/tmp/hyperledger/org0/orderer/assets/ca/org0-ca-cert.pem
fabric-ca-client enroll -d -u https://orderer1-org0:ordererpw@0.0.0.0:7053

接下来,您将获得 TLS 证书。 在下面的命令中,我们将假设 TLS CA 的证书已复制到 Orderer 主机上的 /tmp/hyperledger/org0/orderer/assets/tls-ca/tls-ca-cert.pem

export FABRIC_CA_CLIENT_MSPDIR=tls-msp
export FABRIC_CA_CLIENT_TLS_CERTFILES=/tmp/hyperledger/org0/orderer/assets/tls-ca/tls-ca-cert.pem
fabric-ca-client enroll -d -u https://orderer1-org0:ordererPW@0.0.0.0:7052 --enrollment.profile tls --csr.hosts orderer1-org0

转到路径 /tmp/hyperledger/org0/orderer/tls-msp/keystore 并将密钥的名称更改为 key.pem

此时,您将拥有两个 MSP 目录。 一个 MSP 包含您的注册证书,另一个包含您的 TLS 证书。 但是,需要在注册 MSP 目录中添加一个额外的文件夹,即 admincerts 文件夹。 此文件夹将包含Peers 1 管理员的证书。现在,您将通过发出以下命令来注册 Org0 的管理员身份。

注册 Org0 的管理员

下面的命令假定这是在Orderer的主机上执行的。

export FABRIC_CA_CLIENT_HOME=/tmp/hyperledger/org0/admin
export FABRIC_CA_CLIENT_TLS_CERTFILES=/tmp/hyperledger/org0/orderer/assets/ca/org0-ca-cert.pem
export FABRIC_CA_CLIENT_MSPDIR=msp
fabric-ca-client enroll -d -u https://admin-org0:org0adminpw@0.0.0.0:7053

注册后,您应该在 /tmp/hyperledger/org0/admin 有一个 msp 文件夹。 您将从该 MSP 复制证书并将其移动到“admincerts”文件夹下的orderer MSP。

mkdir /tmp/hyperledger/org0/orderer/msp/admincerts
cp /tmp/hyperledger/org0/admin/msp/signcerts/cert.pem /tmp/hyperledger/org0/orderer/msp/admincerts/orderer-admin-cert.pem

创建创世块和通道交易

Orderer需要一个创世块,用于引导自身。 您可以在 Hyperledger Fabric 文档 中找到更多信息

在下面的文档中,您会找到为此特定部署编写的 configtx.yaml 片段。 如需完整的 configtx.yaml,请单击 此处

在 orderer 的主机上,我们需要收集所有Org的 MSP。 configtx.yaml 中的 organization 部分如下所示:

Organizations:

- &org0

   Name: org0

   ID: org0MSP

   MSPDir: /tmp/hyperledger/org0/msp

- &org1

   Name: org1

   ID: org1MSP

   MSPDir: /tmp/hyperledger/org1/msp

   AnchorPeers:
      - Host: peer1-org1
         Port: 7051

- &org2

   Name: org2

   ID: org2MSP

   MSPDir: /tmp/hyperledger/org2/msp

   AnchorPeers:
      - Host: peer1-org2
        Port: 7051

Org0 的 MSP 将包含 Org0 的可信根证书、Org0 管理员身份的证书和 TLS CA 的可信根证书。 MSP 文件夹结构如下所示。

/tmp/hyperledger/org0/msp
├── admincerts
│   └── admin-org0-cert.pem
├── cacerts
│   └── org0-ca-cert.pem
├── tlscacerts
│   └── tls-ca-cert.pem
└── users

所有Org的模式都是相同的。 Org1 的 MSP 文件夹结构如下:

/tmp/hyperledger/org1/msp
├── admincerts
│   └── admin-org1-cert.pem
├── cacerts
│   └── org1-ca-cert.pem
├── tlscacerts
│   └── tls-ca-cert.pem
└── users

Org2 的 MSP 文件夹结构如下:

/tmp/hyperledger/org2/msp
├── admincerts
│   └── admin-org2-cert.pem
├── cacerts
│   └── org2-ca-cert.pem
├── tlscacerts
│   └── tls-ca-cert.pem
└── users

一旦所有这些 MSP 都出现在 orderer 的主机上,您将从 configtx.yaml 所在的目录执行以下命令:

configtxgen -profile OrgsOrdererGenesis -outputBlock /tmp/hyperledger/org0/orderer/genesis.block -channelID syschannel
configtxgen -profile OrgsChannel -outputCreateChannelTx /tmp/hyperledger/org0/orderer/channel.tx -channelID mychannel

这将生成两个工件,“genesis.block”和“channel.tx”,将在后面的步骤中使用。

收集证书的命令

Fabric CA 客户端有几个命令可用于获取 orderer genesis 和 peer MSP setup 的证书。

第一个命令是 fabric-ca-client certificate 命令。 此命令可用于获取 admincerts 文件夹的证书。 有关如何使用该命令的更多信息,请参考:列出证书信息

第二个命令是 fabric-ca-client getcainfo 命令。 此命令可用于收集 cacerts 和 tlscacerts 文件夹的证书。 getcainfo 命令返回 CA 的证书。

双向 TLS

端点也可以使用 Mutual TLS 来保护。 如果 CA、Peer 或 Orderer 使用双向 TLS,则客户端还必须提供一个 TLS 证书,该证书将由服务器验证。

双向 TLS 要求客户端获取将呈现给服务器的 TLS 证书。 可以通过启用了双向 TLS 的 TLS 证书颁发机构来获取 TLS 证书。 一旦客户端获得了 TLS 证书,它就可以开始与启用了双向 TLS 的服务器进行通信,只要服务器上受信任的 TLS 机构与客户端 TLS 证书的颁发机构相同。

启动 Orderer

创建创世区块和通道交易后,您可以定义一个指向上面创建的 genesis.block 的排序服务。

orderer1-org0:
  container_name: orderer1-org0
  image: hyperledger/fabric-orderer
  environment:
    - ORDERER_HOME=/tmp/hyperledger/orderer
    - ORDERER_HOST=orderer1-org0
    - ORDERER_GENERAL_LISTENADDRESS=0.0.0.0
    - ORDERER_GENERAL_GENESISMETHOD=file
    - ORDERER_GENERAL_GENESISFILE=/tmp/hyperledger/org0/orderer/genesis.block
    - ORDERER_GENERAL_LOCALMSPID=org0MSP
    - ORDERER_GENERAL_LOCALMSPDIR=/tmp/hyperledger/org0/orderer/msp
    - ORDERER_GENERAL_TLS_ENABLED=true
    - ORDERER_GENERAL_TLS_CERTIFICATE=/tmp/hyperledger/org0/orderer/tls-msp/signcerts/cert.pem
    - ORDERER_GENERAL_TLS_PRIVATEKEY=/tmp/hyperledger/org0/orderer/tls-msp/keystore/key.pem
    - ORDERER_GENERAL_TLS_ROOTCAS=[/tmp/hyperledger/org0/orderer/tls-msp/tlscacerts/tls-0-0-0-0-7052.pem]
    - ORDERER_GENERAL_LOGLEVEL=debug
    - ORDERER_DEBUG_BROADCASTTRACEDIR=data/logs
  volumes:
    - /tmp/hyperledger/org0/orderer:/tmp/hyperledger/org0/orderer/
  networks:
    - fabric-ca

启动 orderer 服务将打开一个 orderer 容器,在日志中您将看到以下行:

UTC [orderer/common/server] Start -> INFO 0b8 Beginning to serve requests

创建 CLI 容器

与Peers点的通信需要一个 CLI 容器,该容器包含适当的二进制文件,允许您发出Peers点相关的命令。 您将为每个Org创建一个 CLI 容器。 在此示例中,我们为每个Org在与 Peer1 相同的主机中启动 CLI 容器。

启动 Org1 的 CLI

cli-org1:
   container_name: cli-org1
   image: hyperledger/fabric-tools
   tty: true
   stdin_open: true
   environment:
     - GOPATH=/opt/gopath
     - CORE_VM_ENDPOINT=unix:///host/var/run/docker.sock
     - FABRIC_LOGGING_SPEC=DEBUG
     - CORE_PEER_ID=cli-org1
     - CORE_PEER_ADDRESS=peer1-org1:7051
     - CORE_PEER_LOCALMSPID=org1MSP
     - CORE_PEER_TLS_ENABLED=true
     - CORE_PEER_TLS_ROOTCERT_FILE=/tmp/hyperledger/org1/peer1/tls-msp/tlscacerts/tls-0-0-0-0-7052.pem
     - CORE_PEER_MSPCONFIGPATH=/tmp/hyperledger/org1/peer1/msp
   working_dir: /opt/gopath/src/github.com/hyperledger/fabric/org1
   command: sh
   volumes:
     - /tmp/hyperledger/org1/peer1:/tmp/hyperledger/org1/peer1
     - /tmp/hyperledger/org1/peer1/assets/chaincode:/opt/gopath/src/github.com/hyperledger/fabric-samples/chaincode
     - /tmp/hyperledger/org1/admin:/tmp/hyperledger/org1/admin
   networks:
     - fabric-ca

启动 Org2 的 CLI

cli-org2:
   container_name: cli-org2
   image: hyperledger/fabric-tools
   tty: true
   stdin_open: true
   environment:
     - GOPATH=/opt/gopath
     - CORE_VM_ENDPOINT=unix:///host/var/run/docker.sock
     - FABRIC_LOGGING_SPEC=DEBUG
     - CORE_PEER_ID=cli-org2
     - CORE_PEER_ADDRESS=peer1-org2:7051
     - CORE_PEER_LOCALMSPID=org2MSP
     - CORE_PEER_TLS_ENABLED=true
     - CORE_PEER_TLS_ROOTCERT_FILE=/tmp/hyperledger/org2/peer1/tls-msp/tlscacerts/tls-0-0-0-0-7052.pem
     - CORE_PEER_MSPCONFIGPATH=/tmp/hyperledger/org2/peer1/msp
   working_dir: /opt/gopath/src/github.com/hyperledger/fabric/org2
   command: sh
   volumes:
     - /tmp/hyperledger/org2/peer1:/tmp/hyperledger/org2/peer1
     - /tmp/hyperledger/org1/peer1/assets/chaincode:/opt/gopath/src/github.com/hyperledger/fabric-samples/chaincode
     - /tmp/hyperledger/org2/admin:/tmp/hyperledger/org2/admin
   networks:
     - fabric-ca

创建和加入频道

Org1

随着 CLI 容器启动并运行,您现在可以发出命令来创建和加入频道。 我们将使用 Peer1 创建通道。 在 Peer1 的主机中,您将执行:

docker exec -it cli-org1 sh

此命令将带您进入 CLI 容器并打开一个终端。 从这里,您将使用管理 MSP 执行以下命令:

export CORE_PEER_MSPCONFIGPATH=/tmp/hyperledger/org1/admin/msp
peer channel create -c mychannel -f /tmp/hyperledger/org1/peer1/assets/channel.tx -o orderer1-org0:7050 --outputBlock /tmp/hyperledger/org1/peer1/assets/mychannel.block --tls --cafile /tmp/hyperledger/org1/peer1/tls-msp/tlscacerts/tls-0-0-0-0-7052.pem

channel.tx 是通过在 orderer 上运行 configtxgen 命令生成的工件。 这个工件需要从 orderer 带外传输到 Peer1 的主机。 上面的命令将在 Peer1 的指定输出路径 /tmp/hyperledger/org1/peer1/assets/mychannel.block 处生成mychannel.block,网络中所有希望加入通道的节点都将使用该路径 . 这个 mychannel.block 需要带外传输到 Org1 和 Org2 中的所有Peers方。

您要运行的下一个命令是让 Peer1 和 Peer2 加入频道。

export CORE_PEER_MSPCONFIGPATH=/tmp/hyperledger/org1/admin/msp
export CORE_PEER_ADDRESS=peer1-org1:7051
peer channel join -b /tmp/hyperledger/org1/peer1/assets/mychannel.block

export CORE_PEER_ADDRESS=peer2-org1:7051
peer channel join -b /tmp/hyperledger/org1/peer1/assets/mychannel.block

Org2

运行以下命令进入 CLI docker 容器。

docker exec -it cli-org2 sh

在 Org2 中,您只需要让 peer 加入频道。 Org2 中的 Peers 不需要创建通道,这已经由 Org1 完成。 在 Org2 CLI 容器中,您将使用管理 MSP 执行以下命令:

export CORE_PEER_MSPCONFIGPATH=/tmp/hyperledger/org2/admin/msp
export CORE_PEER_ADDRESS=peer1-org2:7051
peer channel join -b /tmp/hyperledger/org2/peer1/assets/mychannel.block

export CORE_PEER_ADDRESS=peer2-org2:7051
peer channel join -b /tmp/hyperledger/org2/peer1/assets/mychannel.block

安装和实例化链码

从 Github 下载这个 chaincode 到两个Org的 Peer1 上的本地文件系统。

Org1

在 Peer1 上,您将安装链代码。 该命令假定需要安装的链代码在 GOPATH 中可用。 在这个例子中,我们假设链码位于/opt/gopath/src/github.com/hyperledger/fabric-samples/chaincode/abac/go,GOPATH 是/opt/gopath。 在 Org1 的 CLI 容器中,您将执行以下命令:

export CORE_PEER_ADDRESS=peer1-org1:7051
export CORE_PEER_MSPCONFIGPATH=/tmp/hyperledger/org1/admin/msp
peer chaincode install -n mycc -v 1.0 -p github.com/hyperledger/fabric-samples/chaincode/abac/go

peer2 将遵循相同的一组步骤。

export CORE_PEER_ADDRESS=peer2-org1:7051
export CORE_PEER_MSPCONFIGPATH=/tmp/hyperledger/org1/admin/msp
peer chaincode install -n mycc -v 1.0 -p github.com/hyperledger/fabric-samples/chaincode/abac/go

Org2

在 Peer1 上,您将执行与 Org1 相同的步骤。 该命令假定需要安装的链代码位于/opt/gopath/src/github.com/hyperledger/org2/peer1/assets/chaincode/abac/go。 在 Org2 的 CLI 容器中,您将执行以下命令:

export CORE_PEER_ADDRESS=peer1-org2:7051
export CORE_PEER_MSPCONFIGPATH=/tmp/hyperledger/org2/admin/msp
peer chaincode install -n mycc -v 1.0 -p github.com/hyperledger/fabric-samples/chaincode/abac/go

peer2 将遵循相同的一组步骤。

export CORE_PEER_ADDRESS=peer2-org2:7051
export CORE_PEER_MSPCONFIGPATH=/tmp/hyperledger/org2/admin/msp
peer chaincode install -n mycc -v 1.0 -p github.com/hyperledger/fabric-samples/chaincode/abac/go

下一步将是实例化链码。 这通过执行:

peer chaincode instantiate -C mychannel -n mycc -v 1.0 -c '{"Args":["init","a","100","b","200"]}' -o orderer1-org0:7050 --tls --cafile /tmp/hyperledger/org2/peer1/tls-msp/tlscacerts/tls-0-0-0-0-7052.pem

调用和查询链码

在 Org1 的 CLI 容器中,执行:

export CORE_PEER_ADDRESS=peer1-org1:7051
export CORE_PEER_MSPCONFIGPATH=/tmp/hyperledger/org1/admin/msp
peer chaincode query -C mychannel -n mycc -c '{"Args":["query","a"]}'

这应该返回一个 100 的值。

在 Org2 的 CLI 容器中,执行:

export CORE_PEER_ADDRESS=peer1-org2:7051
export CORE_PEER_MSPCONFIGPATH=/tmp/hyperledger/org2/admin/msp
peer chaincode invoke -C mychannel -n mycc -c '{"Args":["invoke","a","b","10"]}' --tls --cafile /tmp/hyperledger/org2/peer1/tls-msp/tlscacerts/tls-0-0-0-0-7052.pem

这将从 a 的值中减去 10 并将其移至 b。 现在,如果您通过运行查询:

peer chaincode query -C mychannel -n mycc -c '{"Args":["query","a"]}'

这应该返回一个 90 的值。

Fabric CA 操作指南到此结束。

0

评论区