HyperLeger Fabric SDK开发(二)——Fabric SDK配置

HyperLeger Fabric SDK开发(二)——Fabric SDK配置

一、Fabric SDK配置

Fabric区块链网络应用程序需要大量的参数,用于连接Fabric区块链网络。通常将Fabric区块链网络应用程序所需的参数放到一个配置文件进行管理,配置文件定义Fabric SDK Go的配置和用户自定义参数,指定了连接Fabric区块链网络所需的全部信息,例如Fabric区块链网络组件的主机名和端口等。Fabric SDK GO为应用程序提供的配置文件通常使用yaml文件格式编写,并命名为config.yaml,配置文件会在应用程序代码中被读取。
Fabric SDK Go版本提供了config.yaml模板,开发者可以参考
fabric-sdk-go/pkg/core/config/testdata/template/config.yaml,也可以根据fabric-sdk-go/test/fixtures/config/config_e2e.yaml实例进行改写。

二、version定义

version用于定义config.yaml文件内容的版本,Fabric SDK Go会使用version匹配相应的解析规则。
version: 1.0.0

三、channels定义

channels部分描述已经存在的通道信息,每个通道包含哪些orderer、peer?。
peer部分可以定义peer节点的角色属性,角色如下:
endorsingPeer:可选。peer节点节点必须安装链码。peer节点是否会被发送交易提案进行背书。应用程序也可以使用本属性来决定发送链码安装请求到哪个peer节点。默认值:true。
chaincodeQuery:可选。peer节点必须安装链码。peer节点是否会被发送交易提案只进行查询。应用程序还可以使用本属性来决定发送链码安装的请求到哪个peer节点。默认值:true。
ledgerQuery:可选。是否可以向peer节点发送不会进行链码查询的提案,如queryBlock(),queryTransaction()等。默认值:true。
eventSource:可选。peer节点是否为SDK事件监听器注册的目标,所有的peer节点都可以生产事件,但通常只需要连接一个对事件进行监听。默认值:true。

# 如果应用程序创建了通道,不需要本部分
channels:
  # 如果没有定义channel配置或是定义的channel没有信息,使用默认channel
  # 如果channel没有定义peers,使用默认channel的peers
  # 如果channel没有定义orderes,使用默认channel的orderes
  # 如果channel没有定义背书策略,使用默认channel的背书策略
  # 如果channel定义了背书策略,但某些背书策略缺失,缺失的背书策略会被默认channel填充
  _default:
    # 可选,参与组织的peers列表
    peers:
      peer1.org1.example.com:
        endorsingPeer: true
        chaincodeQuery: true
        ledgerQuery: true
        eventSource: true

    # 可选,应用程序使用下列选项执行通道操作,如获取通道配置
    policies:
      #可选,获取通道配置区块
      queryChannelConfig:
        #可选,成功响应节点的最小数量
        minResponses: 1
        # 可选
        maxTargets: 1
        # 可选,查询配置区块的重试选项
        retryOpts:
          # 可选,重试次数
          attempts: 5
          # 可选, 第一次重试的后退间隔
          initialBackoff: 500ms
          # 可选, 重试的最大后退间隔
          maxBackoff: 5s
          backoffFactor: 2.0
      # 可选,获取发现信息选项
      discovery:
        maxTargets: 2
        # 重试选项
        retryOpts:
          # 可选,重试次数
          attempts: 4
          initialBackoff: 500ms
          maxBackoff: 5s
          backoffFactor: 2.0

      # 可选,事件服务选项
      eventService:
        # 可选 resolverStrategy指定连接到peer节点时选择peer节点的决策策略
        # 可选值:PreferOrg(默认), MinBlockHeight, Balanced
        # PreferOrg:
        #   基于区块高度滞后阀值决定哪些peer节点是合适的, 虽然会在当前组织中优先选择peer节点
        #   如果当前组织中没有合适的peer节点,会从其它组织中选取
        # MinBlockHeight:
        #   根据区块高度滞后阀值选择最好的peer节点,
        #   所有peer节点的最大区块高度是确定的,区块高度小于最大区块高度但在滞后阀值范围内的peer节点会被加载,
        #   其它peer节点不会被考虑。
        # Balanced:
        #   使用配置的balancer选择peer节点
        resolverStrategy: PreferOrg

        # 可选 balancer是选择连接到peer节点的负载均衡器
        # 可选值: Random (default), RoundRobin
        balancer: Random

        # 可选,blockHeightLagThreshold设置区块高度滞后阀值,用于选择连接到的peer节点
        # 如果一个peer节点滞后于最新的peer节点给定的区块数,会被排除在选择之外
        # 注意:当minBlockHeightResolverMode设置为ResolveByThreshold时,本参数才可用
        # 默认: 5
        blockHeightLagThreshold: 5

        # 可选,reconnectBlockHeightLagThreshold - 如果peer节点的区块高度落后于指定的区块数量,
        # 事件客户端会从peer节点断开,重新连接到一个性能更好的peer节点
        # 如果peerMonitor设置为启用(默认),本参数才可用
        # 默认值: 10
        # 注意:设置值太低会导致事件客户端频繁断开或重连,影响性能
        reconnectBlockHeightLagThreshold: 8

        # 可选, peerMonitorPeriod是事件客户端从连接节点断开重新连接到另外一个节点的时间
        # 默认: 对于Balanced resolverStrategy禁用,为0; 对于PreferOrg和MinBlockHeight为5s
        peerMonitorPeriod: 6s

  #如果_default没有定义,必选;如果_default已经定义,可选。
  # 通道名称
  assetchannel:
    # 如果_default peers没有定义,必选;如果_default peers已经定义,可选。
    # 参与组织的peer节点列表
    peers:
      peer0.org1.example.com:
        # 可选。peer节点是否会被发送交易提议只进行查询。peer节点必须安装链码。
        # 应用程序还可以使用本属性来决定发送链码安装的请求到哪个peer节点。默认值:true
        endorsingPeer: true

        # 可选。peer节点必须安装链码。peer节点是否会被发送交易提案只进行查询。
        # 应用程序还可以使用本属性来决定发送链码安装的请求到哪个peer节点。默认值:true
        chaincodeQuery: true

        # 可选。是否可以向peer节点发送不会进行链码查询的提案,如queryBlock(),
        # queryTransaction()等。默认值:true。
        ledgerQuery: true

        # 可选。peer节点是否为SDK事件监听器注册的目标,所有的peer节点都可以生产事件,
        # 但通常只需要连接一个对事件进行监听。默认值:true。
        eventSource: true

