无法从SDK调用Chaincode

时间:2019-08-21 18:28:54

标签: hyperledger-fabric hyperledger hyperledger-chaincode chaincode

我可以通过以下命令从对等方调用链码:

peer chaincode invoke -o coreOrderer.dip.com:7050 --tls --cafile /etc/hyperledger/tlsca.dip.com-cert.pem --tlsRootCertFiles /etc/hyperledger/fabric/tls/ca.crt -C dipchannel -n mycc --peerAddresses peer0.core.dip.com:7051 -c '{"Args":["query","a"]}'

而且有效,我可以在对等日志中看到:

Entry chaincode: name:"mycc"
Exit chaincode: name:"mycc"  (2ms)

我可以在我的链码容器中看到此调用的结果。

但是当我尝试通过SDK从我的代码中调用

    req := channel.Request{
        ChaincodeID: "mycc",
        Fcn:         "query",
        Args:        [][]byte{[]byte("a")},
    }
    resp, err := client.Execute(req)

我的响应为空,在对等日志中,我看到:

Entry chaincode: name:"cscc"
Exit chaincode: name:"cscc"  (1ms)

Entry chaincode: name:"lscc"
Exit chaincode: name:"lscc"  (1ms)

为什么要调用“ cscc”和“ lscc”链码而没有调用“ mycc”?

1 个答案:

答案 0 :(得分:0)

在下面检查这是系统链码

LSCC 生命周期系统链代码处理上述生命周期请求。 >>> Chaincode生命周期

CSCC 配置系统链码在对等端处理通道配置。 >>> 这有助于管理访问控制

QSCC 查询系统链码提供分类帐查询API,例如获取区块和交易。

注意:特别是,安装,实例化和升级不适用于系统链码。

Hyperledger Fabric中使用系统链码来实现许多系统行为,以便系统集成商可以适当地替换或修改它们。

与用户链码不同,不会使用SDK或CLI的建议来安装和实例化系统链码。它由对等方在启动时注册并部署

  
    
      
        

要查询>>>>

      
    
  

在进入ACC监管者CSCC时检查您是否提供身份

在我的代码段下面检查

func (setup *FabricSetup) Query() (string, error) {
    // Channel client is used to query and execute transactions
    clientContext := setup.sdk.ChannelContext(setup.ChannelID, fabsdk.WithUser(setup.OrgAdmin))
    client, err := channel.New(clientContext)
    setup.client = client
    // Prepare arguments
    var args []string
    args = append(args, "queryRate")
    args = append(args, "001")

    response, err := setup.client.Query(
        channel.Request{
            ChaincodeID: setup.ChainCodeID,
            Fcn:         args[0],
            Args:        [][]byte{[]byte(args[1])},
        },
    )
    if err != nil {
        return "", fmt.Errorf("failed to query: %v", err)
    }

    return string(response.Payload), nil
}