【问题标题】:Hyperledger Farbic v2.0 problem with ChaincodeException payload链码异常有效负载的 Hyperledger Fabric v2.0 问题
【发布时间】:2021-01-21 12:59:14
【问题描述】:

主要问题是从客户端的角度来看会出现有效负载错误。

基本设置

Fabric 链码 -> 在 Java 中使用 fabric-chaincode-shim 实现:v2.3.0

应用程序客户端 -> 在 Typescript 中使用 fabric-network: 2.2.5 实现。

已实现的每个事务都可以正常工作,但我想知道如何实现客户端可读的 error_codes。

当我使用如下负载抛出 ChaincodeException 时,从客户端应用程序的角度来看,我得到了空缓冲区属性。

链码角度的示例代码:

public void createAsset(final Context ctx, String createAssetDto) { 
    throw new ChaincodeException("Sample message", "SamplePayloadWithSpecifiedCode");
}

应用客户端角度的示例代码:

    try {
        await contract.submitTransaction('createAsset', JSON.stringify(createAssetDto));
        success = true;
    } catch (err) {
        logException(err);
        success = false;
    }

我注意到在对等实现中有一个函数将 ChaincodeMessage 解析为错误


    case pb.ChaincodeMessage_ERROR:
        return nil, resp.ChaincodeEvent, errors.Errorf("transaction returned with failure: %s", resp.Payload)

从同行的角度看日志:

failed to invoke chaincode ecmr, error: transaction returned with failure: Sample Message
github.com/hyperledger/fabric/core/chaincode.processChaincodeExecutionResult
    /go/src/github.com/hyperledger/fabric/core/chaincode/chaincode_support.go:182

从这个角度来看,这意味着 ChaincodeException 消息是有效负载。

从客户端的角度来看,错误已经得到:

{
  status: 500,
  message: "error in simulation: transaction returned with failure: Sample Message",
  payload: {
  },
}

我认为我应该在 response.payload 属性中获得“SamplePayloadWithSpecifiedCode”。

我已经在源代码中找到了可能在 java 链码实现中将消息设置为来自 ChaincodeException 的有效负载的位置:

欢迎任何建议。谢谢

【问题讨论】:

  • 我认为这个问题之前已经出现过,在 Hyperledger fabric-sdk-java 火箭聊天频道 - chat.hyperledger.org/channel/… 可能值得在 jira 上打开一个问题 - hyperledger-fabric.readthedocs.io/en/release-2.2/…
  • 简单的结论 - 结构 java 链码实现返回不正确的有效负载(仅来自 ChaincodeException 的消息)。来自 ChaincodeException 的有效负载被省略。我说的对吗?

标签: hyperledger-fabric hyperledger hyperledger-chaincode


【解决方案1】:

SDK 应在 Fabric v2.x 中出现错误时提供有效负载。但是,这是目前已知的问题。您可以通过 Fabric Jira 和 Rocket Chat 查看。

请参阅下面的相关链接。

  1. FABN-1667 - Payload no longer provided in Evaluation errors in SDK
  2. FABG-974 - Error codes >= 400 do not return a message or payload
  3. FABN-1041 - inconsistent response if promise is rejected
  4. Java SDK chat
  • 向客户端(请求者)返回上下文(带有错误日志)可以看到内部结构,这被认为是不好的安全做法

【讨论】:

  • 来自链码的错误有效载荷应该由 SDK 提供,所以我认为这是一个错误而不是设计使然。您绝对正确,链代码实现不应该通过错误泄漏敏感信息。
  • 很抱歉,表达式似乎有问题。可能是翻译的问题。我的意图是实现,而不是设计。 :(
  • 在edit的情况下,我的功能目前被屏蔽了,所以发布后会修改。
猜你喜欢
  • 2021-05-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-10-12
  • 1970-01-01
  • 1970-01-01
  • 2019-09-22
相关资源
最近更新 更多