四、organizations定义

organizations描述peer节点所属的组织(org),证书颁发机构,以及组织的MSP ID。

# Fabric区块链网络中参与的组织列表
organizations:
  org1:
    mspid: Org1MSP
    # 组织的MSP存储位置,绝对路径或相对cryptoconfig的路径
    cryptoPath:  peerOrganizations/org1.example.com/users/{username}@org1.example.com/msp
    peers:
      - peer0.org1.example.com
      - peer1.org1.example.com
    # 可选,证书颁发机构签发×××明,Fabric-CA是一个特殊的证书管理机构,提供REST API支持动态证书管理,如登记、撤销、重新登记
    # 下列部分只为Fabric-CA服务器设置
    certificateAuthorities:
      - ca.org1.example.com

  org2:
    mspid: Org2MSP

    # 组织的MSP存储位置,相对于cryptoconfig的相对位置或绝对路径
    cryptoPath:  peerOrganizations/org2.example.com/users/{username}@org2.example.com/msp
    peers:
      - peer0.org2.example.com
    certificateAuthorities:
      - ca.org2.example.com

  # Orderer组织名称
  ordererorg:
      # 组织的MSPID
      mspID: OrdererMSP
      # 加载用户需要的密钥和证书,绝对路径或相对路径
      cryptoPath: ordererOrganizations/example.com/users/{username}@example.com/msp

五、orderers定义

orderers必须指定要连接的Hyperledger Fabric区块链网络中所有orderder节点的主机名和端口。orderers对象可以包含多个orderder节点。

# 发送交易请求或通道创建、更新请求到的orderers列表
# 如果定义了超过一个orderer,SDK使用哪一个orderer由代码实现时指定
orderers:
  # orderer节点,可以定义多个
  orderer.example.com:
    url: orderer.example.com:7050
    # 以下属性由gRPC库定义,会被传递给gRPC客户端构造函数
    grpcOptions:
      ssl-target-name-override: orderer.example.com
      # 下列参数用于设置服务器上的keepalive策略,不兼容的设置会导致连接关闭
      # 当keep-alive-time被设置为0或小于激活客户端的参数,下列参数失效
      keep-alive-time: 0s
      keep-alive-timeout: 20s
      keep-alive-permit: false
      fail-fast: false
      allow-insecure: false

    tlsCACerts:
      # 证书的绝对路径
      path: ${GOPATH}/src/github.com/hyperledger/fabric-sdk-go/${CRYPTOCONFIG_FIXTURES_PATH}/ordererOrganizations/example.com/tlsca/tlsca.example.com-cert.pem

