【问题标题】:Implement transaction commit listener using fabric-sdk-node v2.1使用 fabric-sdk-node v2.1 实现事务提交监听器
【发布时间】:2020-05-18 18:31:09
【问题描述】:

我目前正在使用 fabric-sdk-node 的版本 2.1 并尝试使用 Network.addCommitListener() 函数在应用程序中实现事务提交侦听器,但是在提交事务以供背书后我无法接收任何事件。

为了实现这一点,我使用了以下代码:

var listener = (error, event) => {
            if (error) {
                // Handle peer communication error
            }
            else {
                // Handle transaction commit event
            }
        };

        const peers = network.channel.getEndorsers();
        await network.addCommitListener(listener, peers, txId);

listener 对象似乎存在一些问题,因为根据official documentation,侦听器对象的类型定义为CommitListner,但无法弄清楚如何在我的解决方案中实现它。任何帮助将不胜感激。

【问题讨论】:

    标签: node.js hyperledger-fabric hyperledger-fabric-sdk-js


    【解决方案1】:

    如果您只想接收来自网络中所有对等方的提交事件,那么您可以通过简单地使用NETWORK_SCOPE_ALL_FOR_TX 默认事务事件处理程序来实现。其他一切都由您负责,所有对 Transaction.submit() 的调用将仅在从所有可联系的对等方收到提交事件后返回。

    如果您想实现自己的自定义提交等待逻辑而不是使用默认实现之一,您应该实现自己的事务事件处理程序。这将在提交流程中的适当时间被调用并传递您需要的信息。

    本页详细介绍了上述两种方法,包括本页底部的示例事务事件处理程序实现(使用提交侦听器)的链接:

    最后一种方法是获取事务 ID 并附加提交侦听器调用 submit 以确保您不会错过事务提交事件。然后应该使用NONE 事务事件处理程序执行提交,以便在事务成功发送到排序器后立即返回提交。这至少需要 fabric-network 的 2.1.1 版本,其中引入了在调用提交之前获取事务 ID(并覆盖每个事务的默认事务事件处理程序)的能力。

    上述所有模式在 v1.4 版本中也应该可以使用,但事件监听 API 略有不同。有关详细信息,请参见此处:

    【讨论】:

    • 感谢您的解释!我也遵循第三种方法,使用NONE 策略提交交易,但仍然无法在listner 回调函数中接收任何交易事件。我在问题中提到了我的listner 的代码。
    猜你喜欢
    • 1970-01-01
    • 2011-08-20
    • 2021-03-13
    • 1970-01-01
    • 1970-01-01
    • 2015-07-03
    • 2022-08-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多