Fabric GO SDK的背书策略问题

时间:2019-07-18 08:48:22

标签: go hyperledger-fabric hyperledger-fabric-sdk-go

我有一个Hyperledger Fabric测试网,其中有2个组织,1个组织中的3个对等体和2个组织中的2个对等体。每个组织的peer0是锚点peer。我想用仅一个组织:Org1的签注策略实例化一个链码,因此我指定了策略:“ AND('org1MSP.member')”。

我仅将链码安装在org1的对等节点中,因为org2不是认可者。但是,链代码不会实例化,因为它会将提案发送到另一个组织(org2)中的对等方。

问题是因为org2中的这些对等端未安装链码,但是...为什么SDK会将背书请求发送给不属于背书策略的对等人?

这是我的配置文件,如您所见,我只有org1的一个对等体:https://gist.github.com/mtnieto/02dd17097de64a73bd627594056598ed

我已将以下功能添加到配置中,但是它不起作用。

channels:

  # multi-org test channel
  examplechannel:

    peers:
      peer0.org1.example.com:
        endorsingPeer: true
        chaincodeQuery: true
        ledgerQuery: true
        eventSource: true
      peer1.org1.example.com:
        endorsingPeer: false
        chaincodeQuery: false
        ledgerQuery: true
        eventSource: true


      peer2.org1.example.com:
        endorsingPeer: false
        chaincodeQuery: false
        ledgerQuery: true
        eventSource: true

      peer0.org2.example.com:
        endorsingPeer: false
        chaincodeQuery: false
        ledgerQuery: true
        eventSource: true

      peer1.org2.example.com:
        endorsingPeer: false
        chaincodeQuery: false
        ledgerQuery: true
        eventSource: true

日志如下:

  

“错误”:“创建链码时出错:发送部署事务   投标失败:发生多个错误:-事务​​处理   背书人[peer0.org2.example.com:8051]:背书人客户端状态   代码:(23)CHAINCODE_NAME_NOT_FOUND。说明:无法获得包装   链码(examplecc:2)-背书人的交易处理   [peer1.org2.example.com:6051]:Enderser客户端状态代码:(23)   CHAINCODE_NAME_NOT_FOUND。说明:无法获取包   链码(examplecc:2)“

以下是实例化链码的代码。 (在之前的阶段中,我已经安装了链码)

sdk, err = fabsdk.New(config.FromFile("config.yaml"))
    if err != nil {
        log.Errorf("Failed to create new SDK: ", err)
        return nil, err
    }

adminContext := sdk.Context("admin", "org1"))
// Org resource management client
orgResMgmt, err := resmgmt.New(adminContext)
if err != nil {
    log.Errorf("Failed to create resource management client %v: ", err)
    return nil, err

}


ccPolicy, err := cauthdsl.FromString(instantiateReq.EndorsmentPolicy)
if err != nil {
    log.Errorf(" Error parsing endorsment policy %v: ", err)
    return "", err
}   

instantiateRequest := resmgmt.InstantiateCCRequest{Name: instantiateReq.Name, Path: instantiateReq.Path, Version: instantiateReq.Version, Args: instantiateReq.Args, Policy: ccPolicy}

在将对等方更新为锚点时会发生这种情况。换句话说,如果我在初始化网络时未在对等节点中执行以下命令,则不会发生该错误。

(在peer0 org1上下文中)

peer channel update -o orderer0.example.com:7050 -c $CHANNEL_NAME --tls $CORE_PEER_TLS_ENABLED --cafile $ORDERER_CA -f ./channel-artifacts/org1MSPanchors.tx >&log.txt

在peer0 org2上下文中

peer channel update -o orderer0.example.com:7050 -c $CHANNEL_NAME --tls $CORE_PEER_TLS_ENABLED --cafile $ORDERER_CA -f ./channel-artifacts/org2MSPanchors.tx >&log.txt

1 个答案:

答案 0 :(得分:0)

这是1.4.1版本中的错误,不是认可者组织正在尝试执行lscc并认可交易。

我已经将网络升级到1.4.2,现在看来问题已经消失了。