六、peers定义

peers必须指定Hyperledger Fabric区块链网络中所有peer节点的主机名和端口,可能会在其它地方引用,如channels,organizations等部分。

# peers节点列表
peers:
  # peer节点定义,可以定义多个
  peer0.org1.example.com:
    # URL用于发送背书和查询请求
    url: peer0.org1.example.com:7051

    grpcOptions:
      ssl-target-name-override: peer0.org1.example.com
      keep-alive-time: 0s
      keep-alive-timeout: 20s
      keep-alive-permit: false
      fail-fast: false
      allow-insecure: false

    tlsCACerts:
      # 证书的绝对路径
      path: ${GOPATH}/src/github.com/hyperledger/fabric-sdk-go/${CRYPTOCONFIG_FIXTURES_PATH}/peerOrganizations/org1.example.com/tlsca/tlsca.org1.example.com-cert.pem

七、certificateAuthorities定义

certificateAuthorities必须在Hyperledger Fabric区块链网络中指定证书颁发机构(CA)的主机名和端口,以便用于注册现有用户和注册新用户。

# Fabric-CA是Hyperledger Fabric提供了特殊的证书颁发机构,可以通过REST API管理证书。
# 应用程序可以选择使用一个标准的证书颁发机构代替Fabric-CA,此时本部分不需要指定
certificateAuthorities:
  # CA机构,可以定义多个
  ca.org1.example.com:
    url: https://ca.org1.example.com:7054
    tlsCACerts:
      # Comma-Separated list of paths
      path: ${GOPATH}/src/github.com/hyperledger/fabric-sdk-go/${CRYPTOCONFIG_FIXTURES_PATH}/peerOrganizations/org1.example.com/tlsca/tlsca.org1.example.com-cert.pem
      # 客户端和Fabric CA进行SSL握手的密钥和证书
      client:
        key:
          path: ${GOPATH}/src/github.com/hyperledger/fabric-sdk-go/${CRYPTOCONFIG_FIXTURES_PATH}/peerOrganizations/tls.example.com/users/[email protected]/tls/client.key
        cert:
          path: ${GOPATH}/src/github.com/hyperledger/fabric-sdk-go/${CRYPTOCONFIG_FIXTURES_PATH}/peerOrganizations/tls.example.com/users/[email protected]/tls/client.crt

    # Fabric-CA支持通过REST API进行动态用户注册
    registrar:
      enrollId: admin
      enrollSecret: adminpw
    # 可选,CA机构名称
    caName: ca.org1.example.com

八、client

client部分必需定义,客户端应用程序代表谁来和Fabric区块链网络来交互,可以定义超时选项。

#客户端定义
client:
  # 客户端所属的组织,必须是organizations定义的组织
  organization: org1
  #定义日志服务
  logging:
    level: debug #debug级别

  # peer、事件服务、orderer超时的全局配置
  # 本部分如果忽略,使用下列的值作为默认值
  peer:
    timeout:
      connection: 10s
      response: 180s
      discovery:
        greylistExpiry: 10s
  eventService:
    timeout:
      registrationResponse: 15s
  orderer:
    timeout:
      connection: 15s
      response: 15s
  global:
    timeout:
      query: 180s
      execute: 180s
      resmgmt: 180s
    cache:
      connectionIdle: 30s
      eventServiceIdle: 2m
      channelConfig: 30m
      channelMembership: 30s
      discovery: 10s
      selection: 10m

  # MSP根目录
  cryptoconfig:
    path: ${GOPATH}/src/github.com/hyperledger/fabric/AssetExchange/deploy/crypto-config

  # 某些SDK支持插件化的KV数据库, 通过指定credentialStore属性实现
  credentialStore:
    # 可选,用于用户证书材料存储,如果所有的证书材料被嵌入到配置文件,则不需要
    path: "/tmp/state-store"

    # 可选,指定Go SDK实现的CryptoSuite实现
    cryptoStore:
      # 指定用于加密密钥存储的底层KV数据库
      path: /tmp/msp

   # 客户端的BCCSP模块配置
  BCCSP:
    security:
     enabled: true
     default:
      provider: "SW"
     hashAlgorithm: "SHA2"
     softVerify: true
     level: 256

  tlsCerts:
    # 可选,当连接到peers,orderes时使用系统证书池,默认为false
    systemCertPool: true

    # 可选,客户端和peers与orderes进行TLS握手的密钥和证书
    client:
      key:
        path: ${GOPATH}/src/github.com/hyperledger/fabric-sdk-go/${CRYPTOCONFIG_FIXTURES_PATH}/peerOrganizations/tls.example.com/users/[email protected]/tls/client.key
      cert:
        path: ${GOPATH}/src/github.com/hyperledger/fabric-sdk-go/${CRYPTOCONFIG_FIXTURES_PATH}/peerOrganizations/tls.example.com/users/[email protected]/tls/client.crt

