【问题标题】:How do I notify the client application when a chaincode is invoked?调用链码时如何通知客户端应用程序?
【发布时间】:2016-11-23 16:34:09
【问题描述】:

当调用链码时,有没有办法调用 REST API(外部),以便客户端应用程序可以收到新事务的通知。

除了REST,还有其他选择吗?

【问题讨论】:

    标签: blockchain hyperledger ethereum hyperledger-fabric


    【解决方案1】:

    最好使用事件 https://github.com/hyperledger/fabric/blob/master/docs/protocol-spec.md#35-events

    验证对等点和链码可以在网络上发出事件 应用程序可能会监听并采取行动。有一套 预定义事件,链码可以生成自定义事件。活动 由 1 个或多个事件适配器使用。适配器可以进一步提供 使用 Web hooks 或 Kafka 等其他工具的事件。

    应用程序可以从 Fabric 订阅事件流并监听您的链码生成的消息。

    可以在此处找到有关如何使用事件的示例: https://github.com/hyperledger/fabric/tree/master/examples/events/block-listener

    【讨论】:

    • 在调用块监听器时,我可以传递链码 ID。它到底是什么?部署时使用的链代码的名称?或者是其他东西?可以举个例子吗?
    • 我可以从链码事件中获得什么信息?我是超级账本和 golang 的新手。
    【解决方案2】:

    添加到 Sergey 的答案中,有 3 种类型的事件。

    1. BLOCK EVENT,在账本更改时创建。
    2. REJECTION EVENT,在发生任何错误时创建(在用户链码或系统链码中)
    3. CHAINCODE EVENT,它是用户句柄,允许用户链码创建事件。 [我注意到的奇怪的事情是,根据当前设计,每次调用只允许一个 CHAINCODE 事件]

    你可以在你的终端运行一个事件监听器/客户端,监听 gRPC 端口,(你可以从 core.yaml 文件中获取端口)或者你甚至可以参考 Sergey 提到的例子。

    在您的情况下,我猜您正在寻找成功的交易。在这种情况下,您应该监听 BLOCK 事件和 REJECTION 事件。触发调用时收到的事务 UUID 可用于扫描事件并在匹配时触发操作。 另请注意,如果事务导致 REJECTION EVENT,则它不会有 BLOCK EVENT。 希望这可以帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-12-04
      • 1970-01-01
      • 2020-09-28
      • 1970-01-01
      • 2019-02-13
      • 1970-01-01
      • 2011-04-26
      相关资源
      最近更新 更多