代码之家  ›  专栏  ›  技术社区  ›  ulu

从Hyperledger结构中的链码返回值

  •  1
  • ulu  · 技术社区  · 6 年前

    我希望从链码事务中获取一些数据(对于查询来说太复杂),但是,正如我从代码中看到的,事务返回的承诺不会解析为值。此外,chaincode可以访问当前用户的身份,我不知道如何在查询中实现这一点。

    这个 Util 类同时包含 invokeChainCode queryChainCode 方法,但 BusinessNetworkConnection 类只有 submitTransaction 使用的事务处理方法 invokeChainCode 并且不返回任何值。

    除了复制和修改 提交交易 ?

    1 回复  |  直到 6 年前
        1
  •  2
  •   arnabkaycee    6 年前

    据我所知,您希望从事务中返回一些值。

    假设事务是调用类型(不是查询),那么无论您从链代码返回什么(例如 shim.Success(someData); ,它将是事务负载的一部分。)

    因此,为了从事务中获取该事务有效负载,您必须确保其已提交到对等方的分类帐。

    当然,在提交事务之前,您可以使用给定的事务id订阅事务事件)

    收到此事件后,您可以确保您的事务已在对等方中成功提交。

    您可以使用相同的事务ID,您可以查询对等方的事务块。

    一旦获得JSON中的事务负载,就可以深入JSON并在JSON负载的建议响应部分中找到返回值。

    [附:假设您使用的是Node JS SDK]

    编辑1:

    Hyperledger结构在更广泛的级别上仅支持两种类型的交易。

    1. 调用-如果您将提案响应发送给订购方,那么您的值(如果有)将写入状态,否则,任何查询到的值都将作为提案响应负载的一部分返回。
    2. 部署-在链码部署事务中,负载只是一个链码二进制。

    因此,如果您有只读事务,那么您可以提交该事务并从对等方获取建议响应负载。建议响应本身是查询调用的结果。