九、config.yaml示例

资产交易平台应用的配置文件如下:

# Copyright SecureKey Technologies Inc. All Rights Reserved.
#
# SPDX-License-Identifier: Apache-2.0
#
#
# The network connection profile provides client applications the information about the target
# blockchain network that are necessary for the applications to interact with it. These are all
# knowledge that must be acquired from out-of-band sources. This file provides such a source.

name: "assetchannel"

#
# Describe what the target network is/does.
#
description: "asset exchange network"

#指定版本
version: 1.0.0

#客户端定义
client:
  # 客户端所属的组织,必须是organizations定义的组织
  organization: org1
  #定义日志服务
  logging:
    level: debug #debug级别

  # MSP根目录
  cryptoconfig:
    path: ${GOPATH}/src/github.com/hyperledger/fabric/AssetExchange/deploy/crypto-config

  # 某些SDK支持插件化的KV数据库, 通过指定credentialStore属性实现
  credentialStore:
    # 可选,用于用户证书材料存储,如果所有的证书材料被嵌入到配置文件,则不需要
    path: "/tmp/state-store"

    # 可选,指定Go SDK实现的CryptoSuite实现
    cryptoStore:
      # 指定用于加密密钥存储的底层KV数据库
      path: /tmp/msp

   # 客户端的BCCSP模块配置
  BCCSP:
    security:
     enabled: true
     default:
      provider: "SW"
     hashAlgorithm: "SHA2"
     softVerify: true
     level: 256

  tlsCerts:
    # 可选,当连接到peers,orderes时使用系统证书池,默认为false
    systemCertPool: true

    # 可选,客户端和peers与orderes进行TLS握手的密钥和证书
    client:
      key:
        # path: ${GOPATH}/src/github.com/hyperledger/fabric-sdk-go/${CRYPTOCONFIG_FIXTURES_PATH}/peerOrganizations/tls.example.com/users/[email protected]/tls/client.key
      cert:
        #path: ${GOPATH}/src/github.com/hyperledger/fabric-sdk-go/${CRYPTOCONFIG_FIXTURES_PATH}/peerOrganizations/tls.example.com/users/[email protected]/tls/client.crt

# 如果应用程序创建了通道,不需要本部分
channels:
  # 如果没有定义channel配置或是定义的channel没有信息,使用默认channel
  # 如果channel没有定义peers,使用默认channel的peers
  # 如果channel没有定义orderes,使用默认channel的orderes
  # 如果channel没有定义背书策略,使用默认channel的背书策略
  # 如果channel定义了背书策略,但某些背书策略缺失,缺失的背书策略会被默认channel填充

  #如果_default没有定义,必选;如果_default已经定义,可选。
  # 通道名称
  assetchannel:
    # 如果_default peers没有定义,必选;如果_default peers已经定义,可选。
    # 参与组织的peer节点列表
    peers:
      peer0.org1.example.com:
        # 可选。peer节点是否会被发送交易提议只进行查询。peer节点必须安装链码。
        # 应用程序还可以使用本属性来决定发送链码安装的请求到哪个peer节点。默认值:true
        endorsingPeer: true

        # 可选。peer节点必须安装链码。peer节点是否会被发送交易提案只进行查询。
        # 应用程序还可以使用本属性来决定发送链码安装的请求到哪个peer节点。默认值:true
        chaincodeQuery: true

        # 可选。是否可以向peer节点发送不会进行链码查询的提案,如queryBlock(),
        # queryTransaction()等。默认值:true。
        ledgerQuery: true

        # 可选。peer节点是否为SDK事件监听器注册的目标,所有的peer节点都可以生产事件,
        # 但通常只需要连接一个对事件进行监听。默认值:true。
        eventSource: true
        # 可选,应用程序使用下列选项执行通道操作,如获取通道配置
    policies:
      #可选,获取通道配置区块
      queryChannelConfig:
        #可选,成功响应节点的最小数量
        minResponses: 1
        # 可选
        maxTargets: 1
        # 可选,查询配置区块的重试选项
        retryOpts:
          # 可选,重试次数
          attempts: 5
          # 可选, 第一次重试的后退间隔
          initialBackoff: 500ms
          # 可选, 重试的最大后退间隔
          maxBackoff: 5s
          backoffFactor: 2.0

# Fabric区块链网络中参与的组织列表
organizations:
  org1:
    mspid: Org1MSP
    # 组织的MSP存储位置,绝对路径或相对cryptoconfig的路径
    cryptoPath:  peerOrganizations/org1.example.com/users/{username}@org1.example.com/msp
    peers:
      - peer0.org1.example.com
      - peer1.org1.example.com
    # 可选,证书颁发机构签发×××明,Fabric-CA是一个特殊的证书管理机构,提供REST API支持动态证书管理,如登记、撤销、重新登记
    # 下列部分只为Fabric-CA服务器设置
    certificateAuthorities:
      #- ca.org1.example.com

  # Orderer组织名称
  ordererorg:
      # 组织的MSPID
      mspID: OrdererMSP
      # 加载用户需要的密钥和证书,绝对路径或相对路径
      cryptoPath: ordererOrganizations/example.com/users/{username}@example.com/msp

# 发送交易请求或通道创建、更新请求到的orderers列表
# 如果定义了超过一个orderer,SDK使用哪一个orderer由代码实现时指定
orderers:
  # orderer节点,可以定义多个
  orderer.example.com:
    url: orderer.example.com:7050
    # 以下属性由gRPC库定义,会被传递给gRPC客户端构造函数
    grpcOptions:
      ssl-target-name-override: orderer.example.com
      # 下列参数用于设置服务器上的keepalive策略,不兼容的设置会导致连接关闭
      # 当keep-alive-time被设置为0或小于激活客户端的参数,下列参数失效
      keep-alive-time: 0s
      keep-alive-timeout: 20s
      keep-alive-permit: false
      fail-fast: false
      allow-insecure: false

    tlsCACerts:
      # 证书的绝对路径
      # path: ${GOPATH}/src/github.com/hyperledger/fabric-sdk-go/${CRYPTOCONFIG_FIXTURES_PATH}/ordererOrganizations/example.com/tlsca/tlsca.example.com-cert.pem

# peers节点列表
peers:
  # peer节点定义,可以定义多个
  peer0.org1.example.com:
    # URL用于发送背书和查询请求
    url: peer0.org1.example.com:7051

    grpcOptions:
      ssl-target-name-override: peer0.org1.example.com
      keep-alive-time: 0s
      keep-alive-timeout: 20s
      keep-alive-permit: false
      fail-fast: false
      allow-insecure: false

    tlsCACerts:
      # 证书的绝对路径
      #path: ${GOPATH}/src/github.com/hyperledger/fabric-sdk-go/${CRYPTOCONFIG_FIXTURES_PATH}/peerOrganizations/org1.example.com/tlsca/tlsca.org1.example.com-cert.pem

原文地址:http://blog.51cto.com/9291927/2323421

时间: 2024-11-29 11:06:53

HyperLeger Fabric SDK开发(二)——Fabric SDK配置的相关文章

Hyperledger Fabric 实战(十二): Fabric 源码本地调试

借助开发网络调试 fabric 源码本地调试 准备工作 IDE Goland Go 1.9.7 fabric-samples 模块 chaincode-docker-devmode fabric 源码 步骤 添加本地域名 127.0.0.1 peer 127.0.0.1 orderer 用 ide 打开 $GOPATH 下的fabric源码目录 在源码目录下添加 dev-network 把 sampleconfig 下的所有文件复制到 dev-network 修改 core.yaml 中 fil

[Android Pro] 开发一流Android SDK

cp from : https://blog.csdn.net/dd864140130/article/details/53558011 本篇文章已授权微信公众号 guolin_blog (郭霖)独家发布 自从前段时间离职后,因为个人的事情一直没有选择再工作,也导致原有的文章并没有按时产出.最近个人的事情整理的也差不多了,恰好有不少朋友来问有关SDK开发方面的事情,在此就做个简单的梳理,希望能帮助各位. 目前更多开发者热衷于应用开发,极少数的开发者才有机会从事SDK开发工作,而市面上关于SDK开

HyperLeger Fabric SDK开发(一)——Fabric SDK开发简介

HyperLeger Fabric SDK开发(一)--Fabric SDK开发简介 一.Fabric SDK简介 1.Fabric SDK简介 Farbric的Peer节点和Orderer节点都提供了基于gRPC协议的接口,用于和Peer节点与Orderer节点进行命令/数据交互.为了简化开发,为开发人员开发应用程序提供操作Fabric区块链网络的API,Fabric官方提供了多种语言版本的SDK.Fabric提供了三种语言版本的SDK,分别如下:A.Fabric Nodejs SDKB.Fa

HyperLeger Fabric SDK开发(三)——fabsdk

HyperLeger Fabric SDK开发(三)--fabsdk 一.fabsdk简介 1.fabsdk简介 fabsdk是Fabric SDK的主要包,fabsdk支持客户端使用Hyperledger Fabric区块链网络.fabsdk基于配置创建上下文环境,上下文环境会在client包使用.官方文档:https://godoc.org/github.com/hyperledger/fabric-sdk-go/pkg/fabsdk 2.fabsdk使用基本流程 Fabsdk使用基本流程如

HyperLeger Fabric SDK开发(四)——channel

HyperLeger Fabric SDK开发(四)--channel 一.channel简介 1.channel?简介 pkg/client/channel支持访问Fabric网络上的通道.channel客户端实例提供与指定通道上的Peer节点进行交互的处理函数.channel客户端可以在指定通道上查询链码,执行链码以及注册或注销链码事件.如果应用程序需要与Fabric网络的多条通道进行交互,需要为每条通道创建一个单独的通道客户端实例.官方文档:https://godoc.org/github

HyperLeger Fabric SDK开发(六)——resmgmt

HyperLeger Fabric SDK开发(六)--resmgmt 一.resmgmt简介 1.resmgmt简介 resmgmt支持在Fabric网络上创建和更新资源.resmgmt允许管理员创建.更新通道,并允许Peer节点加入通道.管理员还可以在Peer节点上执行与链码相关的操作,例如安装,实例化和升级链码.官方文档:https://godoc.org/github.com/hyperledger/fabric-sdk-go/pkg/client/resmgmt 2.resmgmt使用

HyperLeger Fabric SDK开发(七)——ledger

HyperLeger Fabric SDK开发(七)--ledger 一.ledger简介 1.ledger简介 ledger包支持在Fabric网络上的指定通道上启用账本查询.如果应用程序需要对多个通道进行账本查询,需要为每个通道的账本客户端创建一个单独实例.账本客户端支持以下查询:QueryInfo,QueryBlock,QueryBlockByHash,QueryBlockByTxID,QueryTransaction和QueryConfig.官方文档:https://godoc.org/

HyperLeger Fabric SDK开发(八)——msp

HyperLeger Fabric SDK开发(八)--msp 一.msp简介 1.msp简介 msp支持在Fabric网络上创建和更新用户.MSP客户端支持以下操作:Enroll,Reenroll,Register,Revoke和GetSigningIdentity.官方文档:https://godoc.org/github.com/hyperledger/fabric-sdk-go/pkg/client/msp 2.msp使用流程 msp使用的基本流程如下:A.准备客户端上下文B.创建msp

HyperLeger Fabric开发(七)——HyperLeger Fabric链码开发

HyperLeger Fabric开发(七)--HyperLeger Fabric链码开发 一.链码开发模式 1.链码开发模式简介 Fabric的链码开发调试比较繁琐.在不使用链码开发模式的情况下,链码不能在本地测试,必须部署到docker,install和instantiate后,Peer节点会在新的容器中启动链码.但只能通过docker logs查看链码日志,通过打印日志的方式进行链码调试.如果对链码进行了修改,需要重新开始上述流程.为了简化Fabric链码开发的调试过程,Fabric